Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,117 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  partial class AboutDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.pictureBox = new System.Windows.Forms.PictureBox();
+      this.textBox1 = new System.Windows.Forms.TextBox();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Location = new System.Drawing.Point(295, 147);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.pictureBox.Image = global::HeuristicLab.AdvancedOptimizationFrontend.Properties.Resources.Logo_gray;
+      this.pictureBox.Location = new System.Drawing.Point(12, 12);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(159, 158);
+      this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+      this.pictureBox.TabIndex = 1;
+      this.pictureBox.TabStop = false;
+      // 
+      // textBox1
+      // 
+      this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.textBox1.Location = new System.Drawing.Point(177, 57);
+      this.textBox1.Multiline = true;
+      this.textBox1.Name = "textBox1";
+      this.textBox1.ReadOnly = true;
+      this.textBox1.Size = new System.Drawing.Size(193, 60);
+      this.textBox1.TabIndex = 3;
+      this.textBox1.Text = "HeuristicLab\r\nv. 3.0.0.0\r\n\r\n(c) 2002-2008 HEAL";
+      // 
+      // AboutDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(382, 182);
+      this.Controls.Add(this.textBox1);
+      this.Controls.Add(this.pictureBox);
+      this.Controls.Add(this.okButton);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "AboutDialog";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "About HeuristicLab";
+      this.TopMost = true;
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.PictureBox pictureBox;
+    private System.Windows.Forms.TextBox textBox1;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// The about dialog that presents some basic information about the application.
+  /// </summary>
+  public partial class AboutDialog : Form {
+    /// <summary>
+    /// Initializes a new instance of <see cref="AboutDialog"/>.
+    /// </summary>
+    public AboutDialog() {
+      InitializeComponent();
+      textBox1.Text = @"HeuristicLab
+v." + Application.ProductVersion + @"
+
+(c) 2002-2008 HEAL";
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AboutDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.Designer.cs	(revision 1270)
@@ -0,0 +1,316 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  partial class AvailableOperatorsForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AvailableOperatorsForm));
+      this.builtinOperatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.builtinOperatorsTreeView = new System.Windows.Forms.TreeView();
+      this.builtinOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.operatorLibrariesTabPage = new System.Windows.Forms.TabPage();
+      this.operatorLibraryTextBox = new System.Windows.Forms.TextBox();
+      this.operatorLibraryLabel = new System.Windows.Forms.Label();
+      this.operatorLibraryOperatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.operatorLibraryOperatorsTreeView = new System.Windows.Forms.TreeView();
+      this.operatorLibraryOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
+      this.loadButton = new System.Windows.Forms.Button();
+      this.builtinTabPage = new System.Windows.Forms.TabPage();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.builtinOperatorsGroupBox.SuspendLayout();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.operatorLibrariesTabPage.SuspendLayout();
+      this.operatorLibraryOperatorsGroupBox.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.builtinTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // builtinOperatorsGroupBox
+      // 
+      this.builtinOperatorsGroupBox.Controls.Add(this.splitContainer2);
+      this.builtinOperatorsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsGroupBox.Location = new System.Drawing.Point(3, 3);
+      this.builtinOperatorsGroupBox.Name = "builtinOperatorsGroupBox";
+      this.builtinOperatorsGroupBox.Size = new System.Drawing.Size(594, 390);
+      this.builtinOperatorsGroupBox.TabIndex = 0;
+      this.builtinOperatorsGroupBox.TabStop = false;
+      this.builtinOperatorsGroupBox.Text = "&Available Operators";
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.builtinOperatorsTreeView);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.builtinOperatorsDescriptionTextBox);
+      this.splitContainer2.Size = new System.Drawing.Size(588, 371);
+      this.splitContainer2.SplitterDistance = 272;
+      this.splitContainer2.TabIndex = 2;
+      // 
+      // builtinOperatorsTreeView
+      // 
+      this.builtinOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsTreeView.HideSelection = false;
+      this.builtinOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
+      this.builtinOperatorsTreeView.Name = "builtinOperatorsTreeView";
+      this.builtinOperatorsTreeView.Size = new System.Drawing.Size(588, 272);
+      this.builtinOperatorsTreeView.TabIndex = 0;
+      this.builtinOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.builtinOperatorsTreeView_AfterSelect);
+      this.builtinOperatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.builtinOperatorsTreeView_ItemDrag);
+      // 
+      // builtinOperatorsDescriptionTextBox
+      // 
+      this.builtinOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.builtinOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.builtinOperatorsDescriptionTextBox.Multiline = true;
+      this.builtinOperatorsDescriptionTextBox.Name = "builtinOperatorsDescriptionTextBox";
+      this.builtinOperatorsDescriptionTextBox.ReadOnly = true;
+      this.builtinOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.builtinOperatorsDescriptionTextBox.Size = new System.Drawing.Size(588, 95);
+      this.builtinOperatorsDescriptionTextBox.TabIndex = 0;
+      // 
+      // 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.operatorLibrariesTabPage);
+      this.tabControl.Controls.Add(this.builtinTabPage);
+      this.tabControl.Location = new System.Drawing.Point(12, 12);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(608, 422);
+      this.tabControl.TabIndex = 0;
+      // 
+      // operatorLibrariesTabPage
+      // 
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryTextBox);
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryLabel);
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryOperatorsGroupBox);
+      this.operatorLibrariesTabPage.Controls.Add(this.loadButton);
+      this.operatorLibrariesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorLibrariesTabPage.Name = "operatorLibrariesTabPage";
+      this.operatorLibrariesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorLibrariesTabPage.Size = new System.Drawing.Size(600, 396);
+      this.operatorLibrariesTabPage.TabIndex = 0;
+      this.operatorLibrariesTabPage.Text = "Operator Libraries";
+      this.operatorLibrariesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorLibraryTextBox
+      // 
+      this.operatorLibraryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.operatorLibraryTextBox.Location = new System.Drawing.Point(97, 8);
+      this.operatorLibraryTextBox.Name = "operatorLibraryTextBox";
+      this.operatorLibraryTextBox.ReadOnly = true;
+      this.operatorLibraryTextBox.Size = new System.Drawing.Size(416, 20);
+      this.operatorLibraryTextBox.TabIndex = 2;
+      // 
+      // operatorLibraryLabel
+      // 
+      this.operatorLibraryLabel.AutoSize = true;
+      this.operatorLibraryLabel.Location = new System.Drawing.Point(6, 11);
+      this.operatorLibraryLabel.Name = "operatorLibraryLabel";
+      this.operatorLibraryLabel.Size = new System.Drawing.Size(85, 13);
+      this.operatorLibraryLabel.TabIndex = 1;
+      this.operatorLibraryLabel.Text = "&Operator Library:";
+      // 
+      // operatorLibraryOperatorsGroupBox
+      // 
+      this.operatorLibraryOperatorsGroupBox.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.operatorLibraryOperatorsGroupBox.Controls.Add(this.splitContainer1);
+      this.operatorLibraryOperatorsGroupBox.Enabled = false;
+      this.operatorLibraryOperatorsGroupBox.Location = new System.Drawing.Point(6, 35);
+      this.operatorLibraryOperatorsGroupBox.Name = "operatorLibraryOperatorsGroupBox";
+      this.operatorLibraryOperatorsGroupBox.Size = new System.Drawing.Size(588, 355);
+      this.operatorLibraryOperatorsGroupBox.TabIndex = 3;
+      this.operatorLibraryOperatorsGroupBox.TabStop = false;
+      this.operatorLibraryOperatorsGroupBox.Text = "&Available Operators";
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.operatorLibraryOperatorsTreeView);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.operatorLibraryOperatorsDescriptionTextBox);
+      this.splitContainer1.Size = new System.Drawing.Size(582, 336);
+      this.splitContainer1.SplitterDistance = 237;
+      this.splitContainer1.TabIndex = 1;
+      // 
+      // operatorLibraryOperatorsTreeView
+      // 
+      this.operatorLibraryOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryOperatorsTreeView.HideSelection = false;
+      this.operatorLibraryOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
+      this.operatorLibraryOperatorsTreeView.Name = "operatorLibraryOperatorsTreeView";
+      this.operatorLibraryOperatorsTreeView.ShowNodeToolTips = true;
+      this.operatorLibraryOperatorsTreeView.Size = new System.Drawing.Size(582, 237);
+      this.operatorLibraryOperatorsTreeView.TabIndex = 0;
+      this.operatorLibraryOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
+      this.operatorLibraryOperatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorLibraryOperatorsTreeView_ItemDrag);
+      // 
+      // operatorLibraryOperatorsDescriptionTextBox
+      // 
+      this.operatorLibraryOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.operatorLibraryOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorLibraryOperatorsDescriptionTextBox.Multiline = true;
+      this.operatorLibraryOperatorsDescriptionTextBox.Name = "operatorLibraryOperatorsDescriptionTextBox";
+      this.operatorLibraryOperatorsDescriptionTextBox.ReadOnly = true;
+      this.operatorLibraryOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.operatorLibraryOperatorsDescriptionTextBox.Size = new System.Drawing.Size(582, 95);
+      this.operatorLibraryOperatorsDescriptionTextBox.TabIndex = 0;
+      // 
+      // loadButton
+      // 
+      this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.loadButton.Location = new System.Drawing.Point(519, 6);
+      this.loadButton.Name = "loadButton";
+      this.loadButton.Size = new System.Drawing.Size(75, 23);
+      this.loadButton.TabIndex = 0;
+      this.loadButton.Text = "&Load...";
+      this.loadButton.UseVisualStyleBackColor = true;
+      this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
+      // 
+      // builtinTabPage
+      // 
+      this.builtinTabPage.Controls.Add(this.builtinOperatorsGroupBox);
+      this.builtinTabPage.Location = new System.Drawing.Point(4, 22);
+      this.builtinTabPage.Name = "builtinTabPage";
+      this.builtinTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.builtinTabPage.Size = new System.Drawing.Size(600, 396);
+      this.builtinTabPage.TabIndex = 1;
+      this.builtinTabPage.Text = "Built-In";
+      this.builtinTabPage.UseVisualStyleBackColor = true;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "library";
+      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.openFileDialog.Title = "Open file ...";
+      // 
+      // AvailableOperatorsForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.tabControl);
+      this.DockAreas = ((WeifenLuo.WinFormsUI.Docking.DockAreas)(((((WeifenLuo.WinFormsUI.Docking.DockAreas.Float | WeifenLuo.WinFormsUI.Docking.DockAreas.DockLeft)
+                  | WeifenLuo.WinFormsUI.Docking.DockAreas.DockRight)
+                  | WeifenLuo.WinFormsUI.Docking.DockAreas.DockTop)
+                  | WeifenLuo.WinFormsUI.Docking.DockAreas.DockBottom)));
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "AvailableOperatorsForm";
+      this.ShowHint = WeifenLuo.WinFormsUI.Docking.DockState.DockLeft;
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.TabText = "Available Operators";
+      this.Text = "Available Operators";
+      this.builtinOperatorsGroupBox.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      this.splitContainer2.ResumeLayout(false);
+      this.tabControl.ResumeLayout(false);
+      this.operatorLibrariesTabPage.ResumeLayout(false);
+      this.operatorLibrariesTabPage.PerformLayout();
+      this.operatorLibraryOperatorsGroupBox.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.Panel2.PerformLayout();
+      this.splitContainer1.ResumeLayout(false);
+      this.builtinTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox builtinOperatorsGroupBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage operatorLibrariesTabPage;
+    private System.Windows.Forms.TabPage builtinTabPage;
+    private System.Windows.Forms.TextBox operatorLibraryTextBox;
+    private System.Windows.Forms.Label operatorLibraryLabel;
+    private System.Windows.Forms.GroupBox operatorLibraryOperatorsGroupBox;
+    private System.Windows.Forms.TreeView operatorLibraryOperatorsTreeView;
+    private System.Windows.Forms.Button loadButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.TreeView builtinOperatorsTreeView;
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private System.Windows.Forms.TextBox builtinOperatorsDescriptionTextBox;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.TextBox operatorLibraryOperatorsDescriptionTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.cs	(revision 1270)
@@ -0,0 +1,171 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// Display of all available operators of a specific operator library.
+  /// </summary>
+  public partial class AvailableOperatorsForm : DockContent {
+    #region Inner Class TreeNodeSorter
+    private class TreeNodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if (result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+    #endregion
+
+    private IOperatorLibrary operatorLibrary;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AvailableOperatorsForm"/>.
+    /// </summary>
+    public AvailableOperatorsForm() {
+      InitializeComponent();
+      operatorLibrary = null;
+      TreeNodeSorter nodeSorter = new TreeNodeSorter();
+      operatorLibraryOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
+      builtinOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
+
+      DiscoveryService discoveryService = new DiscoveryService();
+      PluginInfo[] plugins = discoveryService.Plugins;
+      foreach(PluginInfo plugin in plugins) {
+        TreeNode pluginItem = new TreeNode();
+        pluginItem.Text = plugin.Name;
+        pluginItem.Tag = plugin;
+
+        Type[] operators = discoveryService.GetTypes(typeof(IOperator), plugin);
+        foreach(Type type in operators) {
+          if(!type.IsAbstract) {
+            TreeNode operatorItem = new TreeNode();
+            operatorItem.Text = type.Name;
+            operatorItem.Tag = type;
+            pluginItem.Nodes.Add(operatorItem);
+          }
+        }
+        // add plugin node only if it contains operators
+        if(pluginItem.Nodes.Count > 0) {
+          builtinOperatorsTreeView.Nodes.Add(pluginItem);
+        }
+      }
+      if (builtinOperatorsTreeView.Nodes.Count == 0) {
+        builtinOperatorsTreeView.Enabled = false;
+        builtinOperatorsTreeView.Nodes.Add("No operators available");
+      }
+      builtinOperatorsTreeView.Sort();
+    }
+
+    private void UpdateOperatorsTreeView() {
+      operatorLibraryOperatorsTreeView.Nodes.Clear();
+      operatorLibraryOperatorsTreeView.Nodes.Add(CreateTreeNode(operatorLibrary.Group));
+      operatorLibraryOperatorsTreeView.Sort();
+    }
+
+    private TreeNode CreateTreeNode(IOperatorGroup group) {
+      TreeNode node = new TreeNode();
+      node.Text = group.Name;
+      node.ForeColor = Color.LightGray;
+      node.Tag = group;
+
+      foreach (IOperator op in group.Operators)
+        node.Nodes.Add(CreateTreeNode(op));
+      foreach (IOperatorGroup subGroup in group.SubGroups)
+        node.Nodes.Add(CreateTreeNode(subGroup));
+      return node;
+    }
+    private TreeNode CreateTreeNode(IOperator op) {
+      TreeNode node = new TreeNode();
+      node.Text = op.Name;
+      node.ToolTipText = op.GetType().Name;
+      node.Tag = op;
+      return node;
+    }
+
+    #region Selection Events
+    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      operatorLibraryOperatorsDescriptionTextBox.Text = "";
+      if ((operatorLibraryOperatorsTreeView.SelectedNode != null) && (operatorLibraryOperatorsTreeView.SelectedNode.Tag is IOperator))
+        operatorLibraryOperatorsDescriptionTextBox.Text = ((IOperator)operatorLibraryOperatorsTreeView.SelectedNode.Tag).Description;
+    }
+    private void builtinOperatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      builtinOperatorsDescriptionTextBox.Text = "";
+      if ((builtinOperatorsTreeView.SelectedNode != null) && (builtinOperatorsTreeView.SelectedNode.Tag is Type))
+        builtinOperatorsDescriptionTextBox.Text = ((IOperator)Activator.CreateInstance((Type)builtinOperatorsTreeView.SelectedNode.Tag)).Description;
+    }
+    #endregion
+
+    #region Click Events
+    private void loadButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        operatorLibrary = (IOperatorLibrary)PersistenceManager.Load(openFileDialog.FileName);
+        operatorLibraryTextBox.Text = openFileDialog.FileName;
+        toolTip.SetToolTip(operatorLibraryTextBox, openFileDialog.FileName);
+        operatorLibraryOperatorsGroupBox.Enabled = true;
+        UpdateOperatorsTreeView();
+      }
+    }
+    private void closeButton_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+    #endregion
+
+    #region Drag and Drop Events
+    private void operatorLibraryOperatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = e.Item as TreeNode;
+      if ((node != null) && (node.Tag is IOperator)) {
+        IOperator op = (IOperator)node.Tag;
+        op = (IOperator)op.Clone();
+        DataObject data = new DataObject();
+        data.SetData("IOperator", op);
+        data.SetData("DragSource", operatorLibraryOperatorsTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    private void builtinOperatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = e.Item as TreeNode;
+      if ((node != null) && (node.Tag is Type)) {
+        IOperator op = (IOperator)Activator.CreateInstance((Type)node.Tag);
+        DataObject data = new DataObject();
+        data.SetData("IOperator", op);
+        data.SetData("DragSource", builtinOperatorsTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/AvailableOperatorsForm.resx	(revision 1270)
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>141, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAQAEBAQAAAABAAoAQAARgAAACAgEAAAAAQA6AIAAG4BAAAQEAAAAAAYAGgDAABWBAAAICAAAAAA
+        GACoDAAAvgcAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA
+        AAAAAHZgAREQAAAAeGAJERAAAAB4YAkREAAAAHhwBxEQAAAAeHAHERAAAAd4dwd3EAAAdwCHeHcQAACA
+        hwh4iBAAAICAeHF3EAAAeICHcIYAAAAAAAhwhwBwAAAACIeHd3AAAAAIBwiHgAAAAAiAd3gAAAAAAAAA
+        AAD//wAA8YcAAPGHAADxhwAA8YcAAPGHAADghwAAzAcAANIHAADUBwAAxE8AAP5FAAD+AQAA/qEAAP5D
+        AAD//wAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAIAAAIAAAACA
+        gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3AAAREREAAAAAAAAAAAcIhgAAkRERAAAAAAAAAAAHCI
+        YAAJeZEQAAAAAAAAAABwiGAACXmREAAAAAAAAAAAcIhwAAl5kRAAAAAAAAAAAHCIcAAJeZEQAAAAAAAA
+        AACAiHAACXmREAAAAAAAAAAAgIhwAAd5mRAAAAAAAAAAAICIcAAHd3cQAAAAAAAAAACAiHAAB4d3EAAA
+        AAAAAAAHgIh3AAeHdxAAAAAAAAAAd4CId3AHh3cQAAAAAAAAB3iACIdnB4h3UAAAAAAAAAeAAAAIdweI
+        h3AAAAAAAAAIAId3AHYIiIdwAAAAAAAACAh3B4CGCIiHcAAAAAAAAAgIcACAhwgACHAAAAAAAAAIAIcH
+        AIcId3RwAAAAAAAACIAHAAh3CHh0gAAAAAAAAAB4dwh3cAh4dIAAAAAAAAAAAAAAAAAAeHYAAGAAAAAA
+        AAAAAHd3BniHYGZgAAAAAAAAAAB4h3eIh3d3cAAAAAAAAAAAcIiIiId3h3AAAAAAAAAAAHAIiACIiHdw
+        AAAAAAAAAABwCIgAAAd3AAAAAAAAAAAAd3d4d3d3cAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////weB//9Hgf//R4H//0eB//9Hgf//R4H//0eB//9H
+        gf//R4H//0eB//5Dgf/8QYH/+GCB//n4gf/7DIH/+iSB//p0uf/7LIH/+biB//whgf///8Pf//CBH//w
+        AB//9AAf//YwH//2Pj//8AB///+A////////////KAAAABAAAAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAALVxT7FgOaVYMgAAAAAAAC8UjigRgCgRgC8UjgAAAAAAAAAAAAAAAAAAAAAAAAAAALtw
+        TP+zi6pdOAAAAAAAACwyzi0Tjy0Tjy4TjgAAAAAAAAAAAAAAAAAAAAAAAAAAAMR2Uf+4lK9iPAAAAAAA
+        AD9F0zMgnjMgni4TjgAAAAAAAAAAAAAAAAAAAAAAAAAAAMp9WP++nrZoQwAAAAAAAFJY2DgurTgurS4T
+        jgAAAAAAAAAAAAAAAAAAAAAAAAAAAM+DX/7Gqb5xSwAAAAAAAGds3z49vz49vy4TjgAAAAAAAAAAAAAA
+        AAAAAAAAALhvTdWKZv/NtLd0U7hvTQAAAHuA5ENMzkNMzjMgngAAAAAAAAAAAAAAAAAAALhvTdyTcf3h
+        0v3h0v3Uvq1pSLhvTY6T6UhZ3UhZ3TMgngAAAAAAAAAAAAAAAAAAAOagfv3y6/bVxNGLa/vu5v3Yw7hv
+        TZ6j7sPK+KGt9DMgngAAAAAAAAAAAAAAAAAAAOGff/vu5uGaeAAAANWLZ+XEs793Vi8UjntvZWNTQy8U
+        jgAAAAAAAAAAAAAAAAAAALhvTemhf+effQAAAOCZeL55WLhvTQAAAMG5sVlLPAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAK+jmX1tXwAAALSpoWNTQyojHAAAAG5cSwAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAMnAuLaqmmNTQ7a5spyUiVpVUW5cS6OalAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnAuPTw
+        6XxyaOrs5dHLwq2nonp1cb6soQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANnSzby0rAAAAKegl5CKgm1o
+        Yr6soQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+        AADxhwAA8YcAAPGHAADxhwAA8YcAAOCHAADABwAAwAcAAMQHAADETwAA/kUAAP4BAAD+AQAA/kMAAP//
+        AAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAoYh4eWBNdlxIclhEoYh4AAAAAAAAAAAAAAAAGR+sLyVtKyFqKR5oJhtk
+        HBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIFv7eXi
+        08K4vKSVZEk0AAAAAAAAAAAAAAAAISfKGR+sGB2rFxyqFhuqHBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoYd1AAAA08G5vKSVZ0w4AAAAAAAAAAAAAAAAJyzL
+        TFHWFx3HFBnGGiCtHBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAp418AAAA08G4vKOWalA8AAAAAAAAAAAAAAAALDLNU1fYHiTKGiDIICWwHBBaAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArpSEAAAA08G4vKOVb1RBAAAA
+        AAAAAAAAAAAAMzjPWl7ZJi3LISfKJiu0HBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAtZuMAAAA08K4vKOWdFpGAAAAAAAAAAAAAAAAOkDRYmbcMDbPKjDNLDK4
+        HhNcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKOXAAAA
+        08K4vKOWeGBMAAAAAAAAAAAAAAAAQUfTam/eOkDRNDnPNDm9IhdgAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwqygAAAA08G5u6SWf2VSAAAAAAAAAAAAAAAASE7V
+        dHjhRkvVP0XTOj/BJxxlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAybSpAAAA08G4vKOVg2tZAAAAAAAAAAAAAAAAUFXXfIDjUVfYS1DWQUfFLCNrAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0L20AAAA08G5vKOWinFgAAAA
+        AAAAAAAAAAAAV1zahormXmPbVlzaSU7KMilxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAoYh42Mi/AAAA2srDvKOVkHlnoYh4AAAAAAAAAAAAX2TckJPnaW/fY2jdUFXO
+        ODF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoYh4l39u2Mi/AAAA
+        4NLMxrGml39ufmNRoYh4AAAAAAAAZmzemp3rdnrjb3TgVlvTPzh/AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAoYh4l39uzLet2snDAAAA6+Lf39XQ1srDoIt8Y0gznIJwAAAAb3Th
+        oqbtgYbmeoDkW2HXRkCGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp5WJ
+        yLeu7+nlAAAAAAAAAAAAAAAA7+nl0sa+n4h6jnprAAAAdnvjrK7vjJHphovoYGbaTUiOAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwK6k7eXiAAAA08G4iXNiiXNirZyP/Pz87+nl
+        qZOGaEw4AAAAfYPltLfylpvskJXqZWvcVVGWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAx7OpAAAA3tTPdVtHoYh4AAAAoYh44NfTAAAAtaCUblRAAAAAhYrnvL/0ubvytLfxZWvc
+        XFqeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLmvAAAA2M3HdVtHAAAA
+        AAAAAAAAzsG4AAAAtaCUd11KAAAAhYrn7Oz74uP62tv4tLfxXFqeAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAxbClAAAAAAAAtaCUdVtHAAAAk3xrAAAAAAAAtaCUo5GDAAAAo6bu
+        jHt3qZ2WjIF7TD83fXy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuqKV
+        y7itAAAAAAAAdVtHAAAAAAAAAAAAxLetqZSGm4JxAAAAubvyh3Rp2NTRloyHTD83ubvyAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoYh4xrKnsZqNpIt7AAAAxrKnsZqNo4p6
+        oYh4AAAAAAAAubvyl4aC3NfVm5GKTEA5ubvyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouA4dvao5iQVEdA
+        AAAAAAAAAAAAAAAAT0I5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAnouAhHFlfWlfnouAAAAAT0I5ppOJz8bDrKCYYVNLT0I5AAAAT0I5T0I5WEk/AAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouA2tHNxr+5o46EkH1xp5iQ
+        sZ+U2M/JvK+pe2phW01EW01EW01EW01EXE9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAnouAAAAA5d7a0MS94dXOx7eu5tzX283G0L61o46EkH1xhHFlv7axZ1xV
+        XVZTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouAAAAA
+        7ejm4tzZ0MS94dXO/fz79fDu3tHKy7etv6ea49vXi3tydWpmbmZiAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouAAAAAAAAArKShwrm03c/H+/n5/f388+/s8ezp
+        6+TgloqDkoR+fnVxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAnouAnouAnouAlI2KlY6K3dTQpZ6apJyYoZiUnpWRloyJiYF9hX15AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlY6L
+        lo+LlY6LlI2KkoqHj4eEi4N/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
+        ////B4H//weB//9Hgf//R4H//0eB//9Hgf//R4H//0eB//9Hgf//R4H//kOB//xBgf/4QIH/+PCB//kA
+        gf/6JIH/+nSB//ssgf/5uIH//CGB////w9//8IEf//AAH//0AB//9AAf//YAP//wAH///4D/////////
+        //8=
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.Designer.cs	(revision 1270)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  partial class EditorForm {
+    /// <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 (Editor != null) {
+        Editor.CaptionChanged -= new System.EventHandler(Editor_CaptionChanged);
+        Editor.FilenameChanged -= new System.EventHandler(Editor_FilenameChanged);
+      }
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditorForm));
+      this.editorPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // editorPanel
+      // 
+      this.editorPanel.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.editorPanel.Location = new System.Drawing.Point(12, 12);
+      this.editorPanel.Name = "editorPanel";
+      this.editorPanel.Size = new System.Drawing.Size(608, 422);
+      this.editorPanel.TabIndex = 0;
+      // 
+      // EditorForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.editorPanel);
+      this.DockAreas = ((WeifenLuo.WinFormsUI.Docking.DockAreas)((WeifenLuo.WinFormsUI.Docking.DockAreas.Float | WeifenLuo.WinFormsUI.Docking.DockAreas.Document)));
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "EditorForm";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.TabText = "Editor";
+      this.Text = "Editor";
+      this.TextChanged += new System.EventHandler(this.EditorForm_TextChanged);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel editorPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.cs	(revision 1270)
@@ -0,0 +1,100 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// Displays the used editor.
+  /// </summary>
+  public partial class EditorForm : DockContent {
+    private IEditor myEditor;
+    /// <summary>
+    /// Gets the editor that is displayed.
+    /// </summary>
+    public IEditor Editor {
+      get { return myEditor; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EditorForm"/>.
+    /// </summary>
+    public EditorForm() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="EditorForm"/> with the given <paramref name="editor"/>
+    /// that should be displayed.
+    /// </summary>
+    /// <param name="editor">The editor that should be displayed.</param>
+    public EditorForm(IEditor editor)
+      : this() {
+      myEditor = editor;
+      if (Editor != null) {
+        Control control = (Control)Editor;
+        control.Dock = DockStyle.Fill;
+        editorPanel.Controls.Add(control);
+        Editor.CaptionChanged += new EventHandler(Editor_CaptionChanged);
+        Editor.FilenameChanged += new EventHandler(Editor_FilenameChanged);
+        UpdateText();
+      } else {
+        Label errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No editor available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        editorPanel.Controls.Add(errorLabel);
+      }
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else {
+        if (Editor.Filename == null)
+          Text = "Untitled - " + Editor.Caption;
+        else
+          Text = Editor.Filename + " - " + Editor.Caption;
+      }
+    }
+
+    private void EditorForm_TextChanged(object sender, EventArgs e) {
+      TabText = Text;
+    }
+
+    #region Editor Events
+    private void Editor_FilenameChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    private void Editor_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/EditorForm.resx	(revision 1270)
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLab.AdvancedOptimizationFrontend.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLab.AdvancedOptimizationFrontend.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLab.AdvancedOptimizationFrontend.csproj	(revision 1270)
@@ -0,0 +1,169 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{74752FCD-9E10-48DB-9AF2-AF5518B62807}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.AdvancedOptimizationFrontend</RootNamespace>
+    <AssemblyName>HeuristicLab.AdvancedOptimizationFrontend-3.2</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.AdvancedOptimizationFrontend-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.AdvancedOptimizationFrontend-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="WeifenLuo.WinFormsUI.Docking, Version=2.2.2864.18696, Culture=neutral, PublicKeyToken=d481317c817cec47, processorArchitecture=MSIL" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AboutDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AboutDialog.Designer.cs">
+      <DependentUpon>AboutDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AvailableOperatorsForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AvailableOperatorsForm.Designer.cs">
+      <DependentUpon>AvailableOperatorsForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EditorForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="EditorForm.Designer.cs">
+      <DependentUpon>EditorForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabAdvancedOptimizationFrontendApplication.cs" />
+    <Compile Include="HeuristicLabAdvancedOptimizationFrontendPlugin.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="ViewForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ViewForm.Designer.cs">
+      <DependentUpon>ViewForm.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Resources\HeuristicLab.ico" />
+    <Content Include="Resources\Logo_gray.gif" />
+    <Content Include="Resources\New.png" />
+    <Content Include="Resources\Open.png" />
+    <Content Include="Resources\Save.png" />
+    <Content Include="Resources\SaveAll.png" />
+    <Content Include="Resources\Tools.ico" />
+    <Content Include="WeifenLuo.WinFormsUI.Docking License.txt" />
+    <Content Include="WeifenLuo.WinFormsUI.Docking.dll" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AboutDialog.resx">
+      <DependentUpon>AboutDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AvailableOperatorsForm.resx">
+      <DependentUpon>AvailableOperatorsForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EditorForm.resx">
+      <DependentUpon>EditorForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ViewForm.resx">
+      <DependentUpon>ViewForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendApplication.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// The HeuristicLab Advanced Optimization Frontend Application.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab 3.2 (dockable)", Description="Next generation heuristic optimization environment.")]
+  class HeuristicLabAdvancedOptimizationFrontendApplication : ApplicationBase {
+    /// <summary>
+    /// Runs the application and displays the main window.
+    /// </summary>
+    public override void Run() {
+      Form mainForm = new MainForm();
+      PluginManager.ControlManager = (IControlManager)mainForm;
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/HeuristicLabAdvancedOptimizationFrontendPlugin.cs	(revision 1270)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// Plugin class for HeuristicLab.AdvancedOptimizationFrontend plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.AdvancedOptimizationFrontend-3.2")]
+  [PluginFile(Filename = "HeuristicLab.AdvancedOptimizationFrontend-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [PluginFile(Filename = "WeifenLuo.WinFormsUI.Docking.dll", Filetype = PluginFileType.Assembly)]
+  [PluginFile(Filename = "WeifenLuo.WinFormsUI.Docking License.txt", Filetype = PluginFileType.License)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabAdvancedOptimizationFrontendPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.Designer.cs	(revision 1270)
@@ -0,0 +1,364 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  partial class MainForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+      this.menuStrip = new System.Windows.Forms.MenuStrip();
+      this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.saveAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+      this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.availableOperatorsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.collectGarbageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.statusStrip = new System.Windows.Forms.StatusStrip();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.toolStrip = new System.Windows.Forms.ToolStrip();
+      this.newToolStripDropDownButton = new System.Windows.Forms.ToolStripDropDownButton();
+      this.openToolStripButton = new System.Windows.Forms.ToolStripButton();
+      this.saveToolStripButton = new System.Windows.Forms.ToolStripButton();
+      this.saveAllToolStripButton = new System.Windows.Forms.ToolStripButton();
+      this.dockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel();
+      this.menuStrip.SuspendLayout();
+      this.toolStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // menuStrip
+      // 
+      this.menuStrip.AllowMerge = false;
+      this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.fileToolStripMenuItem,
+            this.viewToolStripMenuItem,
+            this.toolsToolStripMenuItem,
+            this.helpToolStripMenuItem});
+      this.menuStrip.Location = new System.Drawing.Point(0, 0);
+      this.menuStrip.Name = "menuStrip";
+      this.menuStrip.ShowItemToolTips = true;
+      this.menuStrip.Size = new System.Drawing.Size(1016, 24);
+      this.menuStrip.TabIndex = 0;
+      // 
+      // fileToolStripMenuItem
+      // 
+      this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.newToolStripMenuItem,
+            this.openToolStripMenuItem,
+            this.saveToolStripMenuItem,
+            this.saveAsToolStripMenuItem,
+            this.saveAllToolStripMenuItem,
+            this.closeToolStripMenuItem,
+            this.closeAllToolStripMenuItem,
+            this.toolStripMenuItem1,
+            this.exitToolStripMenuItem});
+      this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+      this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
+      this.fileToolStripMenuItem.Text = "&File";
+      // 
+      // newToolStripMenuItem
+      // 
+      this.newToolStripMenuItem.Name = "newToolStripMenuItem";
+      this.newToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.newToolStripMenuItem.Text = "&New";
+      // 
+      // openToolStripMenuItem
+      // 
+      this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+      this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
+      this.openToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.openToolStripMenuItem.Text = "&Open...";
+      this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
+      // 
+      // saveToolStripMenuItem
+      // 
+      this.saveToolStripMenuItem.Enabled = false;
+      this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
+      this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
+      this.saveToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.saveToolStripMenuItem.Text = "&Save";
+      this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
+      // 
+      // saveAsToolStripMenuItem
+      // 
+      this.saveAsToolStripMenuItem.Enabled = false;
+      this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
+      this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.saveAsToolStripMenuItem.Text = "Save &As...";
+      this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
+      // 
+      // saveAllToolStripMenuItem
+      // 
+      this.saveAllToolStripMenuItem.Enabled = false;
+      this.saveAllToolStripMenuItem.Name = "saveAllToolStripMenuItem";
+      this.saveAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
+                  | System.Windows.Forms.Keys.S)));
+      this.saveAllToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.saveAllToolStripMenuItem.Text = "Save Al&l";
+      this.saveAllToolStripMenuItem.Click += new System.EventHandler(this.saveAllToolStripMenuItem_Click);
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Enabled = false;
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.closeToolStripMenuItem.Text = "&Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+      // 
+      // closeAllToolStripMenuItem
+      // 
+      this.closeAllToolStripMenuItem.Enabled = false;
+      this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem";
+      this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.closeAllToolStripMenuItem.Text = "Clos&e All";
+      this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.closeAllToolStripMenuItem_Click);
+      // 
+      // toolStripMenuItem1
+      // 
+      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+      this.toolStripMenuItem1.Size = new System.Drawing.Size(188, 6);
+      // 
+      // exitToolStripMenuItem
+      // 
+      this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+      this.exitToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.exitToolStripMenuItem.Text = "E&xit";
+      this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.availableOperatorsToolStripMenuItem});
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(41, 20);
+      this.viewToolStripMenuItem.Text = "&View";
+      // 
+      // availableOperatorsToolStripMenuItem
+      // 
+      this.availableOperatorsToolStripMenuItem.Name = "availableOperatorsToolStripMenuItem";
+      this.availableOperatorsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+      this.availableOperatorsToolStripMenuItem.Text = "Available &Operators...";
+      this.availableOperatorsToolStripMenuItem.Click += new System.EventHandler(this.availableOperatorsToolStripMenuItem_Click);
+      // 
+      // toolsToolStripMenuItem
+      // 
+      this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.collectGarbageToolStripMenuItem});
+      this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
+      this.toolsToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+      this.toolsToolStripMenuItem.Text = "&Tools";
+      // 
+      // collectGarbageToolStripMenuItem
+      // 
+      this.collectGarbageToolStripMenuItem.Name = "collectGarbageToolStripMenuItem";
+      this.collectGarbageToolStripMenuItem.Size = new System.Drawing.Size(161, 22);
+      this.collectGarbageToolStripMenuItem.Text = "Collect &Garbage";
+      this.collectGarbageToolStripMenuItem.Click += new System.EventHandler(this.collectGarbageToolStripMenuItem_Click);
+      // 
+      // helpToolStripMenuItem
+      // 
+      this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.aboutToolStripMenuItem});
+      this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
+      this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
+      this.helpToolStripMenuItem.Text = "&Help";
+      // 
+      // aboutToolStripMenuItem
+      // 
+      this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
+      this.aboutToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+      this.aboutToolStripMenuItem.Text = "&About";
+      this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
+      // 
+      // statusStrip
+      // 
+      this.statusStrip.Location = new System.Drawing.Point(0, 712);
+      this.statusStrip.Name = "statusStrip";
+      this.statusStrip.Size = new System.Drawing.Size(1016, 22);
+      this.statusStrip.TabIndex = 3;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "item";
+      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.openFileDialog.Title = "Open file ...";
+      // 
+      // saveFileDialog
+      // 
+      this.saveFileDialog.DefaultExt = "hl";
+      this.saveFileDialog.FileName = "item";
+      this.saveFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.saveFileDialog.Title = "Save file as ...";
+      // 
+      // toolStrip
+      // 
+      this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.newToolStripDropDownButton,
+            this.openToolStripButton,
+            this.saveToolStripButton,
+            this.saveAllToolStripButton});
+      this.toolStrip.Location = new System.Drawing.Point(0, 24);
+      this.toolStrip.Name = "toolStrip";
+      this.toolStrip.Size = new System.Drawing.Size(1016, 25);
+      this.toolStrip.TabIndex = 1;
+      this.toolStrip.Text = "toolStrip";
+      // 
+      // newToolStripDropDownButton
+      // 
+      this.newToolStripDropDownButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.newToolStripDropDownButton.Image = global::HeuristicLab.AdvancedOptimizationFrontend.Properties.Resources.New;
+      this.newToolStripDropDownButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.newToolStripDropDownButton.Name = "newToolStripDropDownButton";
+      this.newToolStripDropDownButton.Size = new System.Drawing.Size(29, 22);
+      this.newToolStripDropDownButton.Text = "New...";
+      // 
+      // openToolStripButton
+      // 
+      this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.openToolStripButton.Image = global::HeuristicLab.AdvancedOptimizationFrontend.Properties.Resources.Open;
+      this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.openToolStripButton.Name = "openToolStripButton";
+      this.openToolStripButton.Size = new System.Drawing.Size(23, 22);
+      this.openToolStripButton.Text = "Open...";
+      this.openToolStripButton.Click += new System.EventHandler(this.openToolStripButton_Click);
+      // 
+      // saveToolStripButton
+      // 
+      this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.saveToolStripButton.Enabled = false;
+      this.saveToolStripButton.Image = global::HeuristicLab.AdvancedOptimizationFrontend.Properties.Resources.Save;
+      this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.saveToolStripButton.Name = "saveToolStripButton";
+      this.saveToolStripButton.Size = new System.Drawing.Size(23, 22);
+      this.saveToolStripButton.Text = "Save";
+      this.saveToolStripButton.Click += new System.EventHandler(this.saveToolStripButton_Click);
+      // 
+      // saveAllToolStripButton
+      // 
+      this.saveAllToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.saveAllToolStripButton.Enabled = false;
+      this.saveAllToolStripButton.Image = global::HeuristicLab.AdvancedOptimizationFrontend.Properties.Resources.SaveAll;
+      this.saveAllToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.saveAllToolStripButton.Name = "saveAllToolStripButton";
+      this.saveAllToolStripButton.Size = new System.Drawing.Size(23, 22);
+      this.saveAllToolStripButton.Text = "Save all";
+      this.saveAllToolStripButton.Click += new System.EventHandler(this.saveAllToolStripButton_Click);
+      // 
+      // dockPanel
+      // 
+      this.dockPanel.ActiveAutoHideContent = null;
+      this.dockPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dockPanel.DockBottomPortion = 0.33;
+      this.dockPanel.DockLeftPortion = 0.33;
+      this.dockPanel.DockRightPortion = 0.33;
+      this.dockPanel.DockTopPortion = 0.33;
+      this.dockPanel.Location = new System.Drawing.Point(0, 49);
+      this.dockPanel.Name = "dockPanel";
+      this.dockPanel.RightToLeftLayout = true;
+      this.dockPanel.Size = new System.Drawing.Size(1016, 663);
+      this.dockPanel.TabIndex = 2;
+      // 
+      // MainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(1016, 734);
+      this.Controls.Add(this.dockPanel);
+      this.Controls.Add(this.toolStrip);
+      this.Controls.Add(this.statusStrip);
+      this.Controls.Add(this.menuStrip);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.IsMdiContainer = true;
+      this.MainMenuStrip = this.menuStrip;
+      this.Name = "MainForm";
+      this.Text = "HeuristicLab";
+      this.MdiChildActivate += new System.EventHandler(this.MainForm_MdiChildActivate);
+      this.menuStrip.ResumeLayout(false);
+      this.menuStrip.PerformLayout();
+      this.toolStrip.ResumeLayout(false);
+      this.toolStrip.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.MenuStrip menuStrip;
+    private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+    private System.Windows.Forms.StatusStrip statusStrip;
+    private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+    private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem saveAllToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem collectGarbageToolStripMenuItem;
+    private System.Windows.Forms.ToolStrip toolStrip;
+    private System.Windows.Forms.ToolStripDropDownButton newToolStripDropDownButton;
+    private System.Windows.Forms.ToolStripButton openToolStripButton;
+    private System.Windows.Forms.ToolStripButton saveToolStripButton;
+    private System.Windows.Forms.ToolStripButton saveAllToolStripButton;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem availableOperatorsToolStripMenuItem;
+    private WeifenLuo.WinFormsUI.Docking.DockPanel dockPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.cs	(revision 1270)
@@ -0,0 +1,308 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+using System.IO;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// The main form of the application.
+  /// </summary>
+  public partial class MainForm : Form, IControlManager {
+    #region Inner Types
+    private class Task {
+      public string filename;
+      public IStorable storable;
+      public IEditor editor;
+
+      private Task() { }
+      public Task(string filename, IStorable storable, IEditor editor) {
+        this.filename = filename;
+        this.storable = storable;
+        this.editor = editor;
+      }
+    }
+    #endregion
+
+    private object locker;
+    private int runningTasks;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="MainForm"/>.
+    /// </summary>
+    public MainForm() {
+      InitializeComponent();
+
+      locker = new object();
+      runningTasks = 0;
+
+      AvailableOperatorsForm form = new AvailableOperatorsForm();
+      form.Show(dockPanel);
+
+      DiscoveryService discoveryService = new DiscoveryService();
+
+      // discover creatable items
+      Type[] creatables = discoveryService.GetTypes(typeof(IEditable));
+      string[] names = new string[creatables.Length];
+      for (int i = 0; i < creatables.Length; i++)
+        names[i] = creatables[i].Name;
+      Array.Sort(names, creatables);
+      foreach (Type type in creatables) {
+        if (!type.IsAbstract) {
+          ToolStripMenuItem item = new ToolStripMenuItem();
+          item.Tag = type;
+          item.Text = "&" + type.Name + "...";
+          item.Click += new EventHandler(newToolStripMenuItem_Click);
+          newToolStripMenuItem.DropDownItems.Add(item);
+
+          item = new ToolStripMenuItem();
+          item.Tag = type;
+          item.Text = "&" + type.Name + "...";
+          item.Click += new EventHandler(newToolStripMenuItem_Click);
+          newToolStripDropDownButton.DropDownItems.Add(item);
+        }
+      }
+    }
+
+    #region IControlManager Members
+    /// <summary>
+    /// Displays the given <paramref name="control"/>. 
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the given <paramref name="control"/>
+    /// is neither a view nor an editor.</exception>
+    /// <param name="control">The control to display.</param>
+    public void ShowControl(IControl control) {
+      DockContent content;
+      if (control is IEditor)
+        content = new EditorForm((IEditor)control);
+      else if (control is IView)
+        content = new ViewForm((IView)control);
+      else
+        throw new InvalidOperationException("Control is neither a view nor an editor.");
+
+      content.TabText = content.Text;
+      content.Show(dockPanel);
+    }
+    #endregion
+
+    private void EnableDisableItems() {
+      closeToolStripMenuItem.Enabled = false;
+      closeAllToolStripMenuItem.Enabled = false;
+      saveToolStripMenuItem.Enabled = false;
+      saveToolStripButton.Enabled = false;
+      saveAsToolStripMenuItem.Enabled = false;
+      saveAllToolStripMenuItem.Enabled = false;
+      saveAllToolStripButton.Enabled = false;
+
+      if (ActiveMdiChild != null) {
+        closeToolStripMenuItem.Enabled = true;
+        closeAllToolStripMenuItem.Enabled = true;
+        saveAllToolStripMenuItem.Enabled = true;
+        saveAllToolStripButton.Enabled = true;
+        EditorForm form = ActiveMdiChild as EditorForm;
+        if (form != null){
+          if (((Control)form.Editor).Enabled) {
+            saveToolStripMenuItem.Enabled = true;
+            saveToolStripButton.Enabled = true;
+            saveAsToolStripMenuItem.Enabled = true;
+          } else {
+            closeToolStripMenuItem.Enabled = false;
+            closeAllToolStripMenuItem.Enabled = false;
+          }
+        }
+      }
+    }
+
+    #region Open and Save Methods
+    private void Open() {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        lock (locker) runningTasks++;
+        Cursor = Cursors.AppStarting;
+        Task task = new Task(openFileDialog.FileName, null, null);
+        ThreadPool.QueueUserWorkItem(new WaitCallback(AsynchronousLoad), task);
+      }
+    }
+    private void AsynchronousLoad(object state) {
+      Task task = (Task)state;
+      try {
+        task.storable = PersistenceManager.Load(task.filename);
+      } catch(FileNotFoundException fileNotFoundEx) {
+        MessageBox.Show("Sorry couldn't open file \"" + task.filename + "\".\nThe file or plugin \"" + fileNotFoundEx.FileName + "\" is not available.\nPlease make sure you have all necessary plugins installed.",
+          "Reader Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } catch(TypeLoadException typeLoadEx) {
+        MessageBox.Show("Sorry couldn't open file \"" + task.filename + "\".\nThe type \"" + typeLoadEx.TypeName+ "\" is not available.\nPlease make sure that you have the correct version the plugin installed.",
+          "Reader Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+      LoadFinished(task);
+    }
+    private delegate void TaskFinishedDelegate(Task task);
+    private void LoadFinished(Task task) {
+      if (InvokeRequired)
+        Invoke(new TaskFinishedDelegate(LoadFinished), task);
+      else {
+        IEditor editor = null;
+        if (task.storable != null) {
+          IEditable editable = task.storable as IEditable;
+          if (editable != null)
+            editor = editable.CreateEditor();
+        }
+        if (editor == null)
+          MessageBox.Show("Could not open item. The selected item doesn't provide an editor.", "Editor Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        else {
+          editor.Filename = task.filename;
+          PluginManager.ControlManager.ShowControl(editor);
+        }
+        lock (locker) {
+          runningTasks--;
+          if (runningTasks == 0)
+            Cursor = Cursors.Default;
+        }
+      }
+    }
+    private void Save(EditorForm form) {
+      if (form.Editor.Filename == null)
+        SaveAs(form);
+      else {
+        lock (locker) runningTasks++;
+        Cursor = Cursors.AppStarting;
+        ((Control)form.Editor).Enabled = false;
+        EnableDisableItems();
+        Task task = new Task(form.Editor.Filename, form.Editor.Item, form.Editor);
+        ThreadPool.QueueUserWorkItem(new WaitCallback(AsynchronousSave), task);
+      }
+    }
+    private void SaveAs(EditorForm form) {
+      if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {
+        form.Editor.Filename = saveFileDialog.FileName;
+        Save(form);
+      }
+    }
+    private void AsynchronousSave(object state) {
+      Task task = (Task)state;
+      PersistenceManager.Save(task.storable, task.filename);
+      SaveFinished(task);
+    }
+    private void SaveFinished(Task task) {
+      if (InvokeRequired)
+        Invoke(new TaskFinishedDelegate(SaveFinished), task);
+      else {
+        ((Control)task.editor).Enabled = true;
+        EnableDisableItems();
+        lock (locker) {
+          runningTasks--;
+          if (runningTasks == 0)
+            Cursor = Cursors.Default;
+        }
+      }
+    }
+    #endregion
+
+    private void MainForm_MdiChildActivate(object sender, EventArgs e) {
+      EnableDisableItems();
+    }
+
+    #region Menu Events
+    private void newToolStripMenuItem_Click(object sender, EventArgs e) {
+      ToolStripItem item = (ToolStripItem)sender;
+      Type type = (Type)item.Tag;
+      IEditable editable = (IEditable)Activator.CreateInstance(type);
+      if (editable == null) {
+        MessageBox.Show("The selected item is not editable.", "Editable Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } else {
+        IEditor editor = editable.CreateEditor();
+        if (editor == null) {
+          MessageBox.Show("The selected item doesn't provide an editor.", "Editor Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        } else {
+          PluginManager.ControlManager.ShowControl(editor);
+          EnableDisableItems();
+        }
+      }
+    }
+    private void openToolStripMenuItem_Click(object sender, EventArgs e) {
+      Open();
+    }
+    private void saveToolStripMenuItem_Click(object sender, EventArgs e) {
+      EditorForm form = ActiveMdiChild as EditorForm;
+      Save(form);
+    }
+    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) {
+      EditorForm form = ActiveMdiChild as EditorForm;
+      SaveAs(form);
+    }
+    private void saveAllToolStripMenuItem_Click(object sender, EventArgs e) {
+      for (int i = 0; i < MdiChildren.Length; i++) {
+        EditorForm form = MdiChildren[i] as EditorForm;
+        if (((Control)form.Editor).Enabled) Save(form);
+      }
+    }
+    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
+      ActiveMdiChild.Close();
+      EnableDisableItems();
+    }
+    private void closeAllToolStripMenuItem_Click(object sender, EventArgs e) {
+      while (MdiChildren.Length > 0)
+        MdiChildren[0].Close();
+      EnableDisableItems();
+    }
+    private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
+      Application.Exit();
+    }
+    private void availableOperatorsToolStripMenuItem_Click(object sender, EventArgs e) {
+      AvailableOperatorsForm form = new AvailableOperatorsForm();
+      form.Show(dockPanel);
+    }
+    private void collectGarbageToolStripMenuItem_Click(object sender, EventArgs e) {
+      GC.Collect();
+    }
+    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
+      AboutDialog dialog = new AboutDialog();
+      dialog.ShowDialog(this);
+      dialog.Dispose();
+    }
+    #endregion
+
+    #region ToolStrip Events
+    private void openToolStripButton_Click(object sender, EventArgs e) {
+      Open();
+    }
+    private void saveToolStripButton_Click(object sender, EventArgs e) {
+      EditorForm form = ActiveMdiChild as EditorForm;
+      Save(form);
+    }
+    private void saveAllToolStripButton_Click(object sender, EventArgs e) {
+      for (int i = 0; i < MdiChildren.Length; i++) {
+        EditorForm form = MdiChildren[i] as EditorForm;
+        if (form!=null && ((Control)form.Editor).Enabled) Save(form);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/MainForm.resx	(revision 1270)
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>212, 17</value>
+  </metadata>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>316, 17</value>
+  </metadata>
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>440, 17</value>
+  </metadata>
+  <metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>119, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.AdvancedOptimizationFrontend")]
+[assembly: AssemblyDescription("HeuristicLab advanced user interface for heuristic optimization")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("9e8c630f-f39d-42ae-97fd-2184b680db31")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.1433
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.AdvancedOptimizationFrontend.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.AdvancedOptimizationFrontend.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Logo_gray {
+            get {
+                object obj = ResourceManager.GetObject("Logo_gray", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap New {
+            get {
+                object obj = ResourceManager.GetObject("New", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Open {
+            get {
+                object obj = ResourceManager.GetObject("Open", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Save {
+            get {
+                object obj = ResourceManager.GetObject("Save", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap SaveAll {
+            get {
+                object obj = ResourceManager.GetObject("SaveAll", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,136 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Logo_gray" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Logo_gray.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="New" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Open" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Save" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="SaveAll" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\SaveAll.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.Designer.cs	(revision 1270)
@@ -0,0 +1,86 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  partial class ViewForm {
+    /// <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 (View != null)
+        View.CaptionChanged -= new System.EventHandler(View_CaptionChanged);
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ViewForm));
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.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.viewPanel.Location = new System.Drawing.Point(12, 12);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(608, 422);
+      this.viewPanel.TabIndex = 0;
+      // 
+      // ViewForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.viewPanel);
+      this.DockAreas = ((WeifenLuo.WinFormsUI.Docking.DockAreas)((WeifenLuo.WinFormsUI.Docking.DockAreas.Float | WeifenLuo.WinFormsUI.Docking.DockAreas.Document)));
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "ViewForm";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.TabText = "View";
+      this.Text = "View";
+      this.TextChanged += new System.EventHandler(this.ViewForm_TextChanged);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.cs	(revision 1270)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using WeifenLuo.WinFormsUI.Docking;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.AdvancedOptimizationFrontend {
+  /// <summary>
+  /// Displays the used view.
+  /// </summary>
+  public partial class ViewForm : DockContent {
+    private IView myView;
+    /// <summary>
+    /// Gets the view that is displayed.
+    /// </summary>
+    public IView View {
+      get { return myView; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ViewForm"/>.
+    /// </summary>
+    public ViewForm() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ViewForm"/> with the given <paramref name="view"/>
+    /// to display.
+    /// </summary>
+    /// <param name="view">The view that should be displayed.</param>
+    public ViewForm(IView view)
+      : this() {
+      myView = view;
+      if (View != null) {
+        Control control = (Control)View;
+        control.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(control);
+        View.CaptionChanged += new EventHandler(View_CaptionChanged);
+        UpdateText();
+      } else {
+        Label errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No view available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(errorLabel);
+      }
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else
+        Text = View.Caption;
+    }
+
+    private void ViewForm_TextChanged(object sender, EventArgs e) {
+      TabText = Text;
+    }
+
+    #region View Events
+    private void View_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/ViewForm.resx	(revision 1270)
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/WeifenLuo.WinFormsUI.Docking License.txt
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/WeifenLuo.WinFormsUI.Docking License.txt	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.AdvancedOptimizationFrontend/WeifenLuo.WinFormsUI.Docking License.txt	(revision 1270)
@@ -0,0 +1,9 @@
+The MIT License
+
+Copyright (c) 2007 Weifen Luo (email: weifenluo@yahoo.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/HeuristicLab.Assignment.QAP.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/HeuristicLab.Assignment.QAP.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/HeuristicLab.Assignment.QAP.csproj	(revision 1270)
@@ -0,0 +1,110 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Assignment.QAP</RootNamespace>
+    <AssemblyName>HeuristicLab.Assignment.QAP-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="QAPEvaluator.cs" />
+    <Compile Include="QAPInjector.cs" />
+    <Compile Include="QAPInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="QAPInjectorView.Designer.cs">
+      <DependentUpon>QAPInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="QAPParser.cs" />
+    <Compile Include="QAPPlugin.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Charting\HeuristicLab.Charting.csproj">
+      <Project>{B462D3CC-8866-42F0-9832-AD0967613B72}</Project>
+      <Name>HeuristicLab.Charting</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Permutation\HeuristicLab.Permutation.csproj">
+      <Project>{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}</Project>
+      <Name>HeuristicLab.Permutation</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="QAPInjectorView.resx">
+      <DependentUpon>QAPInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Assignment.QAP-3.2")]
+[assembly: AssemblyDescription("HeuristicLab")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("d902f071-7910-459f-8d25-bbf43fc3c5a3")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPEvaluator.cs	(revision 1270)
@@ -0,0 +1,52 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Assignment.QAP {
+  public class QAPEvaluator : SingleObjectiveEvaluatorBase {
+    public QAPEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Distances", "Distance matrix for given locations", typeof(DoubleMatrixData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Weights", "Weight matrix denoting the flow strength between different facilities", typeof(DoubleMatrixData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Permutation", "Permutation representing a QAP assignment of facilities to locations", typeof(Permutation.Permutation), VariableKind.In));
+    }
+
+    protected override double Evaluate(IScope scope) {
+      double[,] distances = GetVariableValue<DoubleMatrixData>("Distances", scope, true).Data;
+      double[,] weights = GetVariableValue<DoubleMatrixData>("Weights", scope, true).Data;
+      int[] perm = GetVariableValue<Permutation.Permutation>("Permutation", scope, false).Data;
+      double costs = 0;
+
+      for (int i = 0; i < perm.Length; i++) {
+        for (int j = 0; j < perm.Length; j++) {
+          costs += distances[i, j] * weights[perm[i], perm[j]];
+        }
+      }
+      return costs;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjector.cs	(revision 1270)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Assignment.QAP {
+  public class QAPInjector : OperatorBase {
+    public override string Description {
+      get { return @"Injector for quadratic assignment problem (QAP) files..."; }
+    }
+
+    public QAPInjector() : base() {
+      AddVariableInfo(new VariableInfo("Maximization", "Set to false as QAP is a minimization problem", typeof(BoolData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("Facilities", "Number of facilities", typeof(IntData), VariableKind.New));
+      AddVariable(new Variable("Facilities", new IntData(0)));
+      AddVariableInfo(new VariableInfo("Distances", "Facility distances", typeof(DoubleMatrixData), VariableKind.New));
+      AddVariable(new Variable("Distances", new DoubleMatrixData(new double[0,0])));
+      AddVariableInfo(new VariableInfo("Weights", "Facility flow values", typeof(DoubleMatrixData), VariableKind.New));
+      AddVariable(new Variable("Weights", new DoubleMatrixData(new double[0, 0])));
+      AddVariableInfo(new VariableInfo("BestKnownQuality", "Quality of best known solution", typeof(DoubleData), VariableKind.New));
+      AddVariable(new Variable("InjectBestKnownQuality", new BoolData(false)));
+      AddVariable(new Variable("BestKnownQuality", new DoubleData(0)));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      scope.AddVariable(new Variable(scope.TranslateName("Maximization"), new BoolData(false)));
+      scope.AddVariable(new Variable(scope.TranslateName("Facilities"), (IItem)GetVariable("Facilities").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Distances"), (IItem)GetVariable("Distances").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Weights"), (IItem)GetVariable("Weights").Value.Clone()));
+      if (GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data)
+        scope.AddVariable(new Variable(scope.TranslateName("BestKnownQuality"), (IItem)GetVariable("BestKnownQuality").Value.Clone()));
+      return null;
+    }
+
+    public override IView CreateView() {
+      return new QAPInjectorView(this);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,204 @@
+﻿namespace HeuristicLab.Assignment.QAP {
+  partial class QAPInjectorView {
+    /// <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.loadButton = new System.Windows.Forms.Button();
+      this.facilitiesTextBox = new System.Windows.Forms.TextBox();
+      this.qualTextBox = new System.Windows.Forms.TextBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.knownQualCheckBox = new System.Windows.Forms.CheckBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.varInfoTabPage = new System.Windows.Forms.TabPage();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
+      this.tabControl.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // loadButton
+      // 
+      this.loadButton.Location = new System.Drawing.Point(11, 96);
+      this.loadButton.Name = "loadButton";
+      this.loadButton.Size = new System.Drawing.Size(231, 24);
+      this.loadButton.TabIndex = 0;
+      this.loadButton.Text = "Load QAP file";
+      this.loadButton.UseVisualStyleBackColor = true;
+      this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
+      // 
+      // facilitiesTextBox
+      // 
+      this.facilitiesTextBox.Location = new System.Drawing.Point(167, 11);
+      this.facilitiesTextBox.Name = "facilitiesTextBox";
+      this.facilitiesTextBox.Size = new System.Drawing.Size(78, 20);
+      this.facilitiesTextBox.TabIndex = 2;
+      this.facilitiesTextBox.TextChanged += new System.EventHandler(this.facilitiesTextBox_TextChanged);
+      // 
+      // qualTextBox
+      // 
+      this.qualTextBox.Location = new System.Drawing.Point(167, 64);
+      this.qualTextBox.Name = "qualTextBox";
+      this.qualTextBox.Size = new System.Drawing.Size(78, 20);
+      this.qualTextBox.TabIndex = 3;
+      this.qualTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.qualTextBox_Validating);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(15, 14);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(50, 13);
+      this.label1.TabIndex = 4;
+      this.label1.Text = "Facilities:";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(15, 66);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(96, 13);
+      this.label2.TabIndex = 5;
+      this.label2.Text = "Best Know Quality:";
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.FileName = "openFileDialog1";
+      // 
+      // knownQualCheckBox
+      // 
+      this.knownQualCheckBox.AutoSize = true;
+      this.knownQualCheckBox.Location = new System.Drawing.Point(14, 39);
+      this.knownQualCheckBox.Name = "knownQualCheckBox";
+      this.knownQualCheckBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
+      this.knownQualCheckBox.Size = new System.Drawing.Size(167, 17);
+      this.knownQualCheckBox.TabIndex = 6;
+      this.knownQualCheckBox.Text = "Best Known Quality Available:";
+      this.knownQualCheckBox.UseVisualStyleBackColor = true;
+      this.knownQualCheckBox.CheckedChanged += new System.EventHandler(this.knownQualCheckBox_CheckedChanged);
+      // 
+      // 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.dataTabPage);
+      this.tabControl.Controls.Add(this.varInfoTabPage);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Location = new System.Drawing.Point(3, 3);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(256, 152);
+      this.tabControl.TabIndex = 7;
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.loadButton);
+      this.dataTabPage.Controls.Add(this.knownQualCheckBox);
+      this.dataTabPage.Controls.Add(this.label1);
+      this.dataTabPage.Controls.Add(this.label2);
+      this.dataTabPage.Controls.Add(this.facilitiesTextBox);
+      this.dataTabPage.Controls.Add(this.qualTextBox);
+      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(248, 126);
+      this.dataTabPage.TabIndex = 0;
+      this.dataTabPage.Text = "QAP Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(262, 152);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      // 
+      // varInfoTabPage
+      // 
+      this.varInfoTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.varInfoTabPage.Location = new System.Drawing.Point(4, 22);
+      this.varInfoTabPage.Name = "varInfoTabPage";
+      this.varInfoTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.varInfoTabPage.Size = new System.Drawing.Size(453, 166);
+      this.varInfoTabPage.TabIndex = 1;
+      this.varInfoTabPage.Text = "Variable Infos";
+      this.varInfoTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseDescriptionView
+      // 
+      this.operatorBaseDescriptionView.Caption = "Operator";
+      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
+      this.operatorBaseDescriptionView.Operator = null;
+      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(262, 152);
+      this.operatorBaseDescriptionView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Size = new System.Drawing.Size(453, 166);
+      this.descriptionTabPage.TabIndex = 2;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // QAPInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "QAPInjectorView";
+      this.Size = new System.Drawing.Size(262, 156);
+      this.tabControl.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.dataTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button loadButton;
+    private System.Windows.Forms.TextBox facilitiesTextBox;
+    private System.Windows.Forms.TextBox qualTextBox;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.CheckBox knownQualCheckBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.TabPage varInfoTabPage;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private HeuristicLab.Core.OperatorBaseDescriptionView operatorBaseDescriptionView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.cs	(revision 1270)
@@ -0,0 +1,107 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Assignment.QAP {
+  public partial class QAPInjectorView : ViewBase {
+
+    public QAPInjectorView() {
+      InitializeComponent();
+    }
+
+    public QAPInjector injector {
+      get { return (QAPInjector)Item; }
+      set { base.Item = value; }
+    }
+
+    public QAPInjectorView(QAPInjector injector) : this() {
+      this.injector = injector; 
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (injector == null) {
+        facilitiesTextBox.Text = "-";
+        facilitiesTextBox.Enabled = false;
+        knownQualCheckBox.Checked = false;
+        knownQualCheckBox.Enabled = false; 
+        qualTextBox.Visible = false; 
+        qualTextBox.Enabled = false;
+      } else {
+        facilitiesTextBox.Text = injector.GetVariable("Facilities").Value.ToString();
+        knownQualCheckBox.Checked = injector.GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data;
+        knownQualCheckBox.Enabled = true;
+        if (knownQualCheckBox.Checked) {
+          qualTextBox.Text = injector.GetVariable("BestKnownQuality").Value.ToString();
+          qualTextBox.Enabled = true;
+        } else {
+          qualTextBox.Text = "-";
+          qualTextBox.Enabled = false;
+        }
+      }
+    }
+
+    private void loadButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        QAPParser parser = null;
+        bool success = false;
+        try {
+          parser = new QAPParser();
+          parser.Parse(openFileDialog.FileName);
+          success = true;
+        } catch (Exception ex) {
+          MessageBox.Show(this, ex.Message, ex.GetType().Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        if (success) {
+          injector.GetVariable("Facilities").Value = new IntData(parser.facilities);
+          injector.GetVariable("Distances").Value = new DoubleMatrixData(parser.distances);
+          injector.GetVariable("Weights").Value = new DoubleMatrixData(parser.weights);
+          Refresh();
+        }
+      }
+    }
+
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = injector;
+      operatorBaseDescriptionView.Operator = injector;
+    }
+
+    private void knownQualCheckBox_CheckedChanged(object sender, EventArgs e) {
+      injector.GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data = knownQualCheckBox.Checked;
+      if (knownQualCheckBox.Checked) {
+        qualTextBox.Text = injector.GetVariable("BestKnownQuality").Value.ToString();
+        qualTextBox.Enabled = true;
+      } else {
+        qualTextBox.Text = "-";
+        qualTextBox.Enabled = false;
+      }
+    }
+
+    private void qualTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        injector.GetVariable("BestKnownQuality").GetValue<DoubleData>().Data = double.Parse(qualTextBox.Text);
+      } catch (Exception) {
+        qualTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void facilitiesTextBox_TextChanged(object sender, EventArgs e) {
+
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPInjectorView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPParser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPParser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPParser.cs	(revision 1270)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+
+namespace HeuristicLab.Assignment.QAP {
+  public class QAPParser {
+    public int facilities;
+    public double[,] distances;
+    public double[,] weights; 
+    
+    public QAPParser() { 
+    }
+
+    public bool Parse(string file) {
+      try {
+        StreamReader reader = new StreamReader(file);
+        facilities = int.Parse(reader.ReadLine());
+        distances = new double[facilities, facilities];
+        weights = new double[facilities, facilities];
+        reader.ReadLine();
+        char[] delim = new char[] {' '};
+        for (int i = 0; i < facilities; i++) {
+          string valLine = reader.ReadLine();
+          string[] vals = new string[facilities]; 
+          string[] partVals =  valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries); 
+          partVals.CopyTo(vals, 0);
+          int index = partVals.Length; 
+          while (index < facilities) {
+            valLine = reader.ReadLine();
+            partVals = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
+            partVals.CopyTo(vals, index);
+            index += partVals.Length; 
+          }
+          for (int j = 0; j < facilities; j++) {
+            distances[i, j] = double.Parse(vals[j]);
+          }
+        }
+        reader.ReadLine();
+        int read = 0;
+        int k = 0;
+        while (!reader.EndOfStream) {
+          string valLine = reader.ReadLine();
+          string[] vals = valLine.Split(delim, StringSplitOptions.RemoveEmptyEntries);
+          for (int j = 0; j < vals.Length; j++) {
+            if (read + j == facilities) {
+              read = 0;
+              k++;
+            }
+            weights[k, read + j] = double.Parse(vals[j]);
+          }
+          read += vals.Length; 
+        }
+        return true; 
+      } catch (Exception) { 
+        // not good
+        return false; 
+      }
+
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Assignment.QAP/QAPPlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Assignment.QAP {
+  [ClassInfo(Name = "HeuristicLab.Assignment.QAP-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Assignment.QAP-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class QAPPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/BitVectorCrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/BitVectorCrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/BitVectorCrossoverBase.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.BitVector {
+  /// <summary>
+  /// Base class for all bit vector crossover operators.
+  /// </summary>
+  public abstract class BitVectorCrossoverBase : CrossoverBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="BitVectorCrossoverBase"/> with one variable info
+    /// (<c>BitVector</c>).
+    /// </summary>
+    public BitVectorCrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("BitVector", "Parent and child bit vector", typeof(BoolArrayData), VariableKind.In | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Performs a crossover by calling <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom, bool[][]"/>
+    /// and adds the created bit vector to the current scope.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if the parents have different lengths.</exception>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <param name="random">A random number generator.</param>
+    protected sealed override void Cross(IScope scope, IRandom random) {
+      bool[][] parents = new bool[scope.SubScopes.Count][];
+      int length = -1;
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        parents[i] = scope.SubScopes[i].GetVariableValue<BoolArrayData>("BitVector", false).Data;
+        if (i == 0) length = parents[i].Length;
+        else if (parents[i].Length != length) throw new InvalidOperationException("ERROR in BitVectorCrossoverBase: Cannot apply crossover to bit vectors of different length");
+      }
+
+      bool[] result = Cross(scope, random, parents);
+      scope.AddVariable(new Variable(scope.TranslateName("BitVector"), new BoolArrayData(result)));
+    }
+
+    /// <summary>
+    /// Performs a crossover of multiple bit vectors.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing all parent bit vectors.</param>
+    /// <returns>The newly created bit vector, resulting from the crossover operation.</returns>
+    protected abstract bool[] Cross(IScope scope, IRandom random, bool[][] parents);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/BitVectorManipulatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/BitVectorManipulatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/BitVectorManipulatorBase.cs	(revision 1270)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.BitVector {
+  /// <summary>
+  /// Base class for all bit vector manipulators.
+  /// </summary>
+  public abstract class BitVectorManipulatorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="BitVectorManipulatorBase"/> with two variable infos
+    /// (<c>Random</c> and <c>BitVector</c>).
+    /// </summary>
+    public BitVectorManipulatorBase() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("BitVector", "Bit vector to manipulate", typeof(BoolArrayData), VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Manipulates the bit vector.
+    /// </summary>
+    /// <param name="scope">The current scope whose bit vector to manipulate.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      BoolArrayData vector = GetVariableValue<BoolArrayData>("BitVector", scope, false);
+      vector.Data = Manipulate(scope, random, vector.Data);
+      return null;
+    }
+
+    /// <summary>
+    /// Manipulates the given bit <paramref name="vector"/> with the given random number generator.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The bit vector to manipulate.</param>
+    /// <returns>The manipulated bit vector.</returns>
+    protected abstract bool[] Manipulate(IScope scope, IRandom random, bool[] vector);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/FlipManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/FlipManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/FlipManipulator.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.BitVector {
+  /// <summary>
+  /// Single bit flip manipulation for bit vectors.
+  /// </summary>
+  public class FlipManipulator : BitVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Single bit flip manipulation for bit vectors."; }
+    }
+
+    /// <summary>
+    /// Changes randomly a single position in the given bit <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The bit vector to manipulate.</param>
+    /// <returns>The new bit vector that has been manipulated.</returns>
+    public static bool[] Apply(IRandom random, bool[] vector) {
+      bool[] result = (bool[])vector.Clone();
+      int index = random.Next(result.Length);
+      result[index] = !result[index];
+      return result;
+    }
+
+    /// <summary>
+    /// Changes randomly a single position in the given bit <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The bit vector to manipulate.</param>
+    /// <returns>The new bit vector that has been manipulated.</returns>
+    protected override bool[] Manipulate(IScope scope, IRandom random, bool[] vector) {
+      return Apply(random, vector);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/HeuristicLab.BitVector.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/HeuristicLab.BitVector.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/HeuristicLab.BitVector.csproj	(revision 1270)
@@ -0,0 +1,105 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6D9564BB-956D-4808-8F92-AA7F776F90A5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.BitVector</RootNamespace>
+    <AssemblyName>HeuristicLab.BitVector-3.2</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.BitVector-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.BitVector-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="RandomBitVectorGenerator.cs" />
+    <Compile Include="HeuristicLabBitVectorPlugin.cs" />
+    <Compile Include="BitVectorCrossoverBase.cs" />
+    <Compile Include="BitVectorManipulatorBase.cs" />
+    <Compile Include="SinglePointCrossover.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="FlipManipulator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/HeuristicLabBitVectorPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/HeuristicLabBitVectorPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/HeuristicLabBitVectorPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.BitVector {
+  /// <summary>
+  /// Plugin class for HeuristicLab.BitVector plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.BitVector-3.2")]
+  [PluginFile(Filename = "HeuristicLab.BitVector-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Evolutionary-3.2")]
+  public class HeuristicLabBitVectorPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.BitVector")]
+[assembly: AssemblyDescription("HeuristicLab bit vector operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("c414ca27-8027-4ed7-a08b-420485c6392d")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/RandomBitVectorGenerator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/RandomBitVectorGenerator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/RandomBitVectorGenerator.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.BitVector {
+  /// <summary>
+  /// Generates a new random bit vector.
+  /// </summary>
+  public class RandomBitVectorGenerator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Operator generating a new random bit vector."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="RandomBitVectorGenerator"/> with three variable infos
+    /// (<c>Random</c>, <c>Length</c> and <c>BitVector</c>).
+    /// </summary>
+    public RandomBitVectorGenerator() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Length", "Vector length", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("BitVector", "Created random bit vector", typeof(BoolArrayData), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Generates a new random bit vector with the given <paramref name="length"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="length">The length of the bit vector.</param>
+    /// <returns>The newly created bit vector.</returns>
+    public static bool[] Apply(IRandom random, int length) {
+      bool[] result = new bool[length];
+      for (int i = 0; i < length; i++)
+        result[i] = random.Next() < 0.5;
+      return result;
+    }
+
+    /// <summary>
+    /// Generates a new random bit vector and injects it in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to get the values from and where to inject the newly 
+    /// created bit vector.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      int length = GetVariableValue<IntData>("Length", scope, true).Data;
+
+      bool[] vector = Apply(random, length);
+      scope.AddVariable(new Variable(scope.TranslateName("BitVector"), new BoolArrayData(vector)));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/SinglePointCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/SinglePointCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.BitVector/SinglePointCrossover.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.BitVector {
+  /// <summary>
+  /// Single point crossover for bit vectors.
+  /// </summary>
+  public class SinglePointCrossover : BitVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Single point crossover for bit vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a single point crossover at a randomly chosen position of the two 
+    /// given parent bit vectors.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parent1">The first parent for crossover.</param>
+    /// <param name="parent2">The second parent for crossover.</param>
+    /// <returns>The newly created bit vector, resulting from the single point crossover.</returns>
+    public static bool[] Apply(IRandom random, bool[] parent1, bool[] parent2) {
+      int length = parent1.Length;
+      bool[] result = new bool[length];
+      int breakPoint = random.Next(1, length);
+
+      for (int i = 0; i < breakPoint; i++)
+        result[i] = parent1[i];
+      for (int i = breakPoint; i < length; i++)
+        result[i] = parent2[i];
+
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a single point crossover at a randomly chosen position of two 
+    /// given parent bit vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two bit vectors that should be crossed.</param>
+    /// <returns>The newly created bit vector, resulting from the single point crossover.</returns>
+    protected override bool[] Cross(IScope scope, IRandom random, bool[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in SinglePointCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChart.cs	(revision 1270)
@@ -0,0 +1,247 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Charting;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public class BubbleChart : Chart {
+    private const double maxXJitterPercent = 0.05;
+    private const double maxYJitterPercent = 0.05;
+    private const int minBubbleSize = 5;
+    private const int maxBubbleSize = 30;
+    private const int maxAlpha = 255;
+    private const int minAlpha = 50;
+    private static readonly Color defaultColor = Color.Blue;
+    private static readonly Color selectionColor = Color.Red;
+
+    private double xJitterFactor = 0.0;
+    private double yJitterFactor = 0.0;
+    private string xDimension;
+    private string yDimension;
+    private string sizeDimension;
+    private bool invertSize;
+    private double minX = double.PositiveInfinity;
+    private double minY = double.PositiveInfinity;
+    private double maxX = double.NegativeInfinity;
+    private double maxY = double.NegativeInfinity;
+    private List<Record> records;
+    private ResultList results;
+    private Dictionary<IPrimitive, Record> primitiveToRecordDictionary;
+    private Dictionary<Record, IPrimitive> recordToPrimitiveDictionary;
+    private Random random = new Random();
+    private Group points;
+
+    public BubbleChart(ResultList results, PointD lowerLeft, PointD upperRight)
+      : base(lowerLeft, upperRight) {
+      records = new List<Record>();
+      primitiveToRecordDictionary = new Dictionary<IPrimitive, Record>();
+      recordToPrimitiveDictionary = new Dictionary<Record, IPrimitive>();
+      this.results = results;
+      foreach(Record r in results.Records) {
+        records.Add(r);
+     }
+      results.OnRecordAdded += new EventHandler<RecordAddedEventArgs>(results_OnRecordAdded);
+      results.Changed += new EventHandler(results_Changed);
+    }
+
+    void results_Changed(object sender, EventArgs e) {
+      Repaint();
+      EnforceUpdate();
+    }
+
+    public BubbleChart(ResultList results, double x1, double y1, double x2, double y2)
+      : this(results, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+
+    void results_OnRecordAdded(object sender, RecordAddedEventArgs e) {
+      lock(records) {
+        records.Add(e.Record);
+      }
+    }
+
+    public void SetBubbleSizeDimension(string dimension, bool inverted) {
+      this.sizeDimension = dimension;
+      this.invertSize = inverted;
+      Repaint();
+      EnforceUpdate();
+    }
+
+    public void ShowXvsY(string xDimension, string yDimension) {
+      if(this.xDimension != xDimension || this.yDimension != yDimension) {
+        this.xDimension = xDimension;
+        this.yDimension = yDimension;
+        ResetViewSize();
+        Repaint();
+        ZoomToViewSize();
+      }
+    }
+
+    internal void SetJitter(double xJitterFactor, double yJitterFactor) {
+      this.xJitterFactor = xJitterFactor * maxXJitterPercent * Size.Width;
+      this.yJitterFactor = yJitterFactor * maxYJitterPercent * Size.Height;
+      Repaint();
+      EnforceUpdate();
+    }
+
+    private void Repaint() {
+      if(xDimension == null || yDimension == null) return;
+      lock(records) {
+        double maxSize = 1;
+        double minSize = 1;
+        if(sizeDimension != null) {
+          var sizes = records.Select(r => r.Get(sizeDimension)).Where(x => !double.IsInfinity(x) && x != double.MaxValue && x != double.MinValue).OrderBy(x=>x);
+          minSize = sizes.ElementAt((int)(sizes.Count() * 0.1));
+          maxSize = sizes.ElementAt((int)(sizes.Count() * 0.9));
+        }
+        UpdateEnabled = false;
+        Group.Clear();
+        primitiveToRecordDictionary.Clear();
+        recordToPrimitiveDictionary.Clear();
+        points = new Group(this);
+        Group.Add(new Axis(this, 0, 0, AxisType.Both));
+        UpdateViewSize(0, 0, 5);
+        foreach(Record r in records) {
+          double x = r.Get(xDimension) + r.Get(Record.X_JITTER) * xJitterFactor;
+          double y = r.Get(yDimension) + r.Get(Record.Y_JITTER) * yJitterFactor;
+          int size = CalculateSize(r.Get(sizeDimension), minSize, maxSize);
+
+          if(double.IsInfinity(x) || x == double.MaxValue || x == double.MinValue) x = double.NaN;
+          if(double.IsInfinity(y) || y == double.MaxValue || y == double.MinValue) y = double.NaN;
+          if(!double.IsNaN(x) && !double.IsNaN(y)) {
+            UpdateViewSize(x, y, size);
+            int alpha = CalculateAlpha(size);
+            Pen pen = new Pen(Color.FromArgb(alpha, r.Selected ? selectionColor : defaultColor));
+            Brush brush = pen.Brush;
+            FixedSizeCircle c = new FixedSizeCircle(this, x, y, size, pen, brush);
+            c.ToolTipText = r.GetToolTipText();
+            points.Add(c);
+            if(!r.Selected) c.IntoBackground();
+            primitiveToRecordDictionary[c] = r;
+            recordToPrimitiveDictionary[r] = c;
+          }
+        }
+        Group.Add(points);
+        UpdateEnabled = true;
+      }
+    }
+
+    private int CalculateSize(double size, double minSize, double maxSize) {
+      if(double.IsNaN(size) || double.IsInfinity(size) || size == double.MaxValue || size == double.MinValue) return minBubbleSize;
+      if(size > maxSize) size = maxSize;
+      if(size < minSize) size = minSize;
+      double sizeDifference = ((size - minSize) / (maxSize - minSize) * (maxBubbleSize - minBubbleSize));
+      if(invertSize) return maxBubbleSize - (int)sizeDifference;
+      else return minBubbleSize + (int)sizeDifference;
+    }
+
+    private int CalculateAlpha(int size) {
+      return maxAlpha - (int)((double)(size - minBubbleSize) / (double)(maxBubbleSize - minBubbleSize) * (double)(maxAlpha - minAlpha));
+    }
+
+    private void ZoomToViewSize() {
+      if(minX < maxX && minY < maxY) {
+        // enlarge view by 5% on each side
+        double width = maxX - minX;
+        double height = maxY - minY;
+        minX = minX - width * 0.05;
+        maxX = maxX + width * 0.05;
+        minY = minY - height * 0.05;
+        maxY = maxY + height * 0.05;
+        ZoomIn(minX, minY, maxX, maxY);
+      }
+    }
+
+    private void UpdateViewSize(double x, double y, double size) {
+      if(x - size < minX) minX = x - size;
+      if(x + size > maxX) maxX = x + size;
+      if(y - size < minY) minY = y + size;
+      if(y + size > maxY) maxY = y + size;
+    }
+
+    private void ResetViewSize() {
+      minX = double.PositiveInfinity;
+      maxX = double.NegativeInfinity;
+      minY = double.PositiveInfinity;
+      maxY = double.NegativeInfinity;
+    }
+
+    internal Record GetRecord(Point point) {
+      Record r = null;
+      IPrimitive p = points.GetPrimitive(TransformPixelToWorld(point));
+      if(p != null) {
+        primitiveToRecordDictionary.TryGetValue(p, out r);
+      }
+      return r;
+    }
+
+
+    public override void MouseDrag(Point start, Point end, MouseButtons button) {
+      if(button == MouseButtons.Left && Mode == ChartMode.Select) {
+        PointD a = TransformPixelToWorld(start);
+        PointD b = TransformPixelToWorld(end);
+        double minX = Math.Min(a.X, b.X);
+        double minY = Math.Min(a.Y, b.Y);
+        double maxX = Math.Max(a.X, b.X);
+        double maxY = Math.Max(a.Y, b.Y);
+        HeuristicLab.Charting.Rectangle rect = new HeuristicLab.Charting.Rectangle(this, minX, minY, maxX, maxY);
+
+        List<IPrimitive> primitives = new List<IPrimitive>();
+        primitives.AddRange(points.Primitives);
+
+        foreach(FixedSizeCircle p in primitives) {
+          if(rect.ContainsPoint(p.Point)) {
+            Record r;
+            primitiveToRecordDictionary.TryGetValue(p, out r);
+            if(r != null) r.ToggleSelected();
+          }
+        }
+        results.FireChanged();
+      } else {
+        base.MouseDrag(start, end, button);
+      }
+    }
+
+    public override void MouseClick(Point point, MouseButtons button) {
+      if(button == MouseButtons.Left) {
+        Record r = GetRecord(point);
+        if(r != null) r.ToggleSelected();
+        results.FireChanged();
+      } else {
+        base.MouseClick(point, button);
+      }
+    }
+
+    public override void MouseDoubleClick(Point point, MouseButtons button) {
+      if(button == MouseButtons.Left) {
+        Record r = GetRecord(point);
+        if(r != null) r.OpenModel();
+      } else {
+        base.MouseDoubleClick(point, button);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.Designer.cs	(revision 1270)
@@ -0,0 +1,133 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.CEDMA.Charting {
+  partial class BubbleChartControl {
+    /// <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.pictureBox = new System.Windows.Forms.PictureBox();
+      this.pictureBoxContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.moveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.zoomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.selectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.pictureBoxContextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.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.pictureBox.BackColor = System.Drawing.Color.White;
+      this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.pictureBox.ContextMenuStrip = this.pictureBoxContextMenuStrip;
+      this.pictureBox.Location = new System.Drawing.Point(0, 0);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(266, 236);
+      this.pictureBox.TabIndex = 0;
+      this.pictureBox.TabStop = false;
+      this.pictureBox.VisibleChanged += new System.EventHandler(this.pictureBox_VisibleChanged);
+      this.pictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
+      this.pictureBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDoubleClick);
+      this.pictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseClick);
+      this.pictureBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDown);
+      this.pictureBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseUp);
+      this.pictureBox.SizeChanged += new System.EventHandler(this.pictureBox_SizeChanged);
+      // 
+      // pictureBoxContextMenuStrip
+      // 
+      this.pictureBoxContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.moveToolStripMenuItem,
+            this.zoomToolStripMenuItem,
+            this.selectToolStripMenuItem});
+      this.pictureBoxContextMenuStrip.Name = "pictureBoxContextMenuStrip";
+      this.pictureBoxContextMenuStrip.Size = new System.Drawing.Size(153, 92);
+      // 
+      // moveToolStripMenuItem
+      // 
+      this.moveToolStripMenuItem.Name = "moveToolStripMenuItem";
+      this.moveToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.moveToolStripMenuItem.Text = "Move";
+      this.moveToolStripMenuItem.Click += new System.EventHandler(this.moveToolStripMenuItem_Click);
+      // 
+      // zoomToolStripMenuItem
+      // 
+      this.zoomToolStripMenuItem.Name = "zoomToolStripMenuItem";
+      this.zoomToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.zoomToolStripMenuItem.Text = "&Zoom";
+      this.zoomToolStripMenuItem.Click += new System.EventHandler(this.zoomToolStripMenuItem_Click);
+      // 
+      // selectToolStripMenuItem
+      // 
+      this.selectToolStripMenuItem.Name = "selectToolStripMenuItem";
+      this.selectToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
+      this.selectToolStripMenuItem.Text = "&Select";
+      this.selectToolStripMenuItem.Click += new System.EventHandler(this.selectToolStripMenuItem_Click);
+      // 
+      // BubbleChartControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.Controls.Add(this.pictureBox);
+      this.Name = "BubbleChartControl";
+      this.Size = new System.Drawing.Size(266, 236);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.pictureBoxContextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.PictureBox pictureBox;
+    protected System.Windows.Forms.ToolTip toolTip;
+    protected System.Windows.Forms.ContextMenuStrip pictureBoxContextMenuStrip;
+    protected System.Windows.Forms.ToolStripMenuItem zoomToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem selectToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem moveToolStripMenuItem;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.cs	(revision 1270)
@@ -0,0 +1,176 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public partial class BubbleChartControl : UserControl {
+    private Bitmap bitmap;
+    private bool renderingRequired;
+    private Point mousePosition;
+    private Point buttonDownPoint;
+
+    private BubbleChart myChart;
+    public BubbleChart Chart {
+      get { return myChart; }
+      set {
+        if(myChart != null) myChart.Update -= new EventHandler(myChart_Update);
+        myChart = value;
+        if(myChart != null) {
+          myChart.Update += new EventHandler(myChart_Update);
+          SetMode(Chart.Mode);
+        }
+        GenerateImage();
+      }
+    }
+    private bool myScaleOnResize;
+    public bool ScaleOnResize {
+      get { return myScaleOnResize; }
+      set { myScaleOnResize = value; }
+    }
+
+    public BubbleChartControl() {
+      InitializeComponent();
+      myScaleOnResize = true;
+      GenerateImage();
+    }
+
+    private void myChart_Update(object sender, EventArgs e) {
+      GenerateImage();
+    }
+    private void pictureBox_SizeChanged(object sender, EventArgs e) {
+      if(ScaleOnResize) {
+        if((pictureBox.Width > 0) && (pictureBox.Height > 0) && (Chart != null)) {
+          PointD point = Chart.TransformPixelToWorld(new Point(pictureBox.Width, Chart.SizeInPixels.Height - pictureBox.Height));
+          Chart.SetPosition(Chart.LowerLeft, point);
+        }
+      }
+      GenerateImage();
+    }
+    private void pictureBox_VisibleChanged(object sender, EventArgs e) {
+      if(pictureBox.Visible && renderingRequired) {
+        GenerateImage();
+      }
+    }
+
+    private void pictureBox_MouseDown(object sender, MouseEventArgs e) {
+      buttonDownPoint = e.Location;
+    }
+    private void pictureBox_MouseUp(object sender, MouseEventArgs e) {
+      if(e.Button == MouseButtons.Left) {
+        Point lowerLeft = new Point(Math.Min(e.X, buttonDownPoint.X),
+                                    Math.Max(e.Y, buttonDownPoint.Y));
+        Point upperRight = new Point(Math.Max(e.X, buttonDownPoint.X),
+                                     Math.Min(e.Y, buttonDownPoint.Y));
+        if(Chart.Mode == ChartMode.Zoom) {
+          pictureBox.Refresh();
+          if((lowerLeft.X != upperRight.X) && (lowerLeft.Y != upperRight.Y)) {
+            Chart.ZoomIn(lowerLeft, upperRight);
+          }
+        } else if(Chart.Mode == ChartMode.Select) {
+          if((lowerLeft.X != upperRight.X) && (lowerLeft.Y != upperRight.Y)) {
+            Chart.MouseDrag(lowerLeft, upperRight, e.Button);
+          }
+        } else if(Chart.Mode == ChartMode.Move) {
+        }
+      } else if(e.Button == MouseButtons.Middle) {
+        if(Chart.Mode == ChartMode.Zoom) {
+          Chart.ZoomOut();
+        }
+      }
+    }
+    private void pictureBox_MouseMove(object sender, MouseEventArgs e) {
+      toolTip.SetToolTip(pictureBox, Chart.GetToolTipText(e.Location));
+      if(e.Button != MouseButtons.None) {
+        if((Chart.Mode == ChartMode.Zoom || Chart.Mode == ChartMode.Select) && (e.Button == MouseButtons.Left)) {
+          pictureBox.Refresh();
+          Graphics graphics = pictureBox.CreateGraphics();
+          Pen pen = new Pen(Color.Gray);
+          pen.DashStyle = DashStyle.Dash;
+          graphics.DrawRectangle(pen,
+                                 Math.Min(e.X, buttonDownPoint.X),
+                                 Math.Min(e.Y, buttonDownPoint.Y),
+                                 Math.Abs(e.X - buttonDownPoint.X),
+                                 Math.Abs(e.Y - buttonDownPoint.Y));
+          pen.Dispose();
+          graphics.Dispose();
+        }
+      }
+      mousePosition = e.Location;
+    }
+
+    private void zoomToolStripMenuItem_Click(object sender, EventArgs e) {
+      SetMode(ChartMode.Zoom);
+    }
+    private void selectToolStripMenuItem_Click(object sender, EventArgs e) {
+      SetMode(ChartMode.Select);
+    }
+    private void moveToolStripMenuItem_Click(object sender, EventArgs e) {
+      SetMode(ChartMode.Move);
+    }
+
+    private void GenerateImage() {
+      if(!Visible) {
+        renderingRequired = true;
+      } else {
+        if((pictureBox.Width == 0) || (pictureBox.Height == 0)) {
+          bitmap = null;
+        } else {
+          bitmap = new Bitmap(pictureBox.Width, pictureBox.Height);
+          if(Chart != null) {
+            Graphics graphics = Graphics.FromImage(bitmap);
+            graphics.SetClip(new System.Drawing.Rectangle(0, 0, pictureBox.Width, pictureBox.Height));
+            Chart.Render(graphics, pictureBox.Width, pictureBox.Height);
+            graphics.Dispose();
+          }
+        }
+        pictureBox.Image = bitmap;
+        renderingRequired = false;
+      }
+    }
+
+    private void SetMode(ChartMode mode) {
+      zoomToolStripMenuItem.Checked = false;
+      selectToolStripMenuItem.Checked = false;
+      moveToolStripMenuItem.Checked = false;
+      if(mode == ChartMode.Zoom) zoomToolStripMenuItem.Checked = true;
+      else if(mode == ChartMode.Select) selectToolStripMenuItem.Checked = true;
+      else if(mode == ChartMode.Move) moveToolStripMenuItem.Checked = true;
+      Chart.Mode = mode;
+    }
+
+    private void pictureBox_MouseClick(object sender, MouseEventArgs e) {
+      Chart.MouseClick(e.Location, e.Button);
+    }
+
+    private void pictureBox_MouseDoubleClick(object sender, MouseEventArgs e) {
+      Chart.MouseDoubleClick(e.Location, e.Button);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/BubbleChartControl.resx	(revision 1270)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="pictureBoxContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>210, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HeuristicLab.CEDMA.Charting.csproj	(revision 1270)
@@ -0,0 +1,179 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1BF17271-5350-476A-8F6D-FC74FA3E82CA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.Charting</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.Charting-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BubbleChart.cs" />
+    <Compile Include="BubbleChartControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BubbleChartControl.Designer.cs">
+      <DependentUpon>BubbleChartControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Histogram.cs" />
+    <Compile Include="HistogramControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="HistogramControl.Designer.cs">
+      <DependentUpon>HistogramControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ModelView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ModelView.Designer.cs">
+      <DependentUpon>ModelView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Record.cs" />
+    <Compile Include="HeuristicLabCedmaChartingPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ResultList.cs" />
+    <Compile Include="ResultListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ResultListView.Designer.cs">
+      <DependentUpon>ResultListView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
+      <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
+      <Name>HeuristicLab.CEDMA.DB.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Charting.Data\HeuristicLab.Charting.Data.csproj">
+      <Project>{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}</Project>
+      <Name>HeuristicLab.Charting.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Charting\HeuristicLab.Charting.csproj">
+      <Project>{B462D3CC-8866-42F0-9832-AD0967613B72}</Project>
+      <Name>HeuristicLab.Charting</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification\HeuristicLab.GP.StructureIdentification.csproj">
+      <Project>{74223A32-C726-4978-BE78-37113A18373C}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
+      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
+      <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
+      <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
+      <Name>HeuristicLab.Logging</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="BubbleChartControl.resx">
+      <DependentUpon>BubbleChartControl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HistogramControl.resx">
+      <DependentUpon>HistogramControl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ModelView.resx">
+      <DependentUpon>ModelView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ResultListView.resx">
+      <DependentUpon>ResultListView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HeuristicLabCedmaChartingPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HeuristicLabCedmaChartingPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HeuristicLabCedmaChartingPlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Charting {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Charting-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Charting-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Charting-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  public class HeuristicLabCedmaCorePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Histogram.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Histogram.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Histogram.cs	(revision 1270)
@@ -0,0 +1,192 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Linq;
+using HeuristicLab.Charting;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public class Histogram : Chart {
+    private static readonly Color defaultColor = Color.Blue;
+    private static readonly Color selectionColor = Color.Red;
+    private static readonly Pen defaultPen = new Pen(defaultColor);
+    private static readonly Brush defaultBrush = defaultPen.Brush;
+    private static readonly Pen selectionPen = new Pen(selectionColor);
+    private static readonly Brush selectionBrush = selectionPen.Brush;
+
+    private double minX;
+    private double maxX;
+    private double maxFrequency;
+    private const int N_BUCKETS = 50;
+    private const int MAX_BUCKETS = 100;
+    private List<Record> records;
+    private ResultList results;
+    private Dictionary<IPrimitive, List<Record>> primitiveToRecordsDictionary;
+    private Dictionary<Record, IPrimitive> recordToPrimitiveDictionary;
+    private Group bars;
+    private string dimension;
+
+    public Histogram(ResultList results, double x1, double y1, double x2, double y2)
+      : this(results, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+
+    public Histogram(ResultList results, PointD lowerLeft, PointD upperRight)
+      : base(lowerLeft, upperRight) {
+      records = new List<Record>();
+      primitiveToRecordsDictionary = new Dictionary<IPrimitive, List<Record>>();
+      recordToPrimitiveDictionary = new Dictionary<Record, IPrimitive>();
+      this.results = results;
+      foreach(Record r in results.Records) {
+        records.Add(r);
+      }
+      results.OnRecordAdded += new EventHandler<RecordAddedEventArgs>(results_OnRecordAdded);
+      results.Changed += new EventHandler(results_Changed);
+    }
+
+    void results_Changed(object sender, EventArgs e) {
+      ResetViewSize();
+      Repaint();
+      EnforceUpdate();
+    }
+
+    void results_OnRecordAdded(object sender, RecordAddedEventArgs e) {
+      lock(records) {
+        records.Add(e.Record);
+      }
+    }
+
+    public void ShowFrequency(string dimension) {
+      if(this.dimension != dimension) {
+        this.dimension = dimension;
+        ResetViewSize();
+        Repaint();
+        ZoomToViewSize();
+      }
+    }
+
+    private void Repaint() {
+      lock(records) {
+        if(dimension == null) return;
+        UpdateEnabled = false;
+        Group.Clear();
+        primitiveToRecordsDictionary.Clear();
+        recordToPrimitiveDictionary.Clear();
+        bars = new Group(this);
+        Group.Add(new Axis(this, 0, 0, AxisType.Both));
+        UpdateViewSize(0, 0);
+        PaintHistogram(records);
+        Group.Add(bars);
+        UpdateEnabled = true;
+      }
+    }
+
+    private void PaintHistogram(IEnumerable<Record> records) {
+      var values = records.Select(r => new { Record = r, Value = r.Get(dimension) }).Where(
+        x => !double.IsNaN(x.Value) && !double.IsInfinity(x.Value) && x.Value != double.MinValue && x.Value != double.MaxValue).OrderBy(x => x.Value);
+      if(values.Count() == 0) return;
+      double bucketSize = 1.0;
+      var frequencies = values.GroupBy(x => x.Value);
+      if(frequencies.Count() > MAX_BUCKETS) {
+        double min = values.ElementAt((int)(values.Count() * 0.05)).Value;
+        double max = values.ElementAt((int)(values.Count() * 0.95)).Value;
+        bucketSize = (max - min) / N_BUCKETS;
+        frequencies = values.GroupBy(x => Math.Min(Math.Max(min, Math.Floor((x.Value - min) / bucketSize) * bucketSize + min), max));
+      }
+      foreach(var g in frequencies) {
+        double freq = g.Count();
+        double selectedFreq = g.Where(r=>r.Record.Selected).Count();
+        double lower = g.Key;
+        double upper = g.Key + bucketSize;
+        HeuristicLab.Charting.Rectangle bar = new HeuristicLab.Charting.Rectangle(this, lower, 0, upper, freq, defaultPen, defaultBrush);
+        primitiveToRecordsDictionary[bar] = g.Select(r => r.Record).ToList();
+        primitiveToRecordsDictionary[bar].ForEach(x => recordToPrimitiveDictionary[x] = bar);
+        HeuristicLab.Charting.Rectangle selectedBar = new HeuristicLab.Charting.Rectangle(this, lower, 0, upper, selectedFreq, selectionPen, selectionBrush);
+        primitiveToRecordsDictionary[selectedBar] = g.Select(r => r.Record).Where(r=>r.Selected).ToList();
+        primitiveToRecordsDictionary[selectedBar].ForEach(x => recordToPrimitiveDictionary[x] = bar);
+        if(lower == frequencies.First().Key) {
+          selectedBar.ToolTipText = " x < " + upper + " : " + selectedFreq;
+           bar.ToolTipText = " x < " + upper + " : " + freq;
+        } else if(lower == frequencies.Last().Key) {
+          selectedBar.ToolTipText = "x >= " + lower + " : " + selectedFreq;
+          bar.ToolTipText = "x >= " + lower + " : " + freq;
+        } else {
+          selectedBar.ToolTipText = "x in [" + lower + " .. " + upper + "[ : " + selectedFreq;
+           bar.ToolTipText = "x in [" + lower + " .. " + upper + "[ : " + freq;
+        }
+        bars.Add(bar);
+        bars.Add(selectedBar);
+        UpdateViewSize(lower, freq);
+        UpdateViewSize(upper, freq);
+      }
+    }
+
+    private void ZoomToViewSize() {
+      if(minX < maxX) {
+        // enlarge view by 5% on each side
+        double width = maxX - minX;
+        minX = minX - width * 0.05;
+        maxX = maxX + width * 0.05;
+        double minY = 0 - maxFrequency * 0.05;
+        double maxY = maxFrequency + maxFrequency * 0.05;
+        ZoomIn(minX, minY, maxX, maxY);
+      }
+    }
+
+    private void UpdateViewSize(double x, double freq) {
+      if(x < minX) minX = x;
+      if(x > maxX) maxX = x;
+      if(freq > maxFrequency) maxFrequency = freq;
+    }
+
+    private void ResetViewSize() {
+      minX = double.PositiveInfinity;
+      maxX = double.NegativeInfinity;
+      maxFrequency = double.NegativeInfinity;
+    }
+
+    internal List<Record> GetRecords(Point point) {
+      List<Record> records = null;
+      IPrimitive p = bars.GetPrimitive(TransformPixelToWorld(point));
+      if(p != null) {
+        primitiveToRecordsDictionary.TryGetValue(p, out records);
+      }
+      return records;
+    }
+
+    public override void MouseClick(Point point, MouseButtons button) {
+      if(button == MouseButtons.Left) {
+        lock(records) {
+          List<Record> rs = GetRecords(point);
+          UpdateEnabled = false;
+          if(rs != null) rs.ForEach(r => r.ToggleSelected());
+          UpdateEnabled = true;
+        }
+        results.FireChanged();
+      } else {
+        base.MouseClick(point, button);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.Designer.cs	(revision 1270)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.CEDMA.Charting {
+  partial class HistogramControl {
+    /// <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.pictureBox = new System.Windows.Forms.PictureBox();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.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.pictureBox.BackColor = System.Drawing.Color.White;
+      this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.pictureBox.Location = new System.Drawing.Point(0, 0);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(266, 236);
+      this.pictureBox.TabIndex = 0;
+      this.pictureBox.TabStop = false;
+      this.pictureBox.VisibleChanged += new System.EventHandler(this.pictureBox_VisibleChanged);
+      this.pictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
+      this.pictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseClick);
+      this.pictureBox.SizeChanged += new System.EventHandler(this.pictureBox_SizeChanged);
+      // 
+      // HistogramControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.Controls.Add(this.pictureBox);
+      this.Name = "HistogramControl";
+      this.Size = new System.Drawing.Size(266, 236);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.PictureBox pictureBox;
+    protected System.Windows.Forms.ToolTip toolTip;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.cs	(revision 1270)
@@ -0,0 +1,96 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public partial class HistogramControl : UserControl {
+    private Bitmap bitmap;
+    private bool renderingRequired;
+
+    private Histogram myChart;
+    public Histogram Chart {
+      get { return myChart; }
+      set {
+        if(myChart != null) myChart.Update -= new EventHandler(myChart_Update);
+        myChart = value;
+        if(myChart != null) {
+          myChart.Update += new EventHandler(myChart_Update);
+        }
+        GenerateImage();
+      }
+    }
+
+    public HistogramControl() {
+      InitializeComponent();
+      GenerateImage();
+    }
+
+    private void myChart_Update(object sender, EventArgs e) {
+      GenerateImage();
+    }
+
+    private void pictureBox_SizeChanged(object sender, EventArgs e) {
+      GenerateImage();
+    }
+    private void pictureBox_VisibleChanged(object sender, EventArgs e) {
+      if(pictureBox.Visible && renderingRequired) {
+        GenerateImage();
+      }
+    }
+
+    private void pictureBox_MouseMove(object sender, MouseEventArgs e) {
+      toolTip.SetToolTip(pictureBox, Chart.GetToolTipText(e.Location));
+    }
+
+    private void GenerateImage() {
+      if(!Visible) {
+        renderingRequired = true;
+      } else {
+        if((pictureBox.Width == 0) || (pictureBox.Height == 0)) {
+          bitmap = null;
+        } else {
+          bitmap = new Bitmap(pictureBox.Width, pictureBox.Height);
+          if(Chart != null) {
+            Graphics graphics = Graphics.FromImage(bitmap);
+            graphics.SetClip(new System.Drawing.Rectangle(0, 0, pictureBox.Width, pictureBox.Height));
+            Chart.Render(graphics, pictureBox.Width, pictureBox.Height);
+            graphics.Dispose();
+          }
+        }
+        pictureBox.Image = bitmap;
+        renderingRequired = false;
+      }
+    }
+
+    private void pictureBox_MouseClick(object sender, MouseEventArgs e) {
+      Chart.MouseClick(e.Location, e.Button);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/HistogramControl.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>210, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.Designer.cs	(revision 1270)
@@ -0,0 +1,94 @@
+﻿namespace HeuristicLab.CEDMA.Charting {
+  partial class ModelView {
+    /// <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.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.lowerSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.algoButton = new System.Windows.Forms.Button();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.lowerSplitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // 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.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.lowerSplitContainer);
+      this.splitContainer.Size = new System.Drawing.Size(450, 427);
+      this.splitContainer.SplitterDistance = 185;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // lowerSplitContainer
+      // 
+      this.lowerSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lowerSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
+      this.lowerSplitContainer.Location = new System.Drawing.Point(0, 0);
+      this.lowerSplitContainer.Name = "lowerSplitContainer";
+      this.lowerSplitContainer.Size = new System.Drawing.Size(450, 238);
+      this.lowerSplitContainer.SplitterDistance = 232;
+      this.lowerSplitContainer.TabIndex = 0;
+      // 
+      // algoButton
+      // 
+      this.algoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.algoButton.Location = new System.Drawing.Point(352, 433);
+      this.algoButton.Name = "algoButton";
+      this.algoButton.Size = new System.Drawing.Size(95, 23);
+      this.algoButton.TabIndex = 1;
+      this.algoButton.Text = "Open algorithm";
+      this.algoButton.UseVisualStyleBackColor = true;
+      this.algoButton.Click += new System.EventHandler(this.algoButton_Click);
+      // 
+      // ModelView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.algoButton);
+      this.Controls.Add(this.splitContainer);
+      this.Name = "ModelView";
+      this.Size = new System.Drawing.Size(450, 459);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.lowerSplitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.SplitContainer lowerSplitContainer;
+    private System.Windows.Forms.Button algoButton;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.cs	(revision 1270)
@@ -0,0 +1,121 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Charting;
+using HeuristicLab.Logging;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Charting.Data;
+using HeuristicLab.GP;
+using HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public partial class ModelView : ViewBase {
+    private Dataset dataset;
+    private IFunctionTree model;
+    private int targetVariable;
+    private Record record;
+
+    public ModelView(Record record, Dataset dataset, IFunctionTree model, int targetVariable) {
+      InitializeComponent();
+      this.dataset = dataset;
+      this.model = model;
+      this.targetVariable = targetVariable;
+      this.record = record;
+
+      splitContainer.Panel1.Controls.Add((Control)model.CreateView());
+      splitContainer.Panel1.Controls[0].Dock = DockStyle.Fill;
+      lowerSplitContainer.Panel1.Controls.Add(CreateLineChart());
+      lowerSplitContainer.Panel1.Controls[0].Dock = DockStyle.Fill;
+      lowerSplitContainer.Panel2.Controls.Add(CreateScatterPlot());
+      lowerSplitContainer.Panel2.Controls[0].Dock = DockStyle.Fill;
+    }
+
+    private Control CreateScatterPlot() {
+      double minX = double.PositiveInfinity;
+      double maxX = double.NegativeInfinity;
+
+      Datachart chart = new Datachart(0, 0, 1, 1);
+      chart.Title = "Scatter plot";
+      chart.UpdateEnabled = false;
+      Pen pen = new Pen(Color.FromArgb(80, Color.Blue));
+      chart.AddDataRow(DataRowType.Points, pen, pen.Brush);
+      BakedTreeEvaluator eval = new BakedTreeEvaluator();
+      eval.ResetEvaluator((BakedFunctionTree)model, dataset, targetVariable, 0, dataset.Rows, 1.0);
+      for(int i = 0; i < dataset.Rows; i += 10) {
+        double predicted = eval.Evaluate(i);
+        double original = dataset.GetValue(i, targetVariable);
+        if(double.IsInfinity(predicted) || predicted == double.MaxValue || predicted == double.MinValue) predicted = double.NaN;
+        if(double.IsInfinity(original) || original == double.MaxValue || original == double.MinValue) original = double.NaN;
+        if(!double.IsNaN(predicted) && !double.IsNaN(original)) {
+          chart.AddDataPoint(0, original, predicted);
+          if(original < minX) minX = original;
+          if(original > maxX) maxX = original;
+          if(predicted < minX) minX = predicted;
+          if(predicted > maxX) maxX = predicted;
+        }
+      }
+      chart.UpdateEnabled = true;
+      chart.Group.Add(new Axis(chart, (maxX - minX) / 2 + minX, (maxX - minX) / 2+minX, AxisType.Both));
+      DataChartControl control = new DataChartControl();
+      control.Chart = chart;
+      if(minX < maxX) {
+        double xExcess = (maxX - minX) * 0.1;
+        chart.ZoomIn(minX - xExcess, minX-xExcess, maxX + xExcess, maxX + xExcess);
+        control.ScaleOnResize = false;
+      }
+      return control;
+    }
+
+    private Control CreateLineChart() {
+      double minY = double.PositiveInfinity;
+      double maxY = double.NegativeInfinity;
+
+      Datachart chart = new Datachart(0, 0, 1, 1);
+      chart.Title = "Linechart";
+      chart.UpdateEnabled = false;
+      Pen redPen = new Pen(Color.FromArgb(180, Color.Red));
+      Pen bluePen = new Pen(Color.FromArgb(180, Color.Blue));
+      chart.AddDataRow(DataRowType.Lines, bluePen, bluePen.Brush);
+      chart.AddDataRow(DataRowType.Lines, redPen, redPen.Brush);
+      BakedTreeEvaluator eval = new BakedTreeEvaluator();
+      eval.ResetEvaluator((BakedFunctionTree)model, dataset, targetVariable, 0, dataset.Rows, 1.0);
+      int n = 0;
+      for(int i = 0; i < dataset.Rows; i ++) {
+        double predicted = eval.Evaluate(i);
+        double original = dataset.GetValue(i, targetVariable);
+        if(double.IsInfinity(predicted) || predicted == double.MaxValue || predicted == double.MinValue) predicted = double.NaN;
+        if(double.IsInfinity(original) || original == double.MaxValue || original == double.MinValue) original = double.NaN;
+        if(!double.IsNaN(predicted) && !double.IsNaN(original)) {
+          chart.AddDataPoint(0, i, predicted);
+          chart.AddDataPoint(1, i, original);
+          n++;
+          if(original < minY) minY = original;
+          if(original > maxY) maxY = original;
+          if(predicted < minY) minY = predicted;
+          if(predicted > maxY) maxY = predicted;
+        }
+      }
+      chart.UpdateEnabled = true;
+      chart.Group.Add(new Axis(chart, 0, minY, AxisType.Both));
+      DataChartControl control = new DataChartControl();
+      control.Chart = chart;
+      if(minY < maxY) {
+        double xExcess = dataset.Rows * 0.05;
+        double yExcess = (maxY - minY) * 0.1;
+        chart.ZoomIn(0.0 - xExcess, minY - yExcess, (double)dataset.Rows + xExcess, maxY + yExcess);
+        control.ScaleOnResize = false;
+      }
+      return control;
+    }
+
+    private void algoButton_Click(object sender, EventArgs e) {
+      record.OpenGeneratingAlgorithm();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ModelView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.Charting")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("58cd6e79-3f9b-4307-944e-b858e8957bbf")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Record.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Record.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/Record.cs	(revision 1270)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public class Record {
+    public const string MAPE_TRAINING = "MAPE (training)";
+    public const string MAPE_VALIDATION = "MAPE (validation)";
+    public const string MAPE_TEST = "MAPE (test)";
+    public const string R2_TRAINING = "R2 (training)";
+    public const string R2_VALIDATION = "R2 (validation)";
+    public const string R2_TEST = "R2 (test)";
+    public const string TARGET_VARIABLE = "Target variable";
+    public const string TREE_SIZE = "Tree size";
+    public const string TREE_HEIGHT = "Tree height";
+    public const string SELECTIONPRESSURE = "Selection pressure";
+
+    public const string X_JITTER = "__X_JITTER";
+    public const string Y_JITTER = "__Y_JITTER";
+
+    private Dictionary<string, double> values = new Dictionary<string, double>();
+    private ResultList resultList;
+
+    private bool selected = false;
+    public bool Selected { get { return selected; } }
+
+    private string uri;
+    public string Uri { get { return uri; } }
+    public Record(ResultList resultList, string uri) {
+      this.uri = uri;
+      this.resultList = resultList;
+    }
+
+    public void Set(string name, double value) {
+      values.Add(name, value);
+    }
+
+    public double Get(string name) {
+      if(name == null || !values.ContainsKey(name)) return double.NaN;
+      return values[name];
+    }
+
+    public void ToggleSelected() {
+      selected = !selected;
+    }
+
+    internal string GetToolTipText() {
+      StringBuilder b = new StringBuilder();
+      foreach(KeyValuePair<string, double> v in values) {
+        if(v.Key != X_JITTER && v.Key != Y_JITTER) {
+          b.Append(v.Key).Append(" = ").Append(v.Value).AppendLine();
+        }
+      }
+      return b.ToString();
+    }
+
+    internal void OpenModel() {
+      resultList.OpenModel(this);
+    }
+
+    internal void OpenGeneratingAlgorithm() {
+      resultList.OpenAlgorithm(this);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultList.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultList.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultList.cs	(revision 1270)
@@ -0,0 +1,208 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Logging;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Charting.Data;
+using System.Drawing;
+using HeuristicLab.GP;
+
+namespace HeuristicLab.CEDMA.Charting {
+
+  public class RecordAddedEventArgs : EventArgs {
+    private Record record;
+    public Record Record { get { return record; } }
+    public RecordAddedEventArgs(Record r)
+      : base() {
+      this.record = r;
+    }
+  }
+
+  public class ResultList : ItemBase {
+    private const string cedmaNS = "http://www.heuristiclab.com/cedma/";
+    private readonly Entity targetVariablePredicate = new Entity(cedmaNS + "TargetVariable");
+    private readonly Entity trainingMAPEPredicate = new Entity(cedmaNS + "MeanAbsolutePercentageErrorTraining");
+    private readonly Entity validationMAPEPredicate = new Entity(cedmaNS + "MeanAbsolutePercentageErrorValidation");
+    private readonly Entity testMAPEPredicate = new Entity(cedmaNS + "MeanAbsolutePercentageErrorTest");
+    private readonly Entity trainingR2Predicate = new Entity(cedmaNS + "CoefficientOfDeterminationTraining");
+    private readonly Entity validationR2Predicate = new Entity(cedmaNS + "CoefficientOfDeterminationValidation");
+    private readonly Entity testR2Predicate = new Entity(cedmaNS + "CoefficientOfDeterminationTest");
+    private readonly Entity treeSizePredicate = new Entity(cedmaNS + "TreeSize");
+    private readonly Entity treeHeightPredicate = new Entity(cedmaNS + "TreeHeight");
+    private readonly Entity selectionPressurePredicate = new Entity(cedmaNS + "SelectionPressure");
+    private readonly Entity rawDataPredicate = new Entity(cedmaNS + "RawData");
+    private readonly Entity hasModelPredicate = new Entity(cedmaNS + "Model");
+    private readonly Entity generatedByPredicate = new Entity(cedmaNS + "GeneratedBy");
+    private readonly Entity anyEntity = new Entity(null);
+    private Dictionary<Record, Dataset> datasets;
+
+    private IStore store;
+    public IStore Store {
+      get { return store; }
+      set {
+        store = value;
+        Action reloadList = ReloadList;
+        reloadList.BeginInvoke(null, null);
+      }
+    }
+
+    private List<string> variableNames = new List<string>() { Record.TARGET_VARIABLE, Record.TREE_SIZE, Record.TREE_HEIGHT, Record.SELECTIONPRESSURE,
+    Record.MAPE_TRAINING, Record.MAPE_VALIDATION, Record.MAPE_TEST,
+    Record.R2_TRAINING, Record.R2_VALIDATION, Record.R2_TEST};
+    public string[] VariableNames {
+      get {
+        return variableNames.ToArray();
+      }
+    }
+
+    private Dictionary<Entity, string> predicateToVariableName;
+
+    public event EventHandler<RecordAddedEventArgs> OnRecordAdded;
+
+    private List<Record> records;
+    public List<Record> Records {
+      get {
+        List<Record> result = new List<Record>();
+        lock(records) {
+          result.AddRange(records);
+        }
+        return result;
+      }
+    }
+    private void ReloadList() {
+      var results = store.Select(new Statement(anyEntity, new Entity(cedmaNS + "instanceOf"), new Literal("class:GpFunctionTree")))
+      .Select(x => store.Select(new SelectFilter(
+        new Entity[] { new Entity(x.Subject.Uri) },
+        new Entity[] { targetVariablePredicate, treeSizePredicate, treeHeightPredicate, selectionPressurePredicate,
+          trainingMAPEPredicate, validationMAPEPredicate, testMAPEPredicate,
+          trainingR2Predicate, validationR2Predicate, testR2Predicate },
+          new Resource[] { anyEntity })));
+
+      Random random = new Random();
+      foreach(Statement[] ss in results) {
+        if(ss.Length > 0) {
+          Record r = new Record(this, ss[0].Subject.Uri);
+          r.Set(Record.X_JITTER, random.NextDouble() * 2.0 - 1.0);
+          r.Set(Record.Y_JITTER, random.NextDouble() * 2.0 - 1.0);
+          foreach(Statement s in ss) {
+            string varName;
+            predicateToVariableName.TryGetValue(s.Predicate, out varName);
+            if(varName != null) {
+              if(varName == Record.TREE_HEIGHT || varName == Record.TREE_SIZE || varName == Record.TARGET_VARIABLE) {
+                r.Set(varName, (double)(int)((Literal)s.Property).Value);
+              } else {
+                r.Set(varName, (double)((Literal)s.Property).Value);
+              }
+            }
+          }
+          lock(records) {
+            records.Add(r);
+          }
+          FireRecordAdded(r);
+        }
+      }
+      FireChanged();
+    }
+
+    private void FireRecordAdded(Record r) {
+      if(OnRecordAdded != null) OnRecordAdded(this, new RecordAddedEventArgs(r));
+    }
+
+    public ResultList()
+      : base() {
+      records = new List<Record>();
+      datasets = new Dictionary<Record, Dataset>();
+      predicateToVariableName = new Dictionary<Entity, string>();
+      predicateToVariableName[targetVariablePredicate] = Record.TARGET_VARIABLE;
+      predicateToVariableName[treeSizePredicate] = Record.TREE_SIZE;
+      predicateToVariableName[treeHeightPredicate] = Record.TREE_HEIGHT;
+      predicateToVariableName[selectionPressurePredicate] = Record.SELECTIONPRESSURE;
+      predicateToVariableName[trainingMAPEPredicate] = Record.MAPE_TRAINING;
+      predicateToVariableName[validationMAPEPredicate] = Record.MAPE_VALIDATION;
+      predicateToVariableName[testMAPEPredicate] = Record.MAPE_TEST;
+      predicateToVariableName[trainingR2Predicate] = Record.R2_TRAINING;
+      predicateToVariableName[validationR2Predicate] = Record.R2_VALIDATION;
+      predicateToVariableName[testR2Predicate] = Record.R2_TEST;
+    }
+
+    public override IView CreateView() {
+      return new ResultListView(this);
+    }
+
+    internal void OpenModel(Record record) {
+      IList<Statement> modelResults = store.Select(new Statement(new Entity(record.Uri), rawDataPredicate, anyEntity));
+      if(modelResults.Count == 1) {
+        string rawData = ((SerializedLiteral)modelResults[0].Property).RawData;
+        XmlDocument doc = new XmlDocument();
+        doc.LoadXml(rawData);
+        IFunctionTree tree = (IFunctionTree)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
+        int targetVariable = (int)record.Get(Record.TARGET_VARIABLE);
+        Dataset dataset = GetDataset(record);
+
+        ModelView modelView = new ModelView(record, dataset, tree, targetVariable);
+        PluginManager.ControlManager.ShowControl(modelView);
+      }
+    }
+
+    private Dataset GetDataset(Record record) {
+      if(!datasets.ContainsKey(record)) {
+        IList<Statement> result = store.Select(new Statement(anyEntity, hasModelPredicate, new Entity(record.Uri)));
+        if(result.Count == 1) {
+          IList<Statement> datasetResult = store.Select(new Statement(result[0].Subject, rawDataPredicate, anyEntity));
+          if(datasetResult.Count == 1) {
+            string rawData = ((SerializedLiteral)datasetResult[0].Property).RawData;
+            XmlDocument doc = new XmlDocument();
+            doc.LoadXml(rawData);
+            Dataset dataset = (Dataset)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
+            datasets.Add(record, dataset);
+          }
+        }
+      }
+      return datasets[record];
+    }
+
+    internal void OpenAlgorithm(Record record) {
+      IList<Statement> generatedBy = store.Select(new Statement(new Entity(record.Uri), generatedByPredicate, anyEntity));
+      if(generatedBy.Count == 1) {
+        IList<Statement> algoResult = store.Select(new Statement((Entity)generatedBy[0].Property, rawDataPredicate, anyEntity));
+        if(algoResult.Count == 1) {
+          string rawData = ((SerializedLiteral)algoResult[0].Property).RawData;
+          XmlDocument doc = new XmlDocument();
+          doc.LoadXml(rawData);
+          IItem algo = (IItem)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
+          PluginManager.ControlManager.ShowControl(algo.CreateView());
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.Designer.cs	(revision 1270)
@@ -0,0 +1,203 @@
+﻿namespace HeuristicLab.CEDMA.Charting {
+  partial class ResultListView {
+    /// <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.yJitterLabel = new System.Windows.Forms.Label();
+      this.xJitterlabel = new System.Windows.Forms.Label();
+      this.xTrackBar = new System.Windows.Forms.TrackBar();
+      this.xAxisLabel = new System.Windows.Forms.Label();
+      this.xAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.yAxisLabel = new System.Windows.Forms.Label();
+      this.yAxisComboBox = new System.Windows.Forms.ComboBox();
+      this.yTrackBar = new System.Windows.Forms.TrackBar();
+      this.sizeComboBox = new System.Windows.Forms.ComboBox();
+      this.sizeLabel = new System.Windows.Forms.Label();
+      this.invertCheckbox = new System.Windows.Forms.CheckBox();
+      this.chartPanel = new System.Windows.Forms.Panel();
+      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // yJitterLabel
+      // 
+      this.yJitterLabel.AutoSize = true;
+      this.yJitterLabel.Location = new System.Drawing.Point(3, 30);
+      this.yJitterLabel.Name = "yJitterLabel";
+      this.yJitterLabel.Size = new System.Drawing.Size(29, 13);
+      this.yJitterLabel.TabIndex = 13;
+      this.yJitterLabel.Text = "jitter:";
+      // 
+      // xJitterlabel
+      // 
+      this.xJitterlabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xJitterlabel.AutoSize = true;
+      this.xJitterlabel.Location = new System.Drawing.Point(291, 418);
+      this.xJitterlabel.Name = "xJitterlabel";
+      this.xJitterlabel.Size = new System.Drawing.Size(29, 13);
+      this.xJitterlabel.TabIndex = 12;
+      this.xJitterlabel.Text = "jitter:";
+      // 
+      // xTrackBar
+      // 
+      this.xTrackBar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xTrackBar.Location = new System.Drawing.Point(326, 418);
+      this.xTrackBar.Maximum = 100;
+      this.xTrackBar.Name = "xTrackBar";
+      this.xTrackBar.Size = new System.Drawing.Size(121, 45);
+      this.xTrackBar.TabIndex = 11;
+      this.xTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.xTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // xAxisLabel
+      // 
+      this.xAxisLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisLabel.AutoSize = true;
+      this.xAxisLabel.Location = new System.Drawing.Point(305, 394);
+      this.xAxisLabel.Name = "xAxisLabel";
+      this.xAxisLabel.Size = new System.Drawing.Size(15, 13);
+      this.xAxisLabel.TabIndex = 8;
+      this.xAxisLabel.Text = "x:";
+      // 
+      // xAxisComboBox
+      // 
+      this.xAxisComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.xAxisComboBox.FormattingEnabled = true;
+      this.xAxisComboBox.Location = new System.Drawing.Point(326, 391);
+      this.xAxisComboBox.Name = "xAxisComboBox";
+      this.xAxisComboBox.Size = new System.Drawing.Size(121, 21);
+      this.xAxisComboBox.TabIndex = 7;
+      this.xAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.xAxisComboBox_SelectedIndexChanged);
+      // 
+      // yAxisLabel
+      // 
+      this.yAxisLabel.AutoSize = true;
+      this.yAxisLabel.Location = new System.Drawing.Point(3, 6);
+      this.yAxisLabel.Name = "yAxisLabel";
+      this.yAxisLabel.Size = new System.Drawing.Size(15, 13);
+      this.yAxisLabel.TabIndex = 6;
+      this.yAxisLabel.Text = "y:";
+      // 
+      // yAxisComboBox
+      // 
+      this.yAxisComboBox.FormattingEnabled = true;
+      this.yAxisComboBox.Location = new System.Drawing.Point(24, 3);
+      this.yAxisComboBox.Name = "yAxisComboBox";
+      this.yAxisComboBox.Size = new System.Drawing.Size(121, 21);
+      this.yAxisComboBox.TabIndex = 5;
+      this.yAxisComboBox.SelectedIndexChanged += new System.EventHandler(this.yAxisComboBox_SelectedIndexChanged);
+      // 
+      // yTrackBar
+      // 
+      this.yTrackBar.Location = new System.Drawing.Point(38, 30);
+      this.yTrackBar.Maximum = 100;
+      this.yTrackBar.Name = "yTrackBar";
+      this.yTrackBar.Size = new System.Drawing.Size(107, 45);
+      this.yTrackBar.TabIndex = 10;
+      this.yTrackBar.TickStyle = System.Windows.Forms.TickStyle.None;
+      this.yTrackBar.ValueChanged += new System.EventHandler(this.jitterTrackBar_ValueChanged);
+      // 
+      // sizeComboBox
+      // 
+      this.sizeComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeComboBox.FormattingEnabled = true;
+      this.sizeComboBox.Location = new System.Drawing.Point(329, 3);
+      this.sizeComboBox.Name = "sizeComboBox";
+      this.sizeComboBox.Size = new System.Drawing.Size(121, 21);
+      this.sizeComboBox.TabIndex = 14;
+      this.sizeComboBox.SelectedIndexChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
+      // 
+      // sizeLabel
+      // 
+      this.sizeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.sizeLabel.AutoSize = true;
+      this.sizeLabel.Location = new System.Drawing.Point(259, 6);
+      this.sizeLabel.Name = "sizeLabel";
+      this.sizeLabel.Size = new System.Drawing.Size(64, 13);
+      this.sizeLabel.TabIndex = 15;
+      this.sizeLabel.Text = "Bubble size:";
+      // 
+      // invertCheckbox
+      // 
+      this.invertCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.invertCheckbox.AutoSize = true;
+      this.invertCheckbox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.invertCheckbox.Location = new System.Drawing.Point(326, 30);
+      this.invertCheckbox.Name = "invertCheckbox";
+      this.invertCheckbox.Size = new System.Drawing.Size(64, 17);
+      this.invertCheckbox.TabIndex = 16;
+      this.invertCheckbox.Text = "Inverse:";
+      this.invertCheckbox.UseVisualStyleBackColor = true;
+      this.invertCheckbox.CheckedChanged += new System.EventHandler(this.sizeComboBox_SelectedIndexChanged);
+      // 
+      // chartPanel
+      // 
+      this.chartPanel.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.chartPanel.Location = new System.Drawing.Point(0, 81);
+      this.chartPanel.Name = "chartPanel";
+      this.chartPanel.Size = new System.Drawing.Size(447, 304);
+      this.chartPanel.TabIndex = 17;
+      // 
+      // ResultListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chartPanel);
+      this.Controls.Add(this.invertCheckbox);
+      this.Controls.Add(this.sizeLabel);
+      this.Controls.Add(this.sizeComboBox);
+      this.Controls.Add(this.yJitterLabel);
+      this.Controls.Add(this.xJitterlabel);
+      this.Controls.Add(this.xTrackBar);
+      this.Controls.Add(this.xAxisLabel);
+      this.Controls.Add(this.xAxisComboBox);
+      this.Controls.Add(this.yAxisLabel);
+      this.Controls.Add(this.yAxisComboBox);
+      this.Controls.Add(this.yTrackBar);
+      this.Name = "ResultListView";
+      this.Size = new System.Drawing.Size(450, 459);
+      ((System.ComponentModel.ISupportInitialize)(this.xTrackBar)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.yTrackBar)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label xAxisLabel;
+    private System.Windows.Forms.ComboBox xAxisComboBox;
+    private System.Windows.Forms.Label yAxisLabel;
+    private System.Windows.Forms.ComboBox yAxisComboBox;
+    private System.Windows.Forms.TrackBar yTrackBar;
+    private System.Windows.Forms.TrackBar xTrackBar;
+    private System.Windows.Forms.Label xJitterlabel;
+    private System.Windows.Forms.Label yJitterLabel;
+    private System.Windows.Forms.ComboBox sizeComboBox;
+    private System.Windows.Forms.Label sizeLabel;
+    private System.Windows.Forms.CheckBox invertCheckbox;
+    private System.Windows.Forms.Panel chartPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.cs	(revision 1270)
@@ -0,0 +1,98 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.CEDMA.Charting {
+  public partial class ResultListView : ViewBase {
+    private ResultList results;
+    private const string FREQUENCY = "<Frequency>";
+    private const string CONSTANT_SIZE = "<constant>";
+    private BubbleChartControl bubbleChartControl;
+    private HistogramControl histogramControl;
+    private Label pleaseSelectAxisLabel = new Label();
+
+    public ResultListView(ResultList results) {
+      this.results = results;
+      InitializeComponent();
+      InitCharts();
+      xAxisComboBox.Items.AddRange(results.VariableNames);
+      yAxisComboBox.Items.Add(FREQUENCY);
+      yAxisComboBox.Items.AddRange(results.VariableNames);
+      sizeComboBox.Items.Add(CONSTANT_SIZE);
+      sizeComboBox.Items.AddRange(results.VariableNames);
+      sizeComboBox.SelectedItem = sizeComboBox.Items[0];
+      sizeComboBox.Enabled = false;
+      invertCheckbox.Enabled = false;
+      sizeLabel.Enabled = false;
+      yAxisComboBox.SelectedItem = yAxisComboBox.Items[0];
+      xAxisComboBox.SelectedItem = xAxisComboBox.Items[0];
+    }
+
+    private void InitCharts() {
+      bubbleChartControl = new BubbleChartControl();
+      bubbleChartControl.Chart = new BubbleChart(results, 0, 0, 100, 100);
+      histogramControl = new HistogramControl();
+      histogramControl.Chart = new Histogram(results, 0, 0, 100, 100);
+    }
+
+    private void yAxisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void xAxisComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      UpdateChart();
+    }
+
+    private void UpdateChart() {
+      if(xAxisComboBox.SelectedItem == null || yAxisComboBox.SelectedItem == null) return;
+      if(yAxisComboBox.SelectedItem.Equals(FREQUENCY)) {
+        xJitterlabel.Enabled = false;
+        xTrackBar.Enabled = false;
+        yJitterLabel.Enabled = false;
+        yTrackBar.Enabled = false;
+        sizeComboBox.Enabled = false;
+        invertCheckbox.Enabled = false;
+        sizeLabel.Enabled = false;
+        chartPanel.Controls.Clear();
+        chartPanel.Controls.Add(histogramControl);
+        histogramControl.Chart.ShowFrequency((string)xAxisComboBox.SelectedItem);
+        histogramControl.Dock = DockStyle.Fill;
+      } else {
+        xJitterlabel.Enabled = true;
+        xTrackBar.Enabled = true;
+        yJitterLabel.Enabled = true;
+        yTrackBar.Enabled = true;
+        sizeComboBox.Enabled = true;
+        invertCheckbox.Enabled = true;
+        sizeLabel.Enabled = true;
+        chartPanel.Controls.Clear();
+        chartPanel.Controls.Add(bubbleChartControl);
+        bubbleChartControl.Chart.ShowXvsY((string)xAxisComboBox.SelectedItem, (string)yAxisComboBox.SelectedItem);
+        bubbleChartControl.Dock = DockStyle.Fill;
+      }
+    }
+
+    private void jitterTrackBar_ValueChanged(object sender, EventArgs e) {
+      if(bubbleChartControl.Chart != null) {
+        double xJitterFactor = xTrackBar.Value / 100.0;
+        double yJitterFactor = yTrackBar.Value / 100.0;
+        bubbleChartControl.Chart.SetJitter(xJitterFactor, yJitterFactor);
+      }
+      UpdateChart();
+    }
+
+    private void sizeComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if(bubbleChartControl.Chart != null) {
+        bubbleChartControl.Chart.SetBubbleSizeDimension((string)sizeComboBox.SelectedItem, invertCheckbox.Checked);
+        UpdateChart();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Charting/ResultListView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Agent.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Agent.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Agent.cs	(revision 1270)
@@ -0,0 +1,103 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Agent : IAgent {
+    public IDatabase Database { get; set; }
+    public long Id { get; set; }
+    public string Name { get; set; }
+    public ProcessStatus Status { get; set; }
+    public bool Terminated { get; set; }
+    private OperatorGraph operatorGraph;
+
+    public IOperatorGraph OperatorGraph {
+      get { return operatorGraph; }
+    }
+
+    public Agent()
+      : base() {
+      operatorGraph = new OperatorGraph();
+    }
+
+    public Agent(IDatabase database, long id)
+      : this() {
+      Database = database;
+      Id = id;
+    }
+
+    public void Save() {
+      Database.UpdateAgent(Id, Name);
+      Database.UpdateAgent(Id, Status);
+      Database.UpdateAgent(Id, PersistenceManager.SaveToGZip(OperatorGraph));
+    }
+
+    public void Start() {
+      Status = ProcessStatus.Waiting;
+      Save();
+    }
+
+    public ICollection<IAgent> SubAgents {
+      get {
+        List<IAgent> agents = new List<IAgent>();
+        foreach(AgentEntry entry in Database.GetSubAgents(Id)) {
+          Agent newAgent = new Agent(Database, entry.Id);
+          newAgent.Name = entry.Name;
+          newAgent.Status = entry.Status;
+          agents.Add(newAgent);
+        }
+        return agents;
+      }
+    }
+
+    public ICollection<IResult> Results {
+      get {
+        List<IResult> results = new List<IResult>();
+        foreach(ResultEntry entry in Database.GetResults(Id)) {
+          Result result = new Result(Database, entry.Id);
+          result.Summary = entry.Summary;
+          result.Description = entry.Description;
+          results.Add(result);
+        }
+        return results;
+      }
+    }
+
+    public IView CreateView() {
+      if(OperatorGraph.Operators.Count == 0) {
+        byte[] rawData = Database.GetAgentRawData(Id);
+        IOperatorGraph opGraph = (IOperatorGraph)PersistenceManager.RestoreFromGZip(rawData);
+        foreach(IOperator op in opGraph.Operators) OperatorGraph.AddOperator(op);
+        OperatorGraph.InitialOperator = opGraph.InitialOperator;
+        OperatorLinkPatcher.LinkDatabase(OperatorGraph, Database);
+      }
+      return new AgentView(this);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentList.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentList.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentList.cs	(revision 1270)
@@ -0,0 +1,96 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Collections;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Xml;
+using System.Runtime.Serialization;
+using System.IO;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class AgentList : ItemBase, IAgentList {
+    private List<IAgent> agentList;
+    private IDatabase database;
+    public IDatabase Database {
+      get { return database; }
+      set {
+        database = value;
+        Action reload = ReloadList;
+        lock(agentList) {
+          agentList.Clear();
+        }
+        reload.BeginInvoke(null, null);
+      }
+    }
+
+    private void ReloadList() {
+      foreach(AgentEntry a in database.GetAgents()) {
+        Agent newAgent = new Agent(Database, a.Id);
+        newAgent.Name = a.Name;
+        newAgent.Status = a.Status;
+        lock(agentList) {
+          agentList.Add(newAgent);
+        }
+        FireChanged();
+      }
+    }
+
+    public AgentList()
+      : base() {
+      agentList = new List<IAgent>();
+    }
+
+    public void CreateAgent() {
+      Agent agent = new Agent();
+      agent.Name = DateTime.Now.ToString();
+      agent.Status = ProcessStatus.Unknown;
+      agent.Database = database;
+      long id = database.InsertAgent(null, agent.Name, PersistenceManager.SaveToGZip(agent.OperatorGraph));
+      agent.Id = id;
+      lock(agentList) {
+        agentList.Add(agent);
+      }
+      FireChanged();
+    }
+
+    public IEnumerator<IAgent> GetEnumerator() {
+      List<IAgent> agents = new List<IAgent>();
+      lock(agentList) {
+        agents.AddRange(agentList);
+      }
+      return agents.GetEnumerator();
+    }
+
+    IEnumerator IEnumerable.GetEnumerator() {
+      return GetEnumerator();
+    }
+
+    public override IView CreateView() {
+      return new AgentListView(this);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.Designer.cs	(revision 1270)
@@ -0,0 +1,181 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.CEDMA.Core {
+  partial class AgentListView {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.agentsGroupBox = new System.Windows.Forms.GroupBox();
+      this.agentTreeView = new System.Windows.Forms.TreeView();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.addButton = new System.Windows.Forms.Button();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.entryContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.exportAllResultsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.agentsGroupBox.SuspendLayout();
+      this.entryContextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.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.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.agentsGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(276, 155);
+      this.splitContainer1.SplitterDistance = 135;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // agentsGroupBox
+      // 
+      this.agentsGroupBox.Controls.Add(this.agentTreeView);
+      this.agentsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.agentsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.agentsGroupBox.Name = "agentsGroupBox";
+      this.agentsGroupBox.Size = new System.Drawing.Size(135, 155);
+      this.agentsGroupBox.TabIndex = 0;
+      this.agentsGroupBox.TabStop = false;
+      this.agentsGroupBox.Text = "&Agents";
+      // 
+      // agentTreeView
+      // 
+      this.agentTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.agentTreeView.Location = new System.Drawing.Point(3, 16);
+      this.agentTreeView.Name = "agentTreeView";
+      this.agentTreeView.Size = new System.Drawing.Size(129, 136);
+      this.agentTreeView.TabIndex = 0;
+      this.agentTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.agentTreeView_BeforeExpand);
+      this.agentTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.agentTreeView_AfterSelect);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(137, 155);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "&Details";
+      // 
+      // addButton
+      // 
+      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addButton.Location = new System.Drawing.Point(0, 161);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(75, 23);
+      this.addButton.TabIndex = 1;
+      this.addButton.Text = "&Add...";
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.refreshButton.Location = new System.Drawing.Point(81, 161);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(75, 23);
+      this.refreshButton.TabIndex = 2;
+      this.refreshButton.Text = "&Refresh";
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // entryContextMenuStrip
+      // 
+      this.entryContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.exportAllResultsToolStripMenuItem});
+      this.entryContextMenuStrip.Name = "entryContextMenuStrip";
+      this.entryContextMenuStrip.Size = new System.Drawing.Size(166, 26);
+      // 
+      // exportAllResultsToolStripMenuItem
+      // 
+      this.exportAllResultsToolStripMenuItem.Name = "exportAllResultsToolStripMenuItem";
+      this.exportAllResultsToolStripMenuItem.Size = new System.Drawing.Size(165, 22);
+      this.exportAllResultsToolStripMenuItem.Text = "Export all results";
+      this.exportAllResultsToolStripMenuItem.Click += new System.EventHandler(this.exportAllResultsToolStripMenuItem_Click);
+      // 
+      // AgentListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.addButton);
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "AgentListView";
+      this.Size = new System.Drawing.Size(276, 184);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.agentsGroupBox.ResumeLayout(false);
+      this.entryContextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox agentsGroupBox;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.Button addButton;
+    private TreeView agentTreeView;
+    private Button refreshButton;
+    private ContextMenuStrip entryContextMenuStrip;
+    private ToolStripMenuItem exportAllResultsToolStripMenuItem;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.cs	(revision 1270)
@@ -0,0 +1,141 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class AgentListView : ViewBase {
+    public IAgentList AgentList {
+      get { return (IAgentList)Item; }
+      set { base.Item = value; }
+    }
+
+    public AgentListView() {
+      InitializeComponent();
+      Caption = "Agent View";
+    }
+    public AgentListView(IAgentList agentList)
+      : this() {
+      AgentList = agentList;
+      agentList.Changed += new EventHandler(agentList_Changed);
+    }
+
+    void agentList_Changed(object sender, EventArgs e) {
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      if(AgentList == null) {
+        Caption = "Agents View";
+        agentTreeView.Enabled = false;
+      } else {
+        agentTreeView.Enabled = true;
+        agentTreeView.Nodes.Clear();
+        foreach(IAgent agent in AgentList) {
+          TreeNode node = new TreeNode();
+          node.Text = agent.Name;
+          node.Tag = agent;
+          node.Nodes.Add("dummy");
+          node.ContextMenuStrip = entryContextMenuStrip;
+          agentTreeView.Nodes.Add(node);
+        }
+      }
+    }
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      AgentList.CreateAgent();
+    }
+    #endregion
+
+    private void agentTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
+      e.Node.Nodes.Clear();
+      if(e.Node.Tag is IAgent) {
+        IAgent agent = (IAgent)e.Node.Tag;
+        foreach(IAgent subAgent in agent.SubAgents) {
+          TreeNode node = new TreeNode();
+          node.Text = subAgent.Name;
+          node.Tag = subAgent;
+          node.ContextMenuStrip = entryContextMenuStrip;
+          node.Nodes.Add("dummy");
+          e.Node.Nodes.Add(node);
+        }
+        foreach(IResult result in agent.Results) {
+          TreeNode node = new TreeNode();
+          node.Text = result.Summary;
+          node.Tag = result;
+          node.Nodes.Add("dummy");
+          e.Node.Nodes.Add(node);
+        }
+      } else if(e.Node.Tag is IResult) {
+        IResult result = (IResult)e.Node.Tag;
+        foreach(IResult subResult in result.SubResults) {
+          TreeNode node = new TreeNode();
+          node.Text = subResult.Summary;
+          node.Tag = subResult;
+          node.Nodes.Add("dummy");
+          e.Node.Nodes.Add(node);
+        }
+      }
+    }
+
+    private void agentTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      if(detailsGroupBox.Controls.Count > 0)
+        detailsGroupBox.Controls[0].Dispose();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      if(agentTreeView.SelectedNode != null) {
+        IViewable viewable = (IViewable)agentTreeView.SelectedNode.Tag;
+        Control control = (Control)viewable.CreateView();
+        detailsGroupBox.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      UpdateControls();
+    }
+
+    private void exportAllResultsToolStripMenuItem_Click(object sender, EventArgs e) {
+      TreeNode node = agentTreeView.SelectedNode;
+      Agent agent = (Agent)node.Tag;
+      ResultExporter exporter = new ResultExporter();
+      ResultTable table = new ResultTable();
+      exporter.Export(agent, table);
+
+      using(System.IO.FileStream s = new System.IO.FileStream("exported-results.txt", System.IO.FileMode.Create)) {
+        table.Write(s);
+      }
+    }
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentListView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="entryContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.Designer.cs	(revision 1270)
@@ -0,0 +1,105 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.CEDMA.Core {
+  partial class AgentView {
+    /// <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.editorGroupBox = new System.Windows.Forms.GroupBox();
+      this.saveButton = new System.Windows.Forms.Button();
+      this.activateButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // editorGroupBox
+      // 
+      this.editorGroupBox.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.editorGroupBox.Location = new System.Drawing.Point(0, 3);
+      this.editorGroupBox.Name = "editorGroupBox";
+      this.editorGroupBox.Size = new System.Drawing.Size(274, 119);
+      this.editorGroupBox.TabIndex = 0;
+      this.editorGroupBox.TabStop = false;
+      this.editorGroupBox.Text = "&Editor:";
+      // 
+      // saveButton
+      // 
+      this.saveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.saveButton.Location = new System.Drawing.Point(4, 128);
+      this.saveButton.Name = "saveButton";
+      this.saveButton.Size = new System.Drawing.Size(75, 23);
+      this.saveButton.TabIndex = 1;
+      this.saveButton.Text = "&Save";
+      this.saveButton.UseVisualStyleBackColor = true;
+      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+      // 
+      // activateButton
+      // 
+      this.activateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.activateButton.Location = new System.Drawing.Point(85, 128);
+      this.activateButton.Name = "activateButton";
+      this.activateButton.Size = new System.Drawing.Size(75, 23);
+      this.activateButton.TabIndex = 2;
+      this.activateButton.Text = "&Start";
+      this.activateButton.UseVisualStyleBackColor = true;
+      this.activateButton.Click += new System.EventHandler(this.activateButton_Click);
+      // 
+      // AgentView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.activateButton);
+      this.Controls.Add(this.saveButton);
+      this.Controls.Add(this.editorGroupBox);
+      this.Name = "AgentView";
+      this.Size = new System.Drawing.Size(274, 154);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox editorGroupBox;
+    private System.Windows.Forms.Button saveButton;
+    private System.Windows.Forms.Button activateButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class AgentView : ViewBase {
+    private Agent agent;
+    public Agent Agent {
+      get { return agent; }
+      set { agent = value; }
+    }
+
+    public AgentView() {
+      InitializeComponent();
+      Caption = "Agent";
+    }
+    public AgentView(Agent agent)
+      : this() {
+      Agent = agent;
+      UpdateControls();
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      editorGroupBox.Controls.Clear();
+      editorGroupBox.Enabled = false;
+      if(Agent != null && Agent.OperatorGraph != null) {
+        Control editor = (Control)Agent.OperatorGraph.CreateView();
+        if(editor != null) {
+          editorGroupBox.Controls.Add(editor);
+          editor.Dock = DockStyle.Fill;
+          editorGroupBox.Enabled = true;
+        }
+
+        if(Agent.Status == ProcessStatus.Unknown) activateButton.Enabled = true;
+        else activateButton.Enabled = false;
+      }
+    }
+
+    private void saveButton_Click(object sender, EventArgs e) {
+      Agent.Save();
+    }
+
+    private void activateButton_Click(object sender, EventArgs e) {
+      Agent.Start();
+      activateButton.Enabled = false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/AgentView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Console.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Console.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Console.cs	(revision 1270)
@@ -0,0 +1,110 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.CEDMA.Charting;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Console : ItemBase, IEditable {
+    private AgentList agentList;
+    private ResultList resultsList;
+    private DatabaseOperatorLibrary operatorLibary;
+    private ChannelFactory<IDatabase> factory;
+    private IDatabase database;
+    private string serverUri;
+    public string ServerUri {
+      get { return serverUri; }
+    }
+
+    public IAgentList AgentList {
+      get { return agentList; }
+    }
+
+    public ResultList ResultsList {
+      get { return resultsList; }
+    }
+
+    public IOperatorLibrary OperatorLibrary {
+      get { return operatorLibary; }
+    }
+
+    public Console()
+      : base() {
+      agentList = new AgentList();
+      resultsList = new ResultList();
+      operatorLibary = new DatabaseOperatorLibrary();
+    }
+
+    public IEditor CreateEditor() {
+      return new ConsoleEditor(this);
+    }
+
+    public override IView CreateView() {
+      return new ConsoleEditor(this);
+    }
+
+    #region serialization
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute uriAttribute = document.CreateAttribute("ServerURI");
+      uriAttribute.Value = serverUri;
+      node.Attributes.Append(uriAttribute);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      serverUri = node.Attributes["ServerURI"].Value;
+    }
+    #endregion
+
+    #region WCF
+    private void ResetConnection() {
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
+      binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
+      binding.Security.Mode = SecurityMode.None;
+      factory = new ChannelFactory<IDatabase>(binding);
+      database = factory.CreateChannel(new EndpointAddress(serverUri));
+      agentList.Database = database;
+      operatorLibary.Database = database;
+
+      ChannelFactory<IStore> storeFactory = new ChannelFactory<IStore>(binding);
+      IStore store = storeFactory.CreateChannel(new EndpointAddress(serverUri + "/RdfStore"));
+      resultsList.Store = store;
+    }
+    #endregion
+
+    internal void Connect(string serverUri) {
+      this.serverUri = serverUri;
+      ResetConnection();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ConsoleEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ConsoleEditor.cs	(revision 1270)
@@ -0,0 +1,197 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Windows.Forms;
+using System.ServiceModel;
+using HeuristicLab.PluginInfrastructure;
+using System.Drawing;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  class ConsoleEditor : EditorBase {
+    private System.Windows.Forms.TextBox uriTextBox;
+    private System.Windows.Forms.Label uriLabel;
+    private Button connectButton;
+    private Button openOpLibButton;
+    private Label label1;
+    private Label resultsLabel;
+    private Button openResultsButton;
+    private Button openAgentsButton;
+    private Label agentsLabel;
+    private Console console;
+
+    public ConsoleEditor(Console console) {
+      InitializeComponent();
+      this.console = console;
+    }
+
+    private void InitializeComponent() {
+      this.uriTextBox = new System.Windows.Forms.TextBox();
+      this.uriLabel = new System.Windows.Forms.Label();
+      this.connectButton = new System.Windows.Forms.Button();
+      this.openOpLibButton = new System.Windows.Forms.Button();
+      this.label1 = new System.Windows.Forms.Label();
+      this.resultsLabel = new System.Windows.Forms.Label();
+      this.openResultsButton = new System.Windows.Forms.Button();
+      this.openAgentsButton = new System.Windows.Forms.Button();
+      this.agentsLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // uriTextBox
+      // 
+      this.uriTextBox.Location = new System.Drawing.Point(94, 3);
+      this.uriTextBox.Name = "uriTextBox";
+      this.uriTextBox.Size = new System.Drawing.Size(205, 20);
+      this.uriTextBox.TabIndex = 0;
+      // 
+      // uriLabel
+      // 
+      this.uriLabel.AutoSize = true;
+      this.uriLabel.Location = new System.Drawing.Point(6, 6);
+      this.uriLabel.Name = "uriLabel";
+      this.uriLabel.Size = new System.Drawing.Size(82, 13);
+      this.uriLabel.TabIndex = 1;
+      this.uriLabel.Text = "CEDMA Server:";
+      // 
+      // connectButton
+      // 
+      this.connectButton.Location = new System.Drawing.Point(305, 1);
+      this.connectButton.Name = "connectButton";
+      this.connectButton.Size = new System.Drawing.Size(75, 23);
+      this.connectButton.TabIndex = 3;
+      this.connectButton.Text = "&Connect";
+      this.connectButton.UseVisualStyleBackColor = true;
+      this.connectButton.Click += new System.EventHandler(this.connectButton_Click);
+      // 
+      // openOpLibButton
+      // 
+      this.openOpLibButton.Enabled = false;
+      this.openOpLibButton.Location = new System.Drawing.Point(94, 85);
+      this.openOpLibButton.Name = "openOpLibButton";
+      this.openOpLibButton.Size = new System.Drawing.Size(75, 23);
+      this.openOpLibButton.TabIndex = 7;
+      this.openOpLibButton.Text = "&Open";
+      this.openOpLibButton.UseVisualStyleBackColor = true;
+      this.openOpLibButton.Click += new System.EventHandler(this.opLibButton_Click);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 90);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(85, 13);
+      this.label1.TabIndex = 8;
+      this.label1.Text = "Operator Library:";
+      // 
+      // resultsLabel
+      // 
+      this.resultsLabel.AutoSize = true;
+      this.resultsLabel.Location = new System.Drawing.Point(43, 61);
+      this.resultsLabel.Name = "resultsLabel";
+      this.resultsLabel.Size = new System.Drawing.Size(45, 13);
+      this.resultsLabel.TabIndex = 9;
+      this.resultsLabel.Text = "Results:";
+      // 
+      // openResultsButton
+      // 
+      this.openResultsButton.Enabled = false;
+      this.openResultsButton.Location = new System.Drawing.Point(94, 56);
+      this.openResultsButton.Name = "openResultsButton";
+      this.openResultsButton.Size = new System.Drawing.Size(75, 23);
+      this.openResultsButton.TabIndex = 10;
+      this.openResultsButton.Text = "&Open";
+      this.openResultsButton.UseVisualStyleBackColor = true;
+      this.openResultsButton.Click += new System.EventHandler(this.openChartButton_Click);
+      // 
+      // openAgentsButton
+      // 
+      this.openAgentsButton.Enabled = false;
+      this.openAgentsButton.Location = new System.Drawing.Point(94, 27);
+      this.openAgentsButton.Name = "openAgentsButton";
+      this.openAgentsButton.Size = new System.Drawing.Size(75, 23);
+      this.openAgentsButton.TabIndex = 12;
+      this.openAgentsButton.Text = "&Open";
+      this.openAgentsButton.UseVisualStyleBackColor = true;
+      this.openAgentsButton.Click += new System.EventHandler(this.openAgentsButton_Click);
+      // 
+      // agentsLabel
+      // 
+      this.agentsLabel.AutoSize = true;
+      this.agentsLabel.Location = new System.Drawing.Point(45, 32);
+      this.agentsLabel.Name = "agentsLabel";
+      this.agentsLabel.Size = new System.Drawing.Size(43, 13);
+      this.agentsLabel.TabIndex = 11;
+      this.agentsLabel.Text = "Agents:";
+      // 
+      // ConsoleEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.openAgentsButton);
+      this.Controls.Add(this.agentsLabel);
+      this.Controls.Add(this.openResultsButton);
+      this.Controls.Add(this.resultsLabel);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.openOpLibButton);
+      this.Controls.Add(this.connectButton);
+      this.Controls.Add(this.uriLabel);
+      this.Controls.Add(this.uriTextBox);
+      this.Name = "ConsoleEditor";
+      this.Size = new System.Drawing.Size(445, 189);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    private void connectButton_Click(object sender, EventArgs e) {
+      try {
+        console.Connect(uriTextBox.Text);
+        connectButton.Enabled = false;
+        openOpLibButton.Enabled = true;
+        openAgentsButton.Enabled = true;
+        openResultsButton.Enabled = true;
+      } catch(CommunicationException ex) {
+        MessageBox.Show("Exception while trying to connect to " + uriTextBox.Text + "\n" + ex.Message);
+      }
+    }
+
+    private void opLibButton_Click(object sender, EventArgs e) {
+      IOperatorLibrary opLib = console.OperatorLibrary;
+      if(opLib != null) {
+        IView view = opLib.CreateView();
+        if(view != null)
+          PluginManager.ControlManager.ShowControl(view);
+      }
+    }
+
+    private void openChartButton_Click(object sender, EventArgs e) {
+      PluginManager.ControlManager.ShowControl(console.ResultsList.CreateView());
+    }
+
+    private void openAgentsButton_Click(object sender, EventArgs e) {
+      PluginManager.ControlManager.ShowControl(console.AgentList.CreateView());
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ConsoleEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ConsoleEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ConsoleEditor.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibrary.cs	(revision 1270)
@@ -0,0 +1,119 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class DatabaseOperatorLibrary : ItemBase, IOperatorLibrary {
+
+    private OperatorGroup group;
+    public IOperatorGroup Group {
+      get { return group; }
+    }
+
+    private IDatabase database;
+    public IDatabase Database {
+      get { return database; }
+      set { this.database = value; }
+    }
+
+    private Dictionary<IOperator, long> knownOperators;
+
+    public DatabaseOperatorLibrary()
+      : base() {
+      group = new OperatorGroup();
+      knownOperators = new Dictionary<IOperator, long>();
+    }
+
+    public void Save() {
+      Dictionary<IOperator, long> newKnownOperators = new Dictionary<IOperator, long>();
+      foreach(IOperator op in group.Operators) {
+        if(knownOperators.ContainsKey(op)) {
+          // update
+          long id = knownOperators[op];
+          Database.UpdateOperator(id, op.Name, PersistenceManager.SaveToGZip(op));
+          knownOperators.Remove(op);
+          newKnownOperators.Add(op, id);
+        } else {
+          // create new
+          long id = Database.InsertOperator(op.Name, PersistenceManager.SaveToGZip(op));
+          newKnownOperators.Add(op, id);
+        }
+      }
+      // delete operators from the table that are not present in the group anymore (remaining entries)
+      foreach(long id in knownOperators.Values) {
+        Database.DeleteOperator(id);
+      }
+
+      knownOperators = newKnownOperators;
+    }
+
+    public void Restore() {
+      foreach(IOperator op in knownOperators.Keys) {
+        group.RemoveOperator(op);
+      }
+      knownOperators.Clear();
+      if(database == null) return;
+      foreach(OperatorEntry e in Database.GetOperators()) {
+        IOperator op = (IOperator)PersistenceManager.RestoreFromGZip(e.RawData);
+        knownOperators.Add(op, e.Id);
+        group.AddOperator(op);
+      }
+
+      // set the DB source for each operator
+      foreach(IOperator op in group.Operators) {
+        OperatorLinkPatcher.LinkDatabase(op, Database);
+      }
+    }
+
+    private IOperator FindOperator(long id) {
+      foreach(KeyValuePair<IOperator, long> p in knownOperators) if(p.Value == id) return p.Key;
+      return null;
+    }
+
+    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      throw new NotSupportedException();
+    }
+
+    public override void Populate(System.Xml.XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      throw new NotSupportedException();
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      throw new NotSupportedException();
+    }
+
+    public override IView CreateView() {
+      Restore();
+      return new DatabaseOperatorLibraryView(this);
+    }
+
+    internal long GetId(IOperator op) {
+      return knownOperators[op];
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.Designer.cs	(revision 1270)
@@ -0,0 +1,161 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.CEDMA.Core {
+  partial class DatabaseOperatorLibraryView {
+    /// <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 (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      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.operatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.operatorsTreeView = new System.Windows.Forms.TreeView();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addOperatorButton = new System.Windows.Forms.Button();
+      this.saveButton = new System.Windows.Forms.Button();
+      this.refreshButton = new System.Windows.Forms.Button();
+      this.operatorsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // operatorsGroupBox
+      // 
+      this.operatorsGroupBox.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.operatorsGroupBox.Controls.Add(this.operatorsTreeView);
+      this.operatorsGroupBox.Enabled = false;
+      this.operatorsGroupBox.Location = new System.Drawing.Point(0, 32);
+      this.operatorsGroupBox.Name = "operatorsGroupBox";
+      this.operatorsGroupBox.Size = new System.Drawing.Size(522, 334);
+      this.operatorsGroupBox.TabIndex = 2;
+      this.operatorsGroupBox.TabStop = false;
+      this.operatorsGroupBox.Text = "&Operators";
+      // 
+      // operatorsTreeView
+      // 
+      this.operatorsTreeView.AllowDrop = true;
+      this.operatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorsTreeView.HideSelection = false;
+      this.operatorsTreeView.LabelEdit = true;
+      this.operatorsTreeView.Location = new System.Drawing.Point(3, 16);
+      this.operatorsTreeView.Name = "operatorsTreeView";
+      this.operatorsTreeView.ShowNodeToolTips = true;
+      this.operatorsTreeView.Size = new System.Drawing.Size(516, 315);
+      this.operatorsTreeView.TabIndex = 0;
+      this.operatorsTreeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.operatorsTreeView_AfterLabelEdit);
+      this.operatorsTreeView.DoubleClick += new System.EventHandler(this.operatorsTreeView_DoubleClick);
+      this.operatorsTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragDrop);
+      this.operatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
+      this.operatorsTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.operatorsTreeView_MouseDown);
+      this.operatorsTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragEnter);
+      this.operatorsTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.operatorsTreeView_KeyDown);
+      this.operatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorsTreeView_ItemDrag);
+      this.operatorsTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragOver);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeButton.Enabled = false;
+      this.removeButton.Location = new System.Drawing.Point(113, 372);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(104, 23);
+      this.removeButton.TabIndex = 4;
+      this.removeButton.Text = "&Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addOperatorButton
+      // 
+      this.addOperatorButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addOperatorButton.Enabled = false;
+      this.addOperatorButton.Location = new System.Drawing.Point(3, 372);
+      this.addOperatorButton.Name = "addOperatorButton";
+      this.addOperatorButton.Size = new System.Drawing.Size(104, 23);
+      this.addOperatorButton.TabIndex = 3;
+      this.addOperatorButton.Text = "Add &Operator...";
+      this.addOperatorButton.UseVisualStyleBackColor = true;
+      this.addOperatorButton.Click += new System.EventHandler(this.addOperatorButton_Click);
+      // 
+      // saveButton
+      // 
+      this.saveButton.Location = new System.Drawing.Point(6, 3);
+      this.saveButton.Name = "saveButton";
+      this.saveButton.Size = new System.Drawing.Size(104, 23);
+      this.saveButton.TabIndex = 0;
+      this.saveButton.Text = "&Upload";
+      this.saveButton.UseVisualStyleBackColor = true;
+      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+      // 
+      // refreshButton
+      // 
+      this.refreshButton.Location = new System.Drawing.Point(113, 3);
+      this.refreshButton.Name = "refreshButton";
+      this.refreshButton.Size = new System.Drawing.Size(104, 23);
+      this.refreshButton.TabIndex = 1;
+      this.refreshButton.Text = "R&efresh";
+      this.refreshButton.UseVisualStyleBackColor = true;
+      this.refreshButton.Click += new System.EventHandler(this.refreshButton_Click);
+      // 
+      // DatabaseOperatorLibraryView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.refreshButton);
+      this.Controls.Add(this.saveButton);
+      this.Controls.Add(this.operatorsGroupBox);
+      this.Controls.Add(this.addOperatorButton);
+      this.Controls.Add(this.removeButton);
+      this.Name = "DatabaseOperatorLibraryView";
+      this.Size = new System.Drawing.Size(522, 395);
+      this.operatorsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox operatorsGroupBox;
+    private System.Windows.Forms.TreeView operatorsTreeView;
+    private System.Windows.Forms.Button removeButton;
+    private System.Windows.Forms.Button addOperatorButton;
+    private System.Windows.Forms.Button saveButton;
+    private System.Windows.Forms.Button refreshButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.cs	(revision 1270)
@@ -0,0 +1,257 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Core {
+  public partial class DatabaseOperatorLibraryView : ViewBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    public IOperatorLibrary OperatorLibrary {
+      get { return (IOperatorLibrary)Item; }
+      set { base.Item = value; }
+    }
+
+    public DatabaseOperatorLibraryView() {
+      InitializeComponent();
+      operatorsTreeView.TreeViewNodeSorter = new NodeSorter();
+      Caption = "Operator Library";
+    }
+    public DatabaseOperatorLibraryView(DatabaseOperatorLibrary operatorLibrary)
+      : this() {
+      OperatorLibrary = operatorLibrary;
+    }
+
+    private class NodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if(result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      operatorsTreeView.Nodes.Clear();
+      addOperatorButton.Enabled = false;
+      removeButton.Enabled = false;
+      if(OperatorLibrary == null) {
+        Caption = "Operator Library";
+        operatorsGroupBox.Enabled = false;
+      } else {
+        Caption = OperatorLibrary.Group.Name + " (" + OperatorLibrary.GetType().Name + ")";
+        operatorsGroupBox.Enabled = true;
+        operatorsTreeView.Nodes.Add(CreateTreeNode(OperatorLibrary.Group));
+        operatorsTreeView.Sort();
+      }
+    }
+
+    private TreeNode CreateTreeNode(IOperatorGroup group) {
+      TreeNode node = new TreeNode();
+      node.Text = group.Name;
+      node.ForeColor = Color.LightGray;
+      node.Tag = group;
+
+      foreach(IOperator op in group.Operators)
+        node.Nodes.Add(CreateTreeNode(op));
+      foreach(IOperatorGroup subGroup in group.SubGroups)
+        node.Nodes.Add(CreateTreeNode(subGroup));
+      return node;
+    }
+    private TreeNode CreateTreeNode(IOperator op) {
+      TreeNode node = new TreeNode();
+      node.Text = op.Name;
+      node.ToolTipText = op.GetType().Name;
+      node.Tag = op;
+      return node;
+    }
+    private void RemoveTreeNode(TreeNode node) {
+      if(node.Tag is IOperatorGroup) {
+        IOperatorGroup group = node.Tag as IOperatorGroup;
+        IOperatorGroup parent = node.Parent.Tag as IOperatorGroup;
+        parent.RemoveSubGroup(group);
+      } else if(node.Tag is IOperator) {
+        IOperator op = node.Tag as IOperator;
+        IOperatorGroup group = node.Parent.Tag as IOperatorGroup;
+        group.RemoveOperator(op);
+      }
+      node.Remove();
+      EnableDisableButtons();
+    }
+
+    private void EnableDisableButtons() {
+      addOperatorButton.Enabled = false;
+      removeButton.Enabled = false;
+      operatorsTreeView.Focus();
+
+      if(operatorsTreeView.SelectedNode != null) {
+        if(operatorsTreeView.SelectedNode.Parent != null)
+          removeButton.Enabled = true;
+        if(operatorsTreeView.SelectedNode.Tag is IOperatorGroup) {
+          addOperatorButton.Enabled = true;
+        }
+      }
+    }
+
+    #region TreeView Events
+    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      EnableDisableButtons();
+    }
+    private void operatorsTreeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
+      e.CancelEdit = false;
+
+      string name = e.Label;
+      if(name != null) {
+        if(e.Node.Tag is IOperatorGroup)
+          ((IOperatorGroup)e.Node.Tag).Name = name;
+        else if(e.Node.Tag is IOperator)
+          ((IOperator)e.Node.Tag).Name = name;
+      }
+    }
+    private void operatorsTreeView_DoubleClick(object sender, EventArgs e) {
+      if(operatorsTreeView.SelectedNode != null) {
+        IOperator op = operatorsTreeView.SelectedNode.Tag as IOperator;
+        if(op != null) {
+          IView view = op.CreateView();
+          if(view != null)
+            PluginManager.ControlManager.ShowControl(view);
+        }
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addOperatorButton_Click(object sender, EventArgs e) {
+      if(chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if(chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        TreeNode node = operatorsTreeView.SelectedNode;
+        IOperatorGroup group = node.Tag as IOperatorGroup;
+        group.AddOperator(chooseOperatorDialog.Operator);
+        node.Nodes.Add(CreateTreeNode(chooseOperatorDialog.Operator));
+        operatorsTreeView.Sort();
+        EnableDisableButtons();
+      }
+    }
+    private void removeButton_Click(object sender, EventArgs e) {
+      TreeNode node = operatorsTreeView.SelectedNode;
+      RemoveTreeNode(node);
+    }
+    #endregion
+
+    #region Key Events
+    private void operatorsTreeView_KeyDown(object sender, KeyEventArgs e) {
+      TreeNode node = operatorsTreeView.SelectedNode;
+      if((e.KeyCode == Keys.Delete) && (node != null) && (node.Parent != null))
+        RemoveTreeNode(operatorsTreeView.SelectedNode);
+      if((e.KeyCode == Keys.F2) && (node != null))
+        node.BeginEdit();
+    }
+    #endregion
+
+
+    #region Mouse Events
+    private void operatorsTreeView_MouseDown(object sender, MouseEventArgs e) {
+      if(e.Button != MouseButtons.Right) return;
+      TreeNode clickedNode = operatorsTreeView.GetNodeAt(e.X, e.Y);
+      if(clickedNode != null) {
+        operatorsTreeView.SelectedNode = clickedNode;
+        operatorsTreeView.Refresh();
+      }
+    }
+    #endregion
+
+    #region Drag and Drop Events
+    private void operatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = (TreeNode)e.Item;
+      IOperator op = node.Tag as IOperator;
+      if(op != null) {
+        long opId = ((DatabaseOperatorLibrary)OperatorLibrary).GetId(op);
+        OperatorLink link = new OperatorLink(opId, op);
+        DataObject data = new DataObject();
+        data.SetData("IOperator", link);
+        data.SetData("DragSource", operatorsTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    private void operatorsTreeView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if(e.Data.GetDataPresent("IOperator")) {
+        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = operatorsTreeView.GetNodeAt(p);
+        if((node != null) && (node.Tag is IOperatorGroup))
+          e.Effect = DragDropEffects.Copy;
+      }
+    }
+    private void operatorsTreeView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if(e.Data.GetDataPresent("IOperator")) {
+        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = operatorsTreeView.GetNodeAt(p);
+        if((node != null) && (node.Tag is IOperatorGroup))
+          e.Effect = DragDropEffects.Copy;
+      }
+    }
+    private void operatorsTreeView_DragDrop(object sender, DragEventArgs e) {
+      if(e.Effect != DragDropEffects.None) {
+        if(e.Data.GetDataPresent("IOperator")) {
+          IOperator op = (IOperator)e.Data.GetData("IOperator");
+          Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
+          TreeNode node = operatorsTreeView.GetNodeAt(p);
+          if(node != null) {
+            op = (IOperator)op.Clone();
+
+            while(op.SubOperators.Count > 0)
+              op.RemoveSubOperator(0);
+
+            IOperatorGroup group = (IOperatorGroup)node.Tag;
+            group.AddOperator(op);
+            node.Nodes.Add(CreateTreeNode(op));
+            operatorsTreeView.Sort();
+            EnableDisableButtons();
+          }
+        }
+      }
+    }
+    #endregion
+
+    private void saveButton_Click(object sender, EventArgs e) {
+      ((DatabaseOperatorLibrary)OperatorLibrary).Save();
+    }
+
+    private void refreshButton_Click(object sender, EventArgs e) {
+      ((DatabaseOperatorLibrary)OperatorLibrary).Restore();
+      UpdateControls();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/DatabaseOperatorLibraryView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/HeuristicLab.CEDMA.Core.csproj	(revision 1270)
@@ -0,0 +1,170 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C27DDF6C-84DF-45EF-B82F-57A28DD51166}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.Core-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Agent.cs" />
+    <Compile Include="AgentList.cs" />
+    <Compile Include="Console.cs" />
+    <Compile Include="ConsoleEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ResultTable.cs" />
+    <Compile Include="ResultExporter.cs" />
+    <Compile Include="DatabaseOperatorLibrary.cs" />
+    <Compile Include="DatabaseOperatorLibraryView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DatabaseOperatorLibraryView.Designer.cs">
+      <DependentUpon>DatabaseOperatorLibraryView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorLink.cs" />
+    <Compile Include="OperatorLinkPatcher.cs" />
+    <Compile Include="Result.cs" />
+    <Compile Include="IResult.cs" />
+    <Compile Include="HeuristicLabCedmaCorePlugin.cs" />
+    <Compile Include="IAgent.cs" />
+    <Compile Include="IAgentList.cs" />
+    <Compile Include="IDatabaseItem.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="AgentListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AgentListView.Designer.cs">
+      <DependentUpon>AgentListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AgentView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AgentView.Designer.cs">
+      <DependentUpon>AgentView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.Charting\HeuristicLab.CEDMA.Charting.csproj">
+      <Project>{1BF17271-5350-476A-8F6D-FC74FA3E82CA}</Project>
+      <Name>HeuristicLab.CEDMA.Charting</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
+      <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
+      <Name>HeuristicLab.CEDMA.DB.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AgentListView.resx">
+      <DependentUpon>AgentListView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AgentView.resx">
+      <DependentUpon>AgentView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConsoleEditor.resx">
+      <DependentUpon>ConsoleEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DatabaseOperatorLibraryView.resx">
+      <DependentUpon>DatabaseOperatorLibraryView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/HeuristicLabCedmaCorePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/HeuristicLabCedmaCorePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/HeuristicLabCedmaCorePlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Core {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Core-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Core-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.Charting-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabCedmaCorePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IAgent.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IAgent.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IAgent.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IAgent : IDatabaseItem, IViewable {
+    string Name { get; }
+    ProcessStatus Status { get; }
+    IOperatorGraph OperatorGraph { get; }
+    ICollection<IAgent> SubAgents { get; }
+    ICollection<IResult> Results { get; }
+    bool Terminated { get; }
+    void Save();
+    void Start();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IAgentList.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IAgentList.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IAgentList.cs	(revision 1270)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IAgentList : IItem, IEnumerable<IAgent> {
+    void CreateAgent();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IDatabaseItem.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IDatabaseItem.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IDatabaseItem.cs	(revision 1270)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IDatabaseItem {
+    IDatabase Database { get; set; }
+    long Id { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IResult.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IResult.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/IResult.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public interface IResult : IDatabaseItem, IViewable {
+    IItem Item { get; }
+    string Summary { get; }
+    string Description { get; }
+    ICollection<IResult> SubResults { get; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/OperatorLink.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/OperatorLink.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/OperatorLink.cs	(revision 1270)
@@ -0,0 +1,98 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class OperatorLink : OperatorBase {
+    private long id;
+    public long Id {
+      get { return id; }
+    }
+
+    public IDatabase Database { get; set; }
+
+    private IOperator myOperator;
+    public IOperator Operator {
+      get { return myOperator; }
+      set { myOperator = value; }
+    }
+
+    public OperatorLink() : base() { } // for cloning and persistence
+
+    public OperatorLink(long id, IOperator op)
+      : base() {
+      this.id = id;
+      this.myOperator = op;
+      Name = myOperator.Name;
+    }
+
+    public override void Abort() {
+      throw new NotSupportedException();
+    }
+
+    public override IOperation Apply(IScope scope) {
+      throw new NotSupportedException();
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OperatorLink clone = (OperatorLink)base.Clone(clonedObjects);
+      clone.id = id;
+      clone.myOperator = Operator;
+      return clone;
+    }
+
+    public override IView CreateView() {
+      if(Operator == null) {
+        if(Database == null) return null;
+        OperatorEntry targetEntry = Database.GetOperator(Id);
+        IOperator target = (IOperator)PersistenceManager.RestoreFromGZip(targetEntry.RawData);
+        OperatorLinkPatcher.LinkDatabase(target, Database);
+        Operator = target;
+      }
+      return myOperator.CreateView();
+    }
+
+    public override IOperation Execute(IScope scope) {
+      throw new NotSupportedException();
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute idAttr = document.CreateAttribute("OperatorId");
+      idAttr.Value = id.ToString();
+      node.Attributes.Append(idAttr);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      id = long.Parse(node.Attributes["OperatorId"].Value);
+      base.Populate(node, restoredObjects);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/OperatorLinkPatcher.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/OperatorLinkPatcher.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/OperatorLinkPatcher.cs	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.IO;
+using System.IO.Compression;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public static class OperatorLinkPatcher {
+    public static void LinkDatabase(IOperatorGraph opGraph, IDatabase database) {
+      foreach(IOperator op in opGraph.Operators) {
+        LinkDatabase(op, database);
+      }
+    }
+
+    public static void LinkDatabase(IOperator op, IDatabase database) {
+      if(op is OperatorLink) {
+        OperatorLink link = op as OperatorLink;
+        link.Database = database;
+      } else if(op is CombinedOperator) {
+        LinkDatabase(((CombinedOperator)op).OperatorGraph, database);
+      }
+      // also patch operator links contained (indirectly) in variables
+      foreach(VariableInfo varInfo in op.VariableInfos) {
+        IVariable var = op.GetVariable(varInfo.ActualName);
+        if(var != null && var.Value is IOperatorGraph) {
+          LinkDatabase((IOperatorGraph)var.Value, database);
+        } else if(var != null && var.Value is IOperator) {
+          LinkDatabase((IOperator)var.Value, database);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("5ca5c9d0-1d2f-4845-a919-3d1ba02d6e04")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Result.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Result.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/Result.cs	(revision 1270)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class Result : IResult {
+    public IDatabase Database { get; set; }
+    public long Id { get; set; }
+    public string Summary { get; set; }
+    public string Description { get; set; }
+    private IItem item;
+    public IItem Item {
+      get {
+        if(item == null) {
+          byte[] rawData = Database.GetResultRawData(Id);
+          item = (IItem)PersistenceManager.RestoreFromGZip(rawData);
+        }
+        return item;
+      }
+    }
+    public Result()
+      : base() {
+    }
+
+    public Result(IDatabase database, long id)
+      : this() {
+      Database = database;
+      Id = id;
+    }
+
+
+    public ICollection<IResult> SubResults {
+      get {
+        List<IResult> results = new List<IResult>();
+        foreach(ResultEntry entry in Database.GetSubResults(Id)) {
+          Result result = new Result(Database, entry.Id);
+          result.Summary = entry.Summary;
+          result.Description = entry.Description;
+          results.Add(result);
+        }
+        return results;
+      }
+    } 
+
+    public IView CreateView() {
+      return Item.CreateView();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ResultExporter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ResultExporter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ResultExporter.cs	(revision 1270)
@@ -0,0 +1,60 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.IO;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class ResultExporter {
+    internal void Export(IAgent agent, ResultTable t) {
+      foreach(IResult r in agent.Results) {
+        Export(r, t);
+      }
+      foreach(IAgent a in agent.SubAgents) {
+        Export(a, t);
+      }
+    }
+
+    private void Export(IResult result, ResultTable t) {
+      Export(result.Item, t);
+      foreach(IResult subResult in result.SubResults) {
+        Export(subResult, t);
+      }
+    }
+
+    private void Export(IItem item, ResultTable t) {
+      if(item is IScope) {
+        IScope scope = item as IScope;
+        ResultRow row = new ResultRow();
+        foreach(IVariable variable in scope.Variables) {
+          row.AddAttribute(variable.Name, variable.Value.ToString());
+        }
+        t.AddRow(row);
+      } 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ResultTable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ResultTable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Core/ResultTable.cs	(revision 1270)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.IO;
+
+namespace HeuristicLab.CEDMA.Core {
+  public class ResultRow {
+    private Dictionary<string, string> attributes = new Dictionary<string, string>();
+
+    public void AddAttribute(string name, string value) {
+      attributes[name] = value;
+    }
+
+    public ICollection<string> AttributeNames {
+      get { return attributes.Keys; }
+    }
+
+    public string AttributeValue(string name) {
+      string value = "";
+      attributes.TryGetValue(name, out value);
+      return value;
+    }
+  }
+
+  public class ResultTable {
+
+    private List<ResultRow> rows = new List<ResultRow>();
+    private List<string> allAttributeNames = new List<string>();
+
+    public void AddRow(ResultRow r) {
+      rows.Add(r);
+      foreach(string name in r.AttributeNames) if(!allAttributeNames.Contains(name)) allAttributeNames.Add(name);
+    }
+
+    public void Write(Stream s) {
+      using(StreamWriter w = new StreamWriter(s)) {
+        foreach(string attributeName in allAttributeNames) w.Write(attributeName + ";");
+        w.WriteLine();
+        foreach(ResultRow r in rows) {
+          foreach(string attributeName in allAttributeNames) {
+            w.Write(r.AttributeValue(attributeName) + ";"); // we should probably escape the ';' if it occures in the value
+          }
+          w.WriteLine();
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/AgentEntry.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/AgentEntry.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/AgentEntry.cs	(revision 1270)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class AgentEntry {
+    [DataMember]
+    public long Id { get; set; }
+    [DataMember]
+    public long? ParentAgentId { get; set; }
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public DateTime CreationTime { get; set; }
+    [DataMember]
+    public ProcessStatus Status { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Entity.cs	(revision 1270)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class Entity : Resource {
+
+    public Entity(string uri) {
+      this.Uri = uri;
+    }
+
+    public override bool Equals(object obj) {
+      if(this == obj) return true;
+      Entity other = obj as Entity;
+      if(other == null) return false;
+      else return other.Uri.Equals(this.Uri);
+    }
+
+    public override int GetHashCode() {
+      return Uri.GetHashCode();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLab.CEDMA.DB.Interfaces.csproj	(revision 1270)
@@ -0,0 +1,112 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4F9BB789-D561-436B-B226-2BF44B7D0804}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.DB.Interfaces</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.DB.Interfaces-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AgentEntry.cs" />
+    <Compile Include="SelectFilter.cs" />
+    <Compile Include="SerializedLiteral.cs" />
+    <Compile Include="Literal.cs" />
+    <Compile Include="Entity.cs" />
+    <Compile Include="Resource.cs" />
+    <Compile Include="Statement.cs" />
+    <Compile Include="IStore.cs" />
+    <Compile Include="OperatorEntry.cs" />
+    <Compile Include="ProcessStatus.cs" />
+    <Compile Include="ResultEntry.cs" />
+    <Compile Include="HeuristicLabCedmaDbInterfacesPlugin.cs" />
+    <Compile Include="IDatabase.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLabCedmaDbInterfacesPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLabCedmaDbInterfacesPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/HeuristicLabCedmaDbInterfacesPlugin.cs	(revision 1270)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.DB.Interfaces-3.2.dll", Filetype = PluginFileType.Assembly)]
+  public class HeuristicLabCedmaDbInterfacesPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/IDatabase.cs	(revision 1270)
@@ -0,0 +1,85 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using System.Data;
+using System.Linq.Expressions;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [ServiceContract(Namespace = "http://HeuristicLab.CEDMA.DB")]
+  public interface IDatabase {
+    [OperationContract]
+    long InsertAgent(long? parentAgentId, string name, byte[] rawData);
+
+    [OperationContract(Name = "UpdateAgentName")]
+    void UpdateAgent(long id, string name);
+
+    [OperationContract(Name = "UpdateAgentStatus")]
+    void UpdateAgent(long id, ProcessStatus status);
+
+    [OperationContract(Name = "UpdateAgentData")]
+    void UpdateAgent(long id, byte[] rawData);
+
+    [OperationContract]
+    long InsertResult(long agentId, string summary, string description, byte[] rawData);
+
+    [OperationContract]
+    long InsertSubResult(long resultId, string summary, string description, byte[] rawData);
+
+    [OperationContract]
+    long InsertOperator(string name, byte[] rawData);
+
+    [OperationContract]
+    void UpdateOperator(long id, string name, byte[] rawData);
+
+    [OperationContract]
+    void DeleteOperator(long id);
+
+    // should be replaced by more powerful querying interface (LINQ provider?)
+    [OperationContract]
+    ICollection<AgentEntry> GetAgents();
+
+    [OperationContract]
+    ICollection<AgentEntry> GetSubAgents(long parentAgentId);
+
+    [OperationContract]
+    byte[] GetAgentRawData(long id);
+
+    [OperationContract]
+    ICollection<ResultEntry> GetResults(long agentId);
+
+    [OperationContract]
+    ICollection<ResultEntry> GetSubResults(long parentResultId);
+
+    [OperationContract]
+    byte[] GetResultRawData(long id);
+
+    [OperationContract]
+    ICollection<OperatorEntry> GetOperators();
+
+    [OperationContract]
+    OperatorEntry GetOperator(long id);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/IStore.cs	(revision 1270)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using System.Data;
+using System.Linq.Expressions;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [ServiceContract(Namespace = "http://HeuristicLab.CEDMA.DB")]
+  public interface IStore {
+    [OperationContract]
+    void Add(Statement statement);
+
+    [OperationContract]
+    IList<Statement> Select(Statement template);
+
+    [OperationContract(Name = "SelectFiltered")]
+    IList<Statement> Select(SelectFilter filter);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Literal.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Literal.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Literal.cs	(revision 1270)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class Literal: Resource {
+    [DataMember]
+    public object Value { get; set; }
+
+    public Literal(object value) {
+      Value = value;
+    }
+
+    public override bool Equals(object obj) {
+      if(this == obj) return true;
+      Literal other = obj as Literal;
+      if(obj == null) return false;
+      else return other.Value.Equals(this.Value);
+    }
+
+    public override int GetHashCode() {
+      return Value.GetHashCode();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/OperatorEntry.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/OperatorEntry.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/OperatorEntry.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class OperatorEntry {
+    [DataMember]
+    public long Id { get; set; }
+    [DataMember]
+    public string Name { get; set; }
+    [DataMember]
+    public byte[] RawData { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/ProcessStatus.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/ProcessStatus.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/ProcessStatus.cs	(revision 1270)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  public enum ProcessStatus { Unknown, Active, Finished, Error, Waiting}
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.DB.Interfaces")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("68c5c33b-5dca-4411-a1af-fc2cbbf11b5b")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Resource.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Resource.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Resource.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]  
+  public abstract class Resource {
+    [DataMember]
+    public string Uri { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/ResultEntry.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/ResultEntry.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/ResultEntry.cs	(revision 1270)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class ResultEntry {
+    [DataMember]
+    public long Id { get; set; }
+    [DataMember]
+    public long? AgentId { get; set; }
+    [DataMember]
+    public long? ParentResultId { get; set; }
+    [DataMember]
+    public string Summary { get; set; }
+    [DataMember]
+    public string Description { get; set; }
+    [DataMember]
+    public DateTime CreationTime { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/SelectFilter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/SelectFilter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/SelectFilter.cs	(revision 1270)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  [KnownType(typeof(Literal))]
+  [KnownType(typeof(Entity))]
+  [KnownType(typeof(SerializedLiteral))]
+  public class SelectFilter {
+    [DataMember]
+    public Entity[] Subjects { get; set; }
+    [DataMember]
+    public Entity[] Predicates { get; set; }
+    [DataMember]
+    public Resource[] Properties { get; set; }
+
+    public SelectFilter(Entity[] subj, Entity[] pred, Resource[] prop) {
+      Subjects = subj;
+      Predicates = pred;
+      Properties = prop;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/SerializedLiteral.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/SerializedLiteral.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/SerializedLiteral.cs	(revision 1270)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  public class SerializedLiteral: Resource {
+    [DataMember]
+    public string RawData { get; set; }
+
+    public SerializedLiteral(string rawData) {
+      RawData = rawData;
+    }
+
+    public override bool Equals(object obj) {
+      if(this == obj) return true;
+      SerializedLiteral other = obj as SerializedLiteral;
+      if(other == null) return false;
+      else return other.RawData.Equals(this.RawData);
+    }
+
+    public override int GetHashCode() {
+      return RawData.GetHashCode();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB.Interfaces/Statement.cs	(revision 1270)
@@ -0,0 +1,48 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.CEDMA.DB.Interfaces {
+  [DataContract]
+  [KnownType(typeof(Literal))]
+  [KnownType(typeof(Entity))]
+  [KnownType(typeof(SerializedLiteral))]
+  public class Statement {
+    [DataMember]
+    public Entity Subject { get; set; }
+    [DataMember]
+    public Entity Predicate { get; set; }
+    [DataMember]
+    public Resource Property { get; set; }
+
+    public Statement(Entity subj, Entity pred, Resource prop) {
+      Subject = subj;
+      Predicate = pred;
+      Property = prop;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Agent.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Agent.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Agent.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq.Mapping;
+using HeuristicLab.CEDMA.DB.Interfaces;
+
+namespace HeuristicLab.CEDMA.DB {
+  [Table(Name = "AgentTable")]
+  class Agent : IAgent {
+    [Column(IsPrimaryKey = true)]
+    public int ID;
+    [Column]
+    public string Name;
+    [Column]
+    public AgentStatus Status;
+    [Column]
+    public byte[] RawData;
+
+    string IAgent.Name {
+      get { return this.Name; }
+    }
+
+    AgentStatus IAgent.Status {
+      get { return this.Status; }
+    }
+
+    byte[] IAgent.RawData {
+      get { return this.RawData; }
+    }
+
+    public void Save() {
+      throw new NotImplementedException();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Database.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Database.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Database.cs	(revision 1270)
@@ -0,0 +1,622 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using System.Data;
+using System.Data.SQLite;
+using System.Data.Common;
+using System.Threading;
+
+namespace HeuristicLab.CEDMA.DB {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
+  public class Database : IDatabase {
+    private string connectionString;
+    private ReaderWriterLockSlim rwLock;
+    public Database(string connectionString) {
+      this.connectionString = connectionString;
+      rwLock = new ReaderWriterLockSlim();
+    }
+
+    #region create empty database
+    public void CreateNew() {
+      rwLock.EnterWriteLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand cmd = cnn.CreateCommand()) {
+              cmd.CommandText = "CREATE TABLE Project (ID integer primary key autoincrement, Name text, Description text, CreationTime DateTime)";
+              cmd.Transaction = t;
+              cmd.ExecuteNonQuery();
+            }
+            using(DbCommand cmd = cnn.CreateCommand()) {
+              cmd.CommandText = "CREATE TABLE Agent (ID integer primary key autoincrement, ProjectId integer, ParentAgentId integer, Name text, Status text default " + ProcessStatus.Unknown + ", CreationTime DateTime, RawData Blob)";
+              cmd.Transaction = t;
+              cmd.ExecuteNonQuery();
+            }
+            using(DbCommand cmd = cnn.CreateCommand()) {
+              cmd.CommandText = "CREATE TABLE Result (ID integer primary key autoincrement, AgentId integer, ParentResultId integer, Summary text, Description text, CreationTime DateTime, RawData Blob)";
+              cmd.Transaction = t;
+              cmd.ExecuteNonQuery();
+            }
+            using(DbCommand cmd = cnn.CreateCommand()) {
+              cmd.CommandText = "CREATE TABLE Operator (ID integer primary key autoincrement, Name text, RawData Blob)";
+              cmd.Transaction = t;
+              cmd.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+    #endregion
+
+    #region insert agent/result/sub-result
+    public long InsertAgent(long? parentAgentId, string name, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          long id;
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Insert into Agent (Name, ParentAgentId, CreationTime, RawData) values (@Name, @ParentAgentId, @CreationTime, @RawData); select last_insert_rowid()";
+              DbParameter nameParam = c.CreateParameter();
+              nameParam.ParameterName = "@Name";
+              nameParam.Value = name;
+              c.Parameters.Add(nameParam);
+              DbParameter parentParam = c.CreateParameter();
+              parentParam.ParameterName = "@ParentAgentId";
+              parentParam.Value = parentAgentId;
+              c.Parameters.Add(parentParam);
+              DbParameter creationTimeParam = c.CreateParameter();
+              creationTimeParam.ParameterName = "@CreationTime";
+              creationTimeParam.Value = DateTime.Now;
+              c.Parameters.Add(creationTimeParam);
+              DbParameter dataParam = c.CreateParameter();
+              dataParam.ParameterName = "@RawData";
+              dataParam.Value = rawData;
+              c.Parameters.Add(dataParam);
+              id = (long)c.ExecuteScalar();
+            }
+            t.Commit();
+            return id;
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    public long InsertResult(long agentId, string summary, string description, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          long id;
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Insert into Result (AgentId, CreationTime, Summary, Description, RawData) values (@AgentId, @CreationTime, @Summary, @Description, @RawData); select last_insert_rowid()";
+              DbParameter agentIdParam = c.CreateParameter();
+              agentIdParam.ParameterName = "@AgentId";
+              agentIdParam.Value = agentId;
+              c.Parameters.Add(agentIdParam);
+              DbParameter creationParam = c.CreateParameter();
+              creationParam.ParameterName = "@CreationTime";
+              DateTime now = DateTime.Now;
+              creationParam.Value = now;
+              c.Parameters.Add(creationParam);
+              DbParameter summaryParam = c.CreateParameter();
+              summaryParam.ParameterName = "@Summary";
+              summaryParam.Value = summary;
+              c.Parameters.Add(summaryParam);
+              DbParameter descParam = c.CreateParameter();
+              descParam.ParameterName = "@Description";
+              descParam.Value = description;
+              c.Parameters.Add(descParam);
+              DbParameter rawDataParam = c.CreateParameter();
+              rawDataParam.ParameterName = "@RawData";
+              rawDataParam.Value = rawData;
+              c.Parameters.Add(rawDataParam);
+              id = (long)c.ExecuteScalar();
+            }
+            t.Commit();
+            return id;
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    public long InsertSubResult(long resultId, string summary, string description, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          long id;
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Insert into Result (ParentResultId, CreationTime, Summary, Description, RawData) values (@ParentResultId, @CreationTime, @Summary, @Description, @RawData); select last_insert_rowid()";
+              DbParameter resultIdParam = c.CreateParameter();
+              resultIdParam.ParameterName = "@ParentResultId";
+              resultIdParam.Value = resultId;
+              c.Parameters.Add(resultIdParam);
+              DbParameter creationParam = c.CreateParameter();
+              creationParam.ParameterName = "@CreationTime";
+              DateTime now = DateTime.Now;
+              creationParam.Value = now;
+              c.Parameters.Add(creationParam);
+              DbParameter summaryParam = c.CreateParameter();
+              summaryParam.ParameterName = "@Summary";
+              summaryParam.Value = summary;
+              c.Parameters.Add(summaryParam);
+              DbParameter descParam = c.CreateParameter();
+              descParam.ParameterName = "@Description";
+              descParam.Value = description;
+              c.Parameters.Add(descParam);
+              DbParameter rawDataParam = c.CreateParameter();
+              rawDataParam.ParameterName = "@RawData";
+              rawDataParam.Value = rawData;
+              c.Parameters.Add(rawDataParam);
+              id = (long)c.ExecuteScalar();
+            }
+            t.Commit();
+            return id;
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    public long InsertOperator(string name, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          long id;
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Insert into Operator (Name, RawData) values (@Name, @RawData); select last_insert_rowid()";
+              DbParameter nameParam = c.CreateParameter();
+              nameParam.ParameterName = "@Name";
+              nameParam.Value = name;
+              c.Parameters.Add(nameParam);
+              DbParameter dataParam = c.CreateParameter();
+              dataParam.ParameterName = "@RawData";
+              dataParam.Value = rawData;
+              c.Parameters.Add(dataParam);
+              id = (long)c.ExecuteScalar();
+            }
+            t.Commit();
+            return id;
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+    #endregion
+
+    #region update agent, run, operator
+    public void UpdateAgent(long id, string name) {
+      rwLock.EnterWriteLock();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(SQLiteTransaction t = cnn.BeginTransaction()) {
+            using(SQLiteCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Update Agent set Name=@Name where id=@Id";
+              DbParameter nameParam = c.CreateParameter();
+              DbParameter idParam = c.CreateParameter();
+              nameParam.ParameterName = "@Name";
+              nameParam.Value = name;
+              idParam.ParameterName = "@Id";
+              idParam.Value = id;
+              c.Parameters.Add(nameParam);
+              c.Parameters.Add(idParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    public void UpdateAgent(long id, ProcessStatus status) {
+      rwLock.EnterWriteLock();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(SQLiteTransaction t = cnn.BeginTransaction()) {
+            using(SQLiteCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Update Agent set Status=@Status where id=@Id";
+              DbParameter statusParam = c.CreateParameter();
+              DbParameter idParam = c.CreateParameter();
+              statusParam.ParameterName = "@Status";
+              statusParam.Value = status.ToString();
+              idParam.ParameterName = "@Id";
+              idParam.Value = id;
+              c.Parameters.Add(statusParam);
+              c.Parameters.Add(idParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    public void UpdateAgent(long id, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(SQLiteTransaction t = cnn.BeginTransaction()) {
+            using(SQLiteCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Update Agent set RawData=@RawData where id=@Id";
+              DbParameter rawDataParam = c.CreateParameter();
+              DbParameter idParam = c.CreateParameter();
+              rawDataParam.ParameterName = "@RawData";
+              rawDataParam.Value = rawData;
+              idParam.ParameterName = "@Id";
+              idParam.Value = id;
+              c.Parameters.Add(rawDataParam);
+              c.Parameters.Add(idParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    public void UpdateOperator(long id, string name, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(SQLiteTransaction t = cnn.BeginTransaction()) {
+            using(SQLiteCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Update Operator set Name=@Name, RawData=@RawData where id=@Id";
+              DbParameter rawDataParam = c.CreateParameter();
+              DbParameter nameParam = c.CreateParameter();
+              DbParameter idParam = c.CreateParameter();
+              rawDataParam.ParameterName = "@RawData";
+              rawDataParam.Value = rawData;
+              idParam.ParameterName = "@Id";
+              idParam.Value = id;
+              nameParam.ParameterName = "@Name";
+              nameParam.Value = name;
+              c.Parameters.Add(rawDataParam);
+              c.Parameters.Add(nameParam);
+              c.Parameters.Add(idParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    #endregion
+
+    #region get agent/result/sub-result/operator
+
+    public ICollection<AgentEntry> GetAgents(ProcessStatus status) {
+      rwLock.EnterReadLock();
+      List<AgentEntry> agents = new List<AgentEntry>();
+      try {
+        using(SQLiteConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          SQLiteCommand c = cnn.CreateCommand();
+          c.CommandText = "Select id, name from Agent where Status=@Status";
+          DbParameter statusParameter = c.CreateParameter();
+          statusParameter.ParameterName = "@Status";
+          statusParameter.Value = status.ToString();
+          c.Parameters.Add(statusParameter);
+          SQLiteDataReader r = c.ExecuteReader();
+          while(r.Read()) {
+            AgentEntry agent = new AgentEntry();
+            agent.ParentAgentId = null;
+            agent.Status = status;
+            agent.Id = r.GetInt32(0);
+            agent.Name = r.IsDBNull(1) ? "" : r.GetString(1);
+            agents.Add(agent);
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return agents;
+    }
+
+    public ICollection<AgentEntry> GetAgents() {
+      rwLock.EnterReadLock();
+      List<AgentEntry> agents = new List<AgentEntry>();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select id, name, status from Agent where ParentAgentId isnull";
+            using(DbDataReader r = c.ExecuteReader()) {
+              while(r.Read()) {
+                AgentEntry agent = new AgentEntry();
+                agent.ParentAgentId = null;
+                agent.Id = r.GetInt32(0);
+                agent.Name = r.IsDBNull(1) ? "-" : r.GetString(1);
+                agent.Status = (ProcessStatus)Enum.Parse(typeof(ProcessStatus), r.GetString(2));
+                agents.Add(agent);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return agents;
+    }
+
+    public ICollection<AgentEntry> GetSubAgents(long parentAgentId) {
+      rwLock.EnterReadLock();
+      List<AgentEntry> agents = new List<AgentEntry>();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select id, name, status from Agent where ParentAgentId=@ParentAgentId";
+            DbParameter parentParameter = c.CreateParameter();
+            parentParameter.ParameterName = "@ParentAgentId";
+            parentParameter.Value = parentAgentId;
+            c.Parameters.Add(parentParameter);
+
+            using(DbDataReader r = c.ExecuteReader()) {
+              while(r.Read()) {
+                AgentEntry agent = new AgentEntry();
+                agent.ParentAgentId = parentAgentId;
+                agent.Id = r.GetInt32(0);
+                agent.Name = r.IsDBNull(1) ? "-" : r.GetString(1);
+                agent.Status = (ProcessStatus)Enum.Parse(typeof(ProcessStatus), r.GetString(2));
+                agents.Add(agent);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return agents;
+    }
+
+    public byte[] GetAgentRawData(long id) {
+      rwLock.EnterReadLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select RawData from Agent where Id=@Id";
+            DbParameter idParameter = c.CreateParameter();
+            idParameter.ParameterName = "@Id";
+            idParameter.Value = id;
+            c.Parameters.Add(idParameter);
+            using(DbDataReader r = c.ExecuteReader()) {
+              if(r.HasRows) {
+                r.Read();
+                return (byte[])r.GetValue(0);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return null; // agent with the given id not found
+    }
+
+    public ICollection<ResultEntry> GetResults(long agentId) {
+      List<ResultEntry> results = new List<ResultEntry>();
+      rwLock.EnterReadLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select Id, CreationTime, Summary, Description from Result where AgentId=@AgentId";
+            DbParameter agentParam = c.CreateParameter();
+            agentParam.ParameterName = "@AgentId";
+            agentParam.Value = agentId;
+            c.Parameters.Add(agentParam);
+            using(DbDataReader r = c.ExecuteReader()) {
+              while(r.Read()) {
+                ResultEntry result = new ResultEntry();
+                result.AgentId = agentId;
+                result.Id = r.GetInt32(0);
+                result.CreationTime = r.GetDateTime(1);
+                result.Summary = r.GetString(2);
+                result.Description = r.GetString(3);
+                results.Add(result);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return results;
+    }
+
+    public ICollection<ResultEntry> GetSubResults(long resultId) {
+      List<ResultEntry> results = new List<ResultEntry>();
+      rwLock.EnterReadLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select Id, CreationTime, Summary, Description from Result where ParentResultId=@ParentResultId";
+            DbParameter parentParam = c.CreateParameter();
+            parentParam.ParameterName = "@ParentResultId";
+            parentParam.Value = resultId;
+            c.Parameters.Add(parentParam);
+            using(DbDataReader r = c.ExecuteReader()) {
+              while(r.Read()) {
+                ResultEntry result = new ResultEntry();
+                result.ParentResultId = resultId;
+                result.Id = r.GetInt32(0);
+                result.CreationTime = r.GetDateTime(1);
+                result.Summary = r.GetString(2);
+                result.Description = r.GetString(3);
+                results.Add(result);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return results;
+    }
+
+    public byte[] GetResultRawData(long id) {
+      rwLock.EnterReadLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select RawData from Result where Id=@Id";
+            DbParameter idParameter = c.CreateParameter();
+            idParameter.ParameterName = "@Id";
+            idParameter.Value = id;
+            c.Parameters.Add(idParameter);
+            using(DbDataReader r = c.ExecuteReader()) {
+              if(r.HasRows) {
+                r.Read();
+                return (byte[])r.GetValue(0);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return null; // result with the given id not found
+    }
+
+    public ICollection<OperatorEntry> GetOperators() {
+      rwLock.EnterReadLock();
+      List<OperatorEntry> operators = new List<OperatorEntry>();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select id, name, rawdata from Operator";
+            using(DbDataReader r = c.ExecuteReader()) {
+              while(r.Read()) {
+                OperatorEntry op = new OperatorEntry();
+                op.Id = r.GetInt32(0);
+                op.Name = r.IsDBNull(1) ? "-" : r.GetString(1);
+                op.RawData = (byte[])r.GetValue(2);
+                operators.Add(op);
+              }
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return operators;
+    }
+    public OperatorEntry GetOperator(long id) {
+      rwLock.EnterReadLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbCommand c = cnn.CreateCommand()) {
+            c.CommandText = "Select id, name, rawdata from Operator where id=@Id";
+            DbParameter idParam = c.CreateParameter();
+            idParam.ParameterName = "@Id";
+            idParam.Value = id;
+            c.Parameters.Add(idParam);
+            using(DbDataReader r = c.ExecuteReader()) {
+              r.Read();
+              OperatorEntry op = new OperatorEntry();
+              op.Id = r.GetInt32(0);
+              op.Name = r.IsDBNull(1) ? "-" : r.GetString(1);
+              op.RawData = (byte[])r.GetValue(2);
+              return op;
+            }
+          }
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+    }
+    #endregion
+
+    #region delete operator
+    public void DeleteOperator(long id) {
+      rwLock.EnterWriteLock();
+      try {
+        using(DbConnection cnn = new SQLiteConnection(connectionString)) {
+          cnn.Open();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Delete from Operator where id=@Id";
+              DbParameter idParam = c.CreateParameter();
+              idParam.ParameterName = "@Id";
+              idParam.Value = id;
+              c.Parameters.Add(idParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/HeuristicLab.CEDMA.DB.csproj	(revision 1270)
@@ -0,0 +1,126 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.DB</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.DB-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>false</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="SemWeb, Version=0.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.SQLite, Version=1.0.56.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=x86">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\HeuristicLab.SQLite\System.Data.SQLite.DLL</HintPath>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Store.cs" />
+    <Compile Include="Database.cs" />
+    <Compile Include="HeuristicLabCedmaDbPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
+      <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
+      <Name>HeuristicLab.CEDMA.DB.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="SemWeb.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/HeuristicLabCedmaDbPlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.DB {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.DB-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.DB-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.SQLite-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  public class HeuristicLabCedmaDbPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.DB")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("58cd6e79-3f9b-4307-944e-b858e8957bbf")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Store.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Store.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.DB/Store.cs	(revision 1270)
@@ -0,0 +1,149 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Linq;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using System.Data;
+using System.Data.SQLite;
+using System.Data.Common;
+using System.Threading;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using System.IO;
+
+namespace HeuristicLab.CEDMA.DB {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
+  public class Store : IStore {
+    private string connectionString;
+    private SemWeb.Store store;
+    private object bigLock = new object();
+    public Store(string connectionString) {
+      lock(bigLock) {
+        this.connectionString = connectionString;
+        store = SemWeb.Store.Create(connectionString);
+      }
+    }
+
+    public void Add(Statement statement) {
+      lock(bigLock) {
+        store.Add(Translate(statement));
+      }
+    }
+
+    public IList<Statement> Select(Statement template) {
+      SemWeb.SelectResult result;
+      lock(bigLock) {
+        result = store.Select(Translate(template));
+      }
+      List<Statement> r = new List<Statement>();
+      foreach(SemWeb.Statement resultStatement in result) {
+        r.Add(Translate(resultStatement));
+      }
+      return r;
+    }
+
+    public IList<Statement> Select(SelectFilter filter) {
+      SemWeb.SelectResult result;
+      lock(bigLock) {
+        result = store.Select(Translate(filter));
+      }
+      List<Statement> r = new List<Statement>();
+      foreach(SemWeb.Statement resultStatement in result) {
+        r.Add(Translate(resultStatement));
+      }
+      return r;
+    }
+
+    private SemWeb.SelectFilter Translate(SelectFilter filter) {
+      SemWeb.SelectFilter f = new SemWeb.SelectFilter();
+      f.Subjects = Array.ConvertAll(filter.Subjects, s => Translate(s));
+      f.Predicates = Array.ConvertAll(filter.Predicates, p => Translate(p));
+      f.Objects = Array.ConvertAll(filter.Properties, prop => Translate(prop));
+      return f;
+    }
+
+    private SemWeb.Entity Translate(Entity e) {
+      return e.Uri == null ? null : new SemWeb.Entity(e.Uri);
+    }
+
+    private SemWeb.Resource Translate(Resource prop) {
+      if(prop is Literal) {
+        return TranslateLiteral((Literal)prop);
+      } else if(prop is SerializedLiteral) {
+        return TranslateLiteral((SerializedLiteral)prop);
+      } else {
+        return Translate((Entity)prop);
+      }
+    }
+
+    private Statement Translate(SemWeb.Statement statement) {
+      if(statement.Object is SemWeb.Literal) {
+        return new Statement(
+          new Entity(statement.Subject.Uri),
+          new Entity(statement.Predicate.Uri),
+          TranslateLiteral((SemWeb.Literal)statement.Object));
+      } else {
+        return new Statement(
+          new Entity(statement.Subject.Uri),
+          new Entity(statement.Predicate.Uri),
+          new Entity(((SemWeb.Entity)statement.Object).Uri));
+      }
+    }
+
+    private SemWeb.Statement Translate(Statement statement) {
+      return new SemWeb.Statement(
+        Translate(statement.Subject),
+        Translate(statement.Predicate),
+        Translate(statement.Property));
+    }
+
+    private SemWeb.Literal TranslateLiteral(SerializedLiteral l) {
+      if(l.RawData == null) return null;
+      return new SemWeb.Literal(l.RawData, null, "serializedItem");
+    }
+
+    private SemWeb.Literal TranslateLiteral(Literal l) {
+      if(l.Value == null) return null;
+      if(l.Value is double) return SemWeb.Literal.FromValue((double)l.Value);
+      else if(l.Value is bool) return SemWeb.Literal.FromValue((bool)l.Value);
+      else if(l.Value is int) return SemWeb.Literal.FromValue((int)l.Value);
+      else if(l.Value is long) return SemWeb.Literal.FromValue((long)l.Value);
+      else if(l.Value is string) return SemWeb.Literal.FromValue((string)l.Value);
+      else return new SemWeb.Literal(l.Value.ToString());
+    }
+
+    private Resource TranslateLiteral(SemWeb.Literal l) {
+      if(l.DataType == "serializedItem") {
+        return new SerializedLiteral(l.Value);
+      } else if(l.DataType != null) {
+        return new Literal(l.ParseValue());
+      } else {
+        return new Literal(l.Value);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/HeuristicLab.CEDMA.Operators.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/HeuristicLab.CEDMA.Operators.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/HeuristicLab.CEDMA.Operators.csproj	(revision 1270)
@@ -0,0 +1,131 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6BC692D4-8843-4945-ACE4-5B41ED55476A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.Operators</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.Operators-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="SelectSubjectsLiteral.cs" />
+    <Compile Include="SelectProperties.cs" />
+    <Compile Include="SelectSubjects.cs" />
+    <Compile Include="MakeLiteralStatement.cs" />
+    <Compile Include="MakeItemStatement.cs" />
+    <Compile Include="ResultsExtractor.cs" />
+    <Compile Include="InjectedVariableExtractor.cs" />
+    <Compile Include="SplitScopeToItemsResultWriter.cs" />
+    <Compile Include="ItemMailer.cs" />
+    <Compile Include="ScopeResultWriter.cs" />
+    <Compile Include="HeuristicLabCedmaOperatorsPlugin.cs" />
+    <Compile Include="OnGridProcessor.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.Core\HeuristicLab.CEDMA.Core.csproj">
+      <Project>{C27DDF6C-84DF-45EF-B82F-57A28DD51166}</Project>
+      <Name>HeuristicLab.CEDMA.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
+      <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
+      <Name>HeuristicLab.CEDMA.DB.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/HeuristicLabCedmaOperatorsPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/HeuristicLabCedmaOperatorsPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/HeuristicLabCedmaOperatorsPlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Operators {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Operators-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Operators-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  public class HeuristicLabCedmaOperatorsPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/InjectedVariableExtractor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/InjectedVariableExtractor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/InjectedVariableExtractor.cs	(revision 1270)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class InjectedVariableExtractor : OperatorBase {
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public InjectedVariableExtractor()
+      : base() {
+      AddVariableInfo(new VariableInfo("AgentId", "Id of the agent to extract injected variables from.", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("VariableNames", "The names of injected variables that should be extracted", typeof(ItemList<StringData>), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      long agentId = GetVariableValue<IntData>("AgentId", scope, true).Data;
+      ItemList<StringData> variableNames = GetVariableValue<ItemList<StringData>>("VariableNames", scope, true);
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IDatabase> factory = new ChannelFactory<IDatabase>(binding)) {
+        IDatabase database = factory.CreateChannel(new EndpointAddress(serverUrl));
+        IOperatorGraph opGraph = (IOperatorGraph)PersistenceManager.RestoreFromGZip(database.GetAgentRawData(agentId));
+        OperatorLinkPatcher.LinkDatabase(opGraph, database);
+        ItemList<StringData> clone = new ItemList<StringData>();
+        foreach(StringData name in variableNames) clone.Add(name);
+        List<IVariable> vars = FindInjectedVariable(database, clone, opGraph);
+        foreach(IVariable var in vars) {
+          scope.AddVariable(var);
+        }
+      }
+      return null;
+    }
+
+    private List<IVariable> FindInjectedVariable(IDatabase database, ItemList<StringData> variableNames, IOperatorGraph opGraph) {
+      List<IVariable> vars = new List<IVariable>();
+      foreach(IOperator op in opGraph.Operators) {
+        vars.AddRange(FindInjectedVariable(database, variableNames, op));
+      }
+      return vars;
+    }
+
+    private List<IVariable> FindInjectedVariable(IDatabase database, ItemList<StringData> variableNames, IOperator op) {
+      List<IVariable> vars = new List<IVariable>();
+      List<string> missingVariables = new List<string>();
+      foreach(StringData variableName in variableNames) missingVariables.Add(variableName.Data);
+      foreach(string variableName in missingVariables) {
+        IVariable var = op.GetVariable(variableName);
+        if(var != null) {
+          vars.Add(var);
+          variableNames.Remove(new StringData(variableName));
+        }
+      }
+      if(op is CombinedOperator) {
+        vars.AddRange(FindInjectedVariable(database, variableNames, ((CombinedOperator)op).OperatorGraph));
+      } else if(op is OperatorLink) {
+        OperatorLink link = op as OperatorLink;
+        OperatorEntry targetEntry = database.GetOperator(link.Id);
+        IOperator target = (IOperator)PersistenceManager.RestoreFromGZip(targetEntry.RawData);
+        OperatorLinkPatcher.LinkDatabase(target, database);
+        link.Operator = target;
+
+        vars.AddRange(FindInjectedVariable(database, variableNames, link.Operator));
+      }
+      return vars;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ItemMailer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ItemMailer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ItemMailer.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Net.Mail;
+using System.IO;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class ItemMailer : OperatorBase {
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public ItemMailer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Server", "SMTP server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("To", "Recipient address", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Item", "The item to send", typeof(IItem), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string server = GetVariableValue<StringData>("Server", scope, true).Data;
+      string to = GetVariableValue<StringData>("To", scope, true).Data;
+      IItem item = GetVariableValue<IItem>("Item", scope, true);
+
+      MailMessage message = new MailMessage();
+      message.To.Add(to);
+      message.Subject = "HL3 Item - " + GetVariableInfo("Item").ActualName;
+      message.From = new MailAddress(@"robot@heuristiclab.com");
+      using(MemoryStream memStream = new MemoryStream()) {
+        PersistenceManager.Save(item, memStream);
+        memStream.Flush();
+        memStream.Position = 0;
+        message.Attachments.Add(new Attachment(memStream, "Scope"));
+
+        SmtpClient smtpClient = new SmtpClient(server, 2525);
+        smtpClient.UseDefaultCredentials = true;
+        smtpClient.Send(message);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/MakeItemStatement.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/MakeItemStatement.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/MakeItemStatement.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class MakeItemStatement : OperatorBase {
+    private static readonly string cedmaNamespace = "http://www.heuristiclab.com/cedma/";
+
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public MakeItemStatement()
+      : base() {
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Subject", "", typeof(IItem), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Predicate", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Property", "", typeof(IItem), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      IItem subject = GetVariableValue<IItem>("Subject", scope, true);
+      StringData predicate = GetVariableValue<StringData>("Predicate", scope, true);
+      IItem property = GetVariableValue<IItem>("Property", scope, true);
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding)) {
+        IStore store = factory.CreateChannel(new EndpointAddress(serverUrl));
+        Statement s = new Statement(
+          new Entity(cedmaNamespace + "Items/" + subject.Guid),
+          new Entity(cedmaNamespace + predicate.Data),
+          new Entity(cedmaNamespace + "Items/" + property.Guid));
+        store.Add(s);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/MakeLiteralStatement.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/MakeLiteralStatement.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/MakeLiteralStatement.cs	(revision 1270)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+using System.Xml;
+using System.IO;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class MakeLiteralStatement : OperatorBase {
+    private static readonly string cedmaNamespace = "http://www.heuristiclab.com/cedma/";
+
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public MakeLiteralStatement()
+      : base() {
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Subject", "", typeof(IItem), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Predicate", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Property", "", typeof(IItem), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      IItem subject = GetVariableValue<IItem>("Subject", scope, true);
+      StringData predicate = GetVariableValue<StringData>("Predicate", scope, true);
+      IItem property = GetVariableValue<IItem>("Property", scope, true);
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding)) {
+        IStore store = factory.CreateChannel(new EndpointAddress(serverUrl));
+        Statement s = new Statement(
+          new Entity(cedmaNamespace + "Items/" + subject.Guid),
+          new Entity(cedmaNamespace + predicate.Data),
+          TranslateItem(property));
+        store.Add(s);
+      }
+      return null;
+    }
+
+    private Resource TranslateItem(IItem property) {
+      if(property is IntData) {
+        return new Literal(((IntData)property).Data);
+      } else if(property is DoubleData) {
+        return new Literal(((DoubleData)property).Data);
+      } else if(property is BoolData) {
+        return new Literal(((BoolData)property).Data);
+      } else if(property is StringData) {
+        return new Literal(((StringData)property).Data);
+      } else {
+        XmlDocument doc = PersistenceManager.CreateXmlDocument();
+        XmlNode root = PersistenceManager.Persist(property, doc, new Dictionary<Guid, IStorable>());
+        doc.AppendChild(root);
+        StringWriter writer = new StringWriter();
+        doc.Save(writer);
+        writer.Flush();
+        return new SerializedLiteral(writer.ToString());
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/OnGridProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/OnGridProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/OnGridProcessor.cs	(revision 1270)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class OnGridProcessor : OperatorBase {
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public OnGridProcessor()
+      : base() {
+      AddVariableInfo(new VariableInfo("AgentId", "Id of the agent that the run should be associated to.", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Operator", "The operator that should be executed on the grid", typeof(IOperator), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IOperator op = GetVariableValue<IOperator>("Operator", scope, true);
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      long agentId = GetVariableValue<IntData>("AgentId", scope, true).Data;
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IDatabase> factory = new ChannelFactory<IDatabase>(binding)) {
+        IDatabase database = factory.CreateChannel(new EndpointAddress(serverUrl));
+        OperatorGraph opGraph = new OperatorGraph();
+        opGraph.AddOperator(op);
+        opGraph.InitialOperator = op;
+        long id = database.InsertAgent(agentId, null, PersistenceManager.SaveToGZip(opGraph));
+        database.UpdateAgent(id, ProcessStatus.Waiting);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.Operators")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("d2e2ece7-3211-4367-bf90-5912113f2860")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ResultsExtractor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ResultsExtractor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ResultsExtractor.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class ResultsExtractor : OperatorBase {
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public ResultsExtractor()
+      : base() {
+      AddVariableInfo(new VariableInfo("AgentId", "Id of the agent to extract injected variables from.", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      long agentId = GetVariableValue<IntData>("AgentId", scope, true).Data;
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IDatabase> factory = new ChannelFactory<IDatabase>(binding)) {
+        IDatabase database = factory.CreateChannel(new EndpointAddress(serverUrl));
+        ExtractResults(database, scope, database.GetResults(agentId));
+      }
+      return null;
+    }
+
+    private void ExtractResults(IDatabase database, IScope scope, ICollection<ResultEntry> results) {
+      foreach(ResultEntry result in results) {
+        IItem item = (IItem)PersistenceManager.RestoreFromGZip(database.GetResultRawData(result.Id));
+        Scope resultScope = new Scope();
+        resultScope.AddVariable(new Variable(result.Summary, item));
+        ExtractResults(database, resultScope, database.GetSubResults(result.Id));
+        scope.AddSubScope(resultScope);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ScopeResultWriter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ScopeResultWriter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/ScopeResultWriter.cs	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class ScopeResultWriter : OperatorBase {
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public ScopeResultWriter()
+      : base() {
+      AddVariableInfo(new VariableInfo("AgentId", "Id of the agent that the run should be associated to.", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      long agentId = GetVariableValue<IntData>("AgentId", scope, true).Data;
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IDatabase> factory = new ChannelFactory<IDatabase>(binding)) {
+        IDatabase database = factory.CreateChannel(new EndpointAddress(serverUrl));
+        database.InsertResult(agentId, scope.Name, "Scope", PersistenceManager.SaveToGZip(scope));
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectProperties.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectProperties.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectProperties.cs	(revision 1270)
@@ -0,0 +1,118 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+using System.IO;
+using System.Xml;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class SelectProperties : OperatorBase {
+    private static readonly string cedmaNamespace = "http://www.heuristiclab.com/cedma/";
+
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public SelectProperties()
+      : base() {
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SubjectGuid", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Predicate", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Property", "", typeof(IItem), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      StringData subjectGuid = GetVariableValue<StringData>("SubjectGuid", scope, true);
+      StringData predicate = GetVariableValue<StringData>("Predicate", scope, true);
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding)) {
+        IStore store = factory.CreateChannel(new EndpointAddress(serverUrl));
+        Statement template = new Statement(
+          new Entity(cedmaNamespace+subjectGuid.Data),
+          new Entity(cedmaNamespace+predicate.Data),
+          new Entity(null));
+        IList<Statement> result = store.Select(template);
+
+        if(result.Count == 1) {
+          Statement s = result[0];
+          Variable var = new Variable();
+          var.Name = scope.TranslateName("Property");
+          scope.AddVariable(var);
+          if(s.Property is Literal) {
+            var.Value = TranslateLiteral((Literal)s.Property);
+          } else if(s.Property is SerializedLiteral) {
+            var.Value = TranslateLiteral((SerializedLiteral)s.Property);
+          } else {
+            var.Value = new StringData(((Entity)s.Property).Uri.Replace(cedmaNamespace, ""));
+          }
+        } else {
+          ItemList<IItem> resultValues = new ItemList<IItem>();
+          scope.AddVariable(new Variable(scope.TranslateName("Property"), resultValues));
+          foreach(Statement s in result) {
+            if(s.Property is Literal) {
+              resultValues.Add(TranslateLiteral((Literal)s.Property));
+            } else if(s.Property is SerializedLiteral) {
+              resultValues.Add(TranslateLiteral((SerializedLiteral)s.Property));
+            } else {
+              resultValues.Add(new StringData(((Entity)s.Property).Uri.Replace(cedmaNamespace, "")));
+            }
+          }
+        }
+      }
+      return null;
+    }
+
+    private IItem TranslateLiteral(SerializedLiteral serializedLiteral) {
+      XmlDocument doc = new XmlDocument();
+      doc.LoadXml(serializedLiteral.RawData);      
+      return (IItem)PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
+    }
+
+    private IItem TranslateLiteral(Literal literal) {
+      if(literal.Value is bool) {
+        return new BoolData((bool)literal.Value);
+      } else if(literal.Value is double) {
+        return new DoubleData((double)literal.Value);
+      } else if(literal.Value is int) {
+        return new IntData((int)literal.Value);
+      } else if(literal.Value is string) {
+        return new StringData((string)literal.Value);
+      } else {
+        return new StringData(literal.Value.ToString());
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectSubjects.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectSubjects.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectSubjects.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class SelectSubjects : OperatorBase {
+    private static readonly string cedmaNamespace = "http://www.heuristiclab.com/cedma/";
+
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public SelectSubjects()
+      : base() {
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Subject", "", typeof(IItem), VariableKind.New));
+      AddVariableInfo(new VariableInfo("Predicate", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Property", "", typeof(IItem), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      StringData predicate = GetVariableValue<StringData>("Predicate", scope, true);
+      IItem property = GetVariableValue<IItem>("Property", scope, true);
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding)) {
+        IStore store = factory.CreateChannel(new EndpointAddress(serverUrl));
+        Statement template = new Statement(
+          new Entity(null),
+          new Entity(cedmaNamespace + predicate.Data),
+          new Entity(cedmaNamespace + "Items/" + property.Guid));
+        IList<Statement> result = store.Select(template);
+
+        foreach(Statement s in result) {
+          Scope subScope = new Scope(s.Subject.Uri.Replace(cedmaNamespace, ""));
+          subScope.AddVariable(new Variable(scope.TranslateName("Subject"), new StringData(s.Subject.Uri.Replace(cedmaNamespace, ""))));
+          scope.AddSubScope(subScope);
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectSubjectsLiteral.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectSubjectsLiteral.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SelectSubjectsLiteral.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class SelectSubjectsLiteral : OperatorBase {
+    private static readonly string cedmaNamespace = "http://www.heuristiclab.com/cedma/";
+
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public SelectSubjectsLiteral()
+      : base() {
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Subject", "", typeof(IItem), VariableKind.New));
+      AddVariableInfo(new VariableInfo("Predicate", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Property", "", typeof(ObjectData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      StringData predicate = GetVariableValue<StringData>("Predicate", scope, true);
+      ObjectData property = GetVariableValue<ObjectData>("Property", scope, true);
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IStore> factory = new ChannelFactory<IStore>(binding)) {
+        IStore store = factory.CreateChannel(new EndpointAddress(serverUrl));
+        Statement template = new Statement(
+          new Entity(null),
+          new Entity(cedmaNamespace + predicate.Data),
+          new Literal(property.Data));
+        IList<Statement> result = store.Select(template);
+
+        foreach(Statement s in result) {
+          Scope subScope = new Scope(s.Subject.Uri.Replace(cedmaNamespace, ""));
+          subScope.AddVariable(new Variable(scope.TranslateName("Subject"), new StringData(s.Subject.Uri.Replace(cedmaNamespace,""))));
+          scope.AddSubScope(subScope);
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SplitScopeToItemsResultWriter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SplitScopeToItemsResultWriter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Operators/SplitScopeToItemsResultWriter.cs	(revision 1270)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Threading;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.ServiceModel;
+
+namespace HeuristicLab.CEDMA.Operators {
+  public class SplitScopeToItemsResultWriter : OperatorBase {
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    public SplitScopeToItemsResultWriter()
+      : base() {
+      AddVariableInfo(new VariableInfo("AgentId", "Id of the agent whose results should be transformed.", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CedmaServerUri", "Uri of the CEDMA server", typeof(StringData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string serverUrl = GetVariableValue<StringData>("CedmaServerUri", scope, true).Data;
+      long agentId = GetVariableValue<IntData>("AgentId", scope, true).Data;
+
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 10000000; // 10Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 10000000; // also 10M chars
+      binding.ReaderQuotas.MaxArrayLength = 10000000; // also 10M elements;
+      binding.Security.Mode = SecurityMode.None;
+      using(ChannelFactory<IDatabase> factory = new ChannelFactory<IDatabase>(binding)) {
+        IDatabase database = factory.CreateChannel(new EndpointAddress(serverUrl));
+        TransformResults(database, agentId);
+      }
+      return null;
+    }
+
+    private void TransformResults(IDatabase database, long agentId) {
+      TransformResults(database, database.GetResults(agentId));
+      foreach(AgentEntry subAgent in database.GetSubAgents(agentId)) {
+        TransformResults(database, subAgent.Id);
+      }
+    }
+
+    private void TransformResults(IDatabase database, ICollection<ResultEntry> results) {
+      foreach(ResultEntry entry in results) {
+        byte[] rawData = database.GetResultRawData(entry.Id);
+        object resultItem = PersistenceManager.RestoreFromGZip(rawData);
+        if(resultItem is IScope) {
+          IScope resultScope = resultItem as IScope;
+          IVariable funTreeVariable = resultScope.GetVariable("FunctionTree");
+          if(funTreeVariable != null) {
+            long newResultId = 0;
+            if(entry.AgentId.HasValue) {
+              newResultId = database.InsertResult(entry.AgentId.Value, funTreeVariable.Name, resultScope.Name, PersistenceManager.SaveToGZip(funTreeVariable.Value));
+            } else if(entry.ParentResultId.HasValue) {
+              newResultId = database.InsertSubResult(entry.ParentResultId.Value, funTreeVariable.Name, resultScope.Name, PersistenceManager.SaveToGZip(funTreeVariable.Value));
+            }
+            foreach(IVariable var in resultScope.Variables) {
+              if(var != funTreeVariable) {
+                database.InsertSubResult(newResultId, var.Name, "", PersistenceManager.SaveToGZip(var.Value));
+              }
+            }
+          }
+        }
+        TransformResults(database, database.GetSubResults(entry.Id));
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/HeuristicLab.CEDMA.Server.csproj	(revision 1270)
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F05D261A-4F7D-46C9-AB9C-21FD4566D719}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.CEDMA.Server</RootNamespace>
+    <AssemblyName>HeuristicLab.CEDMA.Server-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>false</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="RunScheduler.cs" />
+    <Compile Include="ServerApplication.cs" />
+    <Compile Include="HeuristicLabCedmaServerPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServerForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ServerForm.designer.cs">
+      <DependentUpon>ServerForm.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.Core\HeuristicLab.CEDMA.Core.csproj">
+      <Project>{C27DDF6C-84DF-45EF-B82F-57A28DD51166}</Project>
+      <Name>HeuristicLab.CEDMA.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj">
+      <Project>{4F9BB789-D561-436B-B226-2BF44B7D0804}</Project>
+      <Name>HeuristicLab.CEDMA.DB.Interfaces</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.CEDMA.DB\HeuristicLab.CEDMA.DB.csproj">
+      <Project>{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}</Project>
+      <Name>HeuristicLab.CEDMA.DB</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Grid\HeuristicLab.Grid.csproj">
+      <Project>{545CE756-98D8-423B-AC2E-6E7D70926E5C}</Project>
+      <Name>HeuristicLab.Grid</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ServerForm.resx">
+      <DependentUpon>ServerForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/HeuristicLabCedmaServerPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/HeuristicLabCedmaServerPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/HeuristicLabCedmaServerPlugin.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Server {
+  [ClassInfo(Name = "HeuristicLab.CEDMA.Server-3.2")]
+  [PluginFile(Filename = "HeuristicLab.CEDMA.Server-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB.Interfaces-3.2")]
+  [Dependency(Dependency = "HeuristicLab.CEDMA.DB-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Grid-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  public class HeuristicLabCedmaServerPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.CEDMA.Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("209a38c6-cbb8-407e-9158-6f4f60bdadb7")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/RunScheduler.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/RunScheduler.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/RunScheduler.cs	(revision 1270)
@@ -0,0 +1,165 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.CEDMA.DB;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using HeuristicLab.Core;
+using System.Threading;
+using HeuristicLab.Grid;
+using System.Diagnostics;
+using HeuristicLab.Data;
+using HeuristicLab.CEDMA.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.CEDMA.Server {
+  public class RunScheduler {
+    private class Job {
+      public long AgentId;
+      public WaitHandle WaitHandle;
+      public AtomicOperation Operation;
+    }
+    private string serverUri;
+    private Database database;
+    private JobManager jobManager;
+    private const int RELEASE_INTERVAL = 5;
+    private object remoteCommLock = new object();
+    private object queueLock = new object();
+    private Queue<Job> jobQueue;
+    private AutoResetEvent runningJobs = new AutoResetEvent(false);
+
+    public RunScheduler(Database database, JobManager jobManager, string serverUri) {
+      this.database = database;
+      this.jobManager = jobManager;
+      this.serverUri = serverUri;
+      jobQueue = new Queue<Job>();
+      Thread resultsGatheringThread = new Thread(GatherResults);
+      resultsGatheringThread.Start();
+    }
+    public void Run() {
+      while(true) {
+        ReleaseWaitingRuns();
+        Thread.Sleep(TimeSpan.FromSeconds(RELEASE_INTERVAL));
+      }
+    }
+    private void ReleaseWaitingRuns() {
+      ICollection<AgentEntry> agents;
+      lock(remoteCommLock) {
+        agents = database.GetAgents(ProcessStatus.Waiting);
+      }
+      foreach(AgentEntry entry in agents) {
+        Scope scope = new Scope();
+        // initialize CEDMA variables for the execution of the agent
+        scope.AddVariable(new Variable("AgentId", new IntData((int)entry.Id)));
+        scope.AddVariable(new Variable("CedmaServerUri", new StringData(serverUri)));
+
+        byte[] rawData = database.GetAgentRawData(entry.Id);
+        IOperatorGraph opGraph = (IOperatorGraph)PersistenceManager.RestoreFromGZip(rawData);
+
+        PatchLinks(opGraph, new Dictionary<long, IOperator>());
+
+        AtomicOperation operation = new AtomicOperation(opGraph.InitialOperator, scope);
+        WaitHandle wHandle;
+        lock(remoteCommLock) {
+          wHandle = jobManager.BeginExecuteOperation(operation.Scope, operation);
+          database.UpdateAgent(entry.Id, ProcessStatus.Active);
+        }
+
+        Job job = new Job();
+        job.AgentId = entry.Id;
+        job.Operation = operation;
+        job.WaitHandle = wHandle;
+
+        lock(queueLock) {
+          jobQueue.Enqueue(job);
+          runningJobs.Set();
+        }
+      }
+    }
+
+    private void PatchLinks(IOperatorGraph opGraph, Dictionary<long, IOperator> patchedOperators) {
+      Dictionary<IOperator, IOperator> patchDictionary = new Dictionary<IOperator, IOperator>();
+      foreach(IOperator op in opGraph.Operators) {
+        IOperator patched = PatchLinks(op, patchedOperators);
+        patchDictionary.Add(op, patched);
+      }
+      foreach(KeyValuePair<IOperator, IOperator> p in patchDictionary) {
+        IOperator original = p.Key;
+        IOperator patch = p.Value;
+        if(original != patch) {
+          foreach(IOperator subOperator in original.SubOperators) {
+            patch.AddSubOperator(subOperator);
+          }
+          if(opGraph.InitialOperator == original)
+            opGraph.InitialOperator = patch;
+          opGraph.RemoveOperator(original.Guid);
+          opGraph.AddOperator(patch);
+        }
+      }
+    }
+
+    private IOperator PatchLinks(IOperator op, Dictionary<long, IOperator> patchedOperators) {
+      if(op is OperatorLink) {
+        OperatorLink link = op as OperatorLink;
+        if(patchedOperators.ContainsKey(link.Id)) {
+          return patchedOperators[link.Id];
+        } else {
+          OperatorEntry targetEntry = database.GetOperator(link.Id);
+          IOperator target = (IOperator)PersistenceManager.RestoreFromGZip(targetEntry.RawData);
+          patchedOperators.Add(link.Id, target);
+          PatchLinks(target, patchedOperators);
+          return target;
+        }
+      } else if(op is CombinedOperator) {
+        PatchLinks(((CombinedOperator)op).OperatorGraph, patchedOperators);
+        return op;
+      }
+      return op;
+    }
+
+    private void GatherResults() {
+      try {
+        while(true) {
+          Job job = null;
+          lock(queueLock) if(jobQueue.Count > 0) job = jobQueue.Dequeue();
+          if(job == null) runningJobs.WaitOne();
+          else {
+            job.WaitHandle.WaitOne();
+            job.WaitHandle.Close();
+            lock(remoteCommLock) {
+              try {
+                jobManager.EndExecuteOperation(job.Operation);
+                database.UpdateAgent(job.AgentId, ProcessStatus.Finished);
+              } catch(JobExecutionException ex) {
+                database.UpdateAgent(job.AgentId, ProcessStatus.Error);
+              }
+            }
+          }
+        }
+      } finally {
+        Debug.Assert(false); // make sure we are notified when this thread is killed while debugging
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerApplication.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.CEDMA.Server {
+  [ClassInfo(Name = "CEDMA Server", Description = "Server to execute CEDMA agents.", AutoRestart=true)]
+  class ServerApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new ServerForm();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using HeuristicLab.CEDMA.DB;
+using HeuristicLab.CEDMA.DB.Interfaces;
+using System.Data.Common;
+using System.Threading;
+using HeuristicLab.Grid;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.CEDMA.Server {
+  public partial class ServerForm : Form {
+    private ServiceHost host;
+    private ServiceHost rdfHost;
+    private Database database;
+    private Store store;
+    private static readonly string dbFile = AppDomain.CurrentDomain.BaseDirectory + "/test.db3";
+    private static readonly string connectionString = "Data Source=\"" + dbFile + "\";Pooling=False";
+    private static readonly string rdfFile = AppDomain.CurrentDomain.BaseDirectory + "rdf_store.db3";
+    private static readonly string rdfConnectionString = "sqlite:rdf:Data Source=\"" + rdfFile + "\"";
+    public ServerForm() {
+      InitializeComponent();
+      // windows XP returns the external ip on index 0 while windows vista returns the external ip on index 2
+      if(System.Environment.OSVersion.Version.Major >= 6) {
+        addressTextBox.Text = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[2] + ":8002/CEDMA/World";
+      } else {
+        addressTextBox.Text = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[0] + ":8002/CEDMA/World";
+      }
+    }
+
+    private void InitRunScheduler() {
+      JobManager jobManager = new JobManager(gridAddress.Text);
+      jobManager.Reset();
+      RunScheduler scheduler = new RunScheduler(database, jobManager, addressTextBox.Text);
+      Thread runSchedulerThread = new Thread(scheduler.Run);
+      runSchedulerThread.Start();
+    }
+
+    private void InitDatabase() {
+      DbProviderFactory fact;
+      fact = DbProviderFactories.GetFactory("System.Data.SQLite");
+      if(!System.IO.File.Exists(dbFile)) {
+        database = new Database(connectionString);
+        database.CreateNew();
+      } else {
+        database = new Database(connectionString);
+      }
+    }
+
+    private void InitRdfStore() {
+      store = new Store(rdfConnectionString);
+    }
+
+    private void Start() {
+      InitDatabase();
+      InitRdfStore();
+      InitRunScheduler();
+
+      host = new ServiceHost(database, new Uri(addressTextBox.Text));
+      rdfHost = new ServiceHost(store, new Uri(addressTextBox.Text+"/RdfStore"));
+      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
+      throttlingBehavior.MaxConcurrentSessions = 20;
+      host.Description.Behaviors.Add(throttlingBehavior);
+      rdfHost.Description.Behaviors.Add(throttlingBehavior);
+      try {
+        NetTcpBinding binding = new NetTcpBinding();
+        binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
+        binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
+        binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
+        binding.Security.Mode = SecurityMode.None;
+
+        host.AddServiceEndpoint(typeof(IDatabase), binding, addressTextBox.Text);
+        host.Open();
+        rdfHost.AddServiceEndpoint(typeof(IStore), binding, addressTextBox.Text+"/RdfStore");
+        rdfHost.Open();
+      } catch(CommunicationException ex) {
+        MessageBox.Show("An exception occurred: " + ex.Message);
+        host.Abort();
+        rdfHost.Abort();
+      }
+    }
+
+    private void startButton_Click(object sender, EventArgs e) {
+      Start();
+      startButton.Enabled = false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.designer.cs	(revision 1270)
@@ -0,0 +1,147 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.CEDMA.Server {
+  partial class ServerForm {
+    /// <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.addressTextBox = new System.Windows.Forms.TextBox();
+      this.externalAddressLabel = new System.Windows.Forms.Label();
+      this.activeAgentsLabel = new System.Windows.Forms.Label();
+      this.activeAgentsTextBox = new System.Windows.Forms.TextBox();
+      this.gridAddressLabel = new System.Windows.Forms.Label();
+      this.gridAddress = new System.Windows.Forms.TextBox();
+      this.startButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // addressTextBox
+      // 
+      this.addressTextBox.Location = new System.Drawing.Point(106, 6);
+      this.addressTextBox.Name = "addressTextBox";
+      this.addressTextBox.ReadOnly = true;
+      this.addressTextBox.Size = new System.Drawing.Size(229, 20);
+      this.addressTextBox.TabIndex = 0;
+      // 
+      // externalAddressLabel
+      // 
+      this.externalAddressLabel.AutoSize = true;
+      this.externalAddressLabel.Location = new System.Drawing.Point(12, 9);
+      this.externalAddressLabel.Name = "externalAddressLabel";
+      this.externalAddressLabel.Size = new System.Drawing.Size(48, 13);
+      this.externalAddressLabel.TabIndex = 3;
+      this.externalAddressLabel.Text = "&Address:";
+      // 
+      // activeAgentsLabel
+      // 
+      this.activeAgentsLabel.AutoSize = true;
+      this.activeAgentsLabel.Location = new System.Drawing.Point(12, 61);
+      this.activeAgentsLabel.Name = "activeAgentsLabel";
+      this.activeAgentsLabel.Size = new System.Drawing.Size(75, 13);
+      this.activeAgentsLabel.TabIndex = 7;
+      this.activeAgentsLabel.Text = "A&ctive agents:";
+      // 
+      // activeAgentsTextBox
+      // 
+      this.activeAgentsTextBox.Location = new System.Drawing.Point(106, 58);
+      this.activeAgentsTextBox.Name = "activeAgentsTextBox";
+      this.activeAgentsTextBox.ReadOnly = true;
+      this.activeAgentsTextBox.Size = new System.Drawing.Size(90, 20);
+      this.activeAgentsTextBox.TabIndex = 6;
+      this.activeAgentsTextBox.Text = "0";
+      this.activeAgentsTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      // 
+      // gridAddressLabel
+      // 
+      this.gridAddressLabel.AutoSize = true;
+      this.gridAddressLabel.Location = new System.Drawing.Point(12, 35);
+      this.gridAddressLabel.Name = "gridAddressLabel";
+      this.gridAddressLabel.Size = new System.Drawing.Size(69, 13);
+      this.gridAddressLabel.TabIndex = 9;
+      this.gridAddressLabel.Text = "&Grid address:";
+      // 
+      // gridAddress
+      // 
+      this.gridAddress.Location = new System.Drawing.Point(106, 32);
+      this.gridAddress.Name = "gridAddress";
+      this.gridAddress.Size = new System.Drawing.Size(229, 20);
+      this.gridAddress.TabIndex = 8;
+      // 
+      // startButton
+      // 
+      this.startButton.Location = new System.Drawing.Point(15, 84);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(75, 23);
+      this.startButton.TabIndex = 10;
+      this.startButton.Text = "Start";
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // ServerForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(347, 119);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.gridAddressLabel);
+      this.Controls.Add(this.gridAddress);
+      this.Controls.Add(this.activeAgentsLabel);
+      this.Controls.Add(this.activeAgentsTextBox);
+      this.Controls.Add(this.externalAddressLabel);
+      this.Controls.Add(this.addressTextBox);
+      this.Name = "ServerForm";
+      this.Text = "Agent Server";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox addressTextBox;
+    private System.Windows.Forms.Label externalAddressLabel;
+    private System.Windows.Forms.Label activeAgentsLabel;
+    private System.Windows.Forms.TextBox activeAgentsTextBox;
+    private System.Windows.Forms.Label gridAddressLabel;
+    private System.Windows.Forms.TextBox gridAddress;
+    private System.Windows.Forms.Button startButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.CEDMA.Server/ServerForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.Designer.cs	(revision 1270)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Charting.Data {
+  partial class DataChartControl {
+    /// <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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DataChartControl));
+      this.titleLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox.Image")));
+      this.pictureBox.Location = new System.Drawing.Point(0, 33);
+      this.pictureBox.Size = new System.Drawing.Size(300, 230);
+      // 
+      // titleLabel
+      // 
+      this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.titleLabel.Location = new System.Drawing.Point(3, 0);
+      this.titleLabel.Name = "titleLabel";
+      this.titleLabel.Size = new System.Drawing.Size(294, 30);
+      this.titleLabel.TabIndex = 2;
+      this.titleLabel.Text = "Title";
+      this.titleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+      // 
+      // DataChartControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.titleLabel);
+      this.Name = "DataChartControl";
+      this.Size = new System.Drawing.Size(300, 263);
+      this.Controls.SetChildIndex(this.titleLabel, 0);
+      this.Controls.SetChildIndex(this.pictureBox, 0);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Label titleLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.cs	(revision 1270)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.Charting.Data {
+  public partial class DataChartControl : ChartControl {
+    public new Datachart Chart {
+      get { return (Datachart)base.Chart; }
+      set {
+        if (Chart != null) {
+          Chart.Update -= new EventHandler(Chart_Update);
+        }
+        base.Chart = value;
+        if (Chart != null) {
+          Chart.Update += new EventHandler(Chart_Update);
+        }
+      }
+    }
+
+    public DataChartControl() {
+      InitializeComponent();
+    }
+
+    private void Chart_Update(object sender, EventArgs e) {
+      titleLabel.Text = Chart.Title;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataChartControl.resx	(revision 1270)
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="pictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAASwAAADmCAYAAABvebgTAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAABMxJREFUeF7t0AEN
+        AAAAwqD3T20ON4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+        DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+        DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+        DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+        DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+        DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMG
+        DBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCA
+        AQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgw
+        YMCAAQMGDBgwYMCAAQMGXgYGN0IAAaJ0SPsAAAAASUVORK5CYII=
+</value>
+  </data>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>210, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataRowType.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataRowType.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/DataRowType.cs	(revision 1270)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Charting.Data {
+  public enum DataRowType {
+    Lines,
+    Bars,
+    Points
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/Datachart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/Datachart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/Datachart.cs	(revision 1270)
@@ -0,0 +1,113 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.Charting.Data {
+  public class Datachart : Chart {
+    private IList<DataRowType> dataRowTypes;
+
+    private string myTitle;
+    public string Title {
+      get { return myTitle; }
+      set {
+        if(myTitle != value) {
+          myTitle = value;
+          OnUpdate();
+        }
+      }
+    }
+
+    public Datachart(PointD lowerLeft, PointD upperRight)
+      : base(lowerLeft, upperRight) {
+      dataRowTypes = new List<DataRowType>();
+    }
+    public Datachart(double x1, double y1, double x2, double y2)
+      : this(new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+
+    public void AddDataRow(DataRowType dataRowType, Pen pen, Brush brush) {
+      Group group = new Group(this);
+      group.Pen = pen;
+      group.Brush = brush;
+      Group.Add(group);
+      dataRowTypes.Add(dataRowType);
+      if(dataRowType == DataRowType.Lines) {
+        Group lines = new Group(this);
+        group.Add(lines);
+        Group points = new Group(this);
+        group.Add(points);
+      }
+    }
+    public void RemoveDataRow(int index) {
+      Group.Remove(Group.Primitives[index]);
+      dataRowTypes.RemoveAt(index);
+    }
+
+    public void AddDataPoint(int dataRowIndex, PointD point) {
+      DataRowType dataRowType = dataRowTypes[dataRowIndex];
+      Group group = (Group)Group.Primitives[dataRowIndex];
+
+      switch(dataRowType) {
+        case DataRowType.Lines:
+          Group lines = (Group)group.Primitives[1];
+          Group points = (Group)group.Primitives[0];
+          if(points.Primitives.Count > 0) {
+            FixedSizeRectangle lastRect = (FixedSizeRectangle)points.Primitives[0];
+            Line line = new Line(this, lastRect.Point, point, group.Pen);
+            lines.Add(line);
+          }
+          FixedSizeRectangle rect = new FixedSizeRectangle(this, point, new Size(5, 5), group.Pen, group.Brush);
+          rect.ToolTipText = "(" + point.X.ToString() + " ; " + point.Y.ToString() + ")";
+          points.Add(rect);
+          break;
+        case DataRowType.Bars:
+          if(group.Primitives.Count < 2) {
+            group.Add(new FixedSizeRectangle(this, point, new Size(0, 0), group.Pen, group.Brush));
+            if(group.Primitives.Count == 2) {
+              PointD p = ((FixedSizeRectangle)group.Primitives[0]).Point;
+              PointD q = ((FixedSizeRectangle)group.Primitives[1]).Point;
+              double y0 = Math.Min(p.Y, q.Y);
+              double y1 = Math.Max(p.Y, q.Y);
+              double x0 = Math.Min(p.X, q.X);
+              double x1 = Math.Max(p.X, q.X);
+              Rectangle bar = new Rectangle(this, x0, y0, x1, y1, group.Pen, group.Brush);
+              bar.ToolTipText = "Height=" + (y1 - y0);
+              group.Add(bar);
+            }
+          }
+          break;
+        case DataRowType.Points:
+          FixedSizeRectangle r = new FixedSizeRectangle(this, point, new Size(5, 5), group.Pen, group.Brush);
+          r.ToolTipText = "(" + point.X.ToString() + " ; " + point.Y.ToString() + ")";
+          group.Add(r);
+          break;
+      }
+    }
+    public void AddDataPoint(int dataRowIndex, double x, double y) {
+      AddDataPoint(dataRowIndex, new PointD(x, y));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/HeuristicLab.Charting.Data.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/HeuristicLab.Charting.Data.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/HeuristicLab.Charting.Data.csproj	(revision 1270)
@@ -0,0 +1,112 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Charting.Data</RootNamespace>
+    <AssemblyName>HeuristicLab.Charting.Data-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Charting.Data-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Charting.Data-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Datachart.cs" />
+    <Compile Include="DataChartControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DataChartControl.Designer.cs">
+      <DependentUpon>DataChartControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DataRowType.cs" />
+    <Compile Include="HeuristicLabChartingDataPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Charting\HeuristicLab.Charting.csproj">
+      <Project>{B462D3CC-8866-42F0-9832-AD0967613B72}</Project>
+      <Name>HeuristicLab.Charting</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="DataChartControl.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>DataChartControl.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/HeuristicLabChartingDataPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/HeuristicLabChartingDataPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/HeuristicLabChartingDataPlugin.cs	(revision 1270)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Charting.Data {
+  [ClassInfo(Name = "HeuristicLab.Charting.Data-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Charting.Data-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Charting-3.2")]
+  public class HeuristicLabChartingDataPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting.Data/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Charting.Data")]
+[assembly: AssemblyDescription("Data charts (line charts, bar charts, etc.) of the HeuristicLab charting framework")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("be8e26f9-5234-4554-894d-3edc19917a38")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/AxisType.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/AxisType.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/AxisType.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Charting {
+  [FlagsAttribute]
+  public enum AxisType {
+    None = 0,
+    Horizontal = 1,
+    Vertical = 2,
+    Both = Horizontal | Vertical
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Chart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Chart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Chart.cs	(revision 1270)
@@ -0,0 +1,279 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public class Chart : IChart {
+    private PointD originalLowerLeft;
+    private PointD originalUpperRight;
+    private List<Offset> zoomHistory;
+
+    private ChartMode myMode;
+    public virtual ChartMode Mode {
+      get { return myMode; }
+      set {
+        myMode = value;
+        OnUpdate();
+      }
+    }
+
+    private PointD myLowerLeft;
+    public virtual PointD LowerLeft {
+      get { return myLowerLeft; }
+    }
+    private PointD myUpperRight;
+    public virtual PointD UpperRight {
+      get { return myUpperRight; }
+    }
+    public virtual SizeD Size {
+      get { return new SizeD(UpperRight.X - LowerLeft.X, UpperRight.Y - LowerLeft.Y); }
+    }
+    private Size mySizeInPixels;
+    public Size SizeInPixels {
+      get { return mySizeInPixels; }
+    }
+    public SizeD PixelToWorldRatio {
+      get { return new SizeD(Size.Width / SizeInPixels.Width, Size.Height / SizeInPixels.Height); }
+    }
+    public SizeD WorldToPixelRatio {
+      get { return new SizeD(SizeInPixels.Width / Size.Width, SizeInPixels.Height / Size.Height); }
+    }
+
+    private IGroup myGroup;
+    public IGroup Group {
+      get { return myGroup; }
+    }
+
+    private bool myUpdateEnabled;
+    public bool UpdateEnabled {
+      get { return myUpdateEnabled; }
+      set { myUpdateEnabled = value; }
+    }
+
+    public Chart(PointD lowerLeft, PointD upperRight) {
+      myUpdateEnabled = false;
+      zoomHistory = new List<Offset>();
+      myMode = ChartMode.Move;
+      SetPosition(lowerLeft, upperRight);
+      mySizeInPixels = new Size(100, 100);
+      myGroup = new Group(this);
+      Group.Update += new EventHandler(Group_Update);
+      myUpdateEnabled = true;
+    }
+    public Chart(double x1, double y1, double x2, double y2)
+      : this(new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+
+    public PointD TransformPixelToWorld(Point point) {
+      double x = LowerLeft.X + point.X * PixelToWorldRatio.Width;
+      double y = LowerLeft.Y + (SizeInPixels.Height - point.Y) * PixelToWorldRatio.Height;
+      return new PointD(x, y);
+    }
+    public SizeD TransformPixelToWorld(Size size) {
+      double width = size.Width * PixelToWorldRatio.Width;
+      double height = size.Height * PixelToWorldRatio.Height;
+      return new SizeD(width, height);
+    }
+    public Point TransformWorldToPixel(PointD point) {
+      int x = (int)((point.X - LowerLeft.X) * WorldToPixelRatio.Width);
+      int y = (int)((UpperRight.Y - point.Y) * WorldToPixelRatio.Height);
+      return new Point(x, y);
+    }
+    public Size TransformWorldToPixel(SizeD size) {
+      int width = (int)(size.Width * WorldToPixelRatio.Width);
+      int height = (int)(size.Height * WorldToPixelRatio.Height);
+      return new Size(width, height);
+    }
+
+    public virtual void SetPosition(PointD lowerLeft, PointD upperRight) {
+      if ((lowerLeft.X >= upperRight.X) || (lowerLeft.Y >= upperRight.Y))
+        throw new ArgumentException("Lower left point is greater or equal than upper right point");
+
+      originalLowerLeft = lowerLeft;
+      originalUpperRight = upperRight;
+      if (zoomHistory != null) zoomHistory.Clear();
+      myLowerLeft = lowerLeft;
+      myUpperRight = upperRight;
+      OnUpdate();
+    }
+    public void SetPosition(double x1, double y1, double x2, double y2) {
+      SetPosition(new PointD(x1, y1), new PointD(x2, y2));
+    }
+    public virtual void Move(Offset delta) {
+      myLowerLeft += delta;
+      myUpperRight += delta;
+      OnUpdate();
+    }
+    public void Move(double dx, double dy) {
+      Move(new Offset(dx, dy));
+    }
+
+    public virtual void ZoomIn(PointD lowerLeft, PointD upperRight) {
+      zoomHistory.Insert(0, LowerLeft - lowerLeft);
+      zoomHistory.Insert(0, UpperRight - upperRight);
+      myLowerLeft = lowerLeft;
+      myUpperRight = upperRight;
+      OnUpdate();
+    }
+    public void ZoomIn(double x1, double y1, double x2, double y2) {
+      ZoomIn(new PointD(x1, y1), new PointD(x2, y2));
+    }
+    public virtual void ZoomIn(Point lowerLeft, Point upperRight) {
+      ZoomIn(TransformPixelToWorld(lowerLeft), TransformPixelToWorld(upperRight));
+    }
+    public void ZoomIn(int x1, int y1, int x2, int y2) {
+      ZoomIn(new Point(x1, y1), new Point(x2, y2));
+    }
+    public virtual void ZoomOut() {
+      if (zoomHistory.Count > 0) {
+        Offset upperRight = zoomHistory[0];
+        zoomHistory.RemoveAt(0);
+        Offset lowerLeft = zoomHistory[0];
+        zoomHistory.RemoveAt(0);
+        myLowerLeft = LowerLeft + lowerLeft;
+        myUpperRight = UpperRight + upperRight;
+        OnUpdate();
+      } else {
+        myLowerLeft.X -= Size.Width / 4;
+        myLowerLeft.Y -= Size.Height / 4;
+        myUpperRight.X += Size.Width / 4;
+        myUpperRight.Y += Size.Height / 4;
+        OnUpdate();
+      }
+    }
+    public virtual void Unzoom() {
+      SetPosition(originalLowerLeft, originalUpperRight);
+    }
+
+    public virtual IPrimitive GetPrimitive(Point point) {
+      return Group.GetPrimitive(TransformPixelToWorld(point));
+    }
+    public IPrimitive GetPrimitive(int x, int y) {
+      return GetPrimitive(new Point(x, y));
+    }
+    public virtual IList<IPrimitive> GetAllPrimitives(Point point) {
+      return Group.GetAllPrimitives(TransformPixelToWorld(point));
+    }
+    public IList<IPrimitive> GetAllPrimitives(int x, int y) {
+      return GetAllPrimitives(new Point(x, y));
+    }
+
+    public virtual Cursor GetCursor(Point point) {
+      Cursor cursor = Group.GetCursor(TransformPixelToWorld(point));
+      if (cursor != null) return cursor;
+
+      if (Mode == ChartMode.Move) return Cursors.Hand;
+      if (Mode == ChartMode.Select) return Cursors.Arrow;
+      if (Mode == ChartMode.Zoom) return Cursors.Arrow;
+      return Cursors.Default;
+    }
+    public Cursor GetCursor(int x, int y) {
+      return GetCursor(new Point(x, y));
+    }
+    public virtual string GetToolTipText(Point point) {
+      return Group.GetToolTipText(TransformPixelToWorld(point));
+    }
+    public string GetToolTipText(int x, int y) {
+      return GetToolTipText(new Point(x, y));
+    }
+
+    public virtual void MouseClick(Point point, MouseButtons button) {
+      if (Mode == ChartMode.Select) {
+        if (button == MouseButtons.Left) {
+          IPrimitive clicked = GetPrimitive(point);
+          UpdateEnabled = false;
+          foreach (IPrimitive primitive in Group.SelectedPrimitives)
+            primitive.Selected = false;
+          UpdateEnabled = true;
+          if (clicked != null) {
+            PointD p = TransformPixelToWorld(point);
+            clicked.MouseClick(p, button);
+          } else OnUpdate();
+        }
+      } else if (Mode == ChartMode.Move) {
+        if (button == MouseButtons.Middle) {
+          PointD center = LowerLeft + new Offset(Size.Width / 2, Size.Height / 2);
+          Move(TransformPixelToWorld(point) - center);
+        }
+      }
+    }
+    public void MouseClick(int x, int y, MouseButtons button) {
+      MouseClick(new Point(x, y), button);
+    }
+    public virtual void MouseDoubleClick(Point point, MouseButtons button) {
+    }
+    public void MouseDoubleClick(int x, int y, MouseButtons button) {
+      MouseDoubleClick(new Point(x, y), button);
+    }
+    public virtual void MouseMove(Point start, Point end) {
+    }
+    public void MouseMove(int x1, int y1, int x2, int y2) {
+      MouseMove(new Point(x1, y1), new Point(x2, y2));
+    }
+    public virtual void MouseDrag(Point start, Point end, MouseButtons button) {
+      PointD p1 = TransformPixelToWorld(start);
+      PointD p2 = TransformPixelToWorld(end);
+      Offset offset = p2 - p1;
+      if (Mode == ChartMode.Move) {
+        Move(-1 * offset.DX, -1 * offset.DY);
+      } else if (Mode == ChartMode.Select) {
+        if (button == MouseButtons.Left) {
+          IList<IPrimitive> selected = Group.SelectedPrimitives;
+          UpdateEnabled = false;
+          foreach (IPrimitive primitive in selected)
+            primitive.MouseDrag(p1, offset, button);
+          UpdateEnabled = true;
+          OnUpdate();
+        }
+      }
+    }
+    public void MouseDrag(int x1, int y1, int x2, int y2, MouseButtons button) {
+      MouseDrag(new Point(x1, y1), new Point(x2, y2), button);
+    }
+
+    public virtual void Render(Graphics graphics, int width, int height) {
+      mySizeInPixels = new Size(width, height);
+      Group.PreDraw(graphics);
+      Group.Draw(graphics);
+      Group.PostDraw(graphics);
+    }
+
+    public event EventHandler Update;
+    public void EnforceUpdate() {
+      if (Update != null) {
+        Update(this, new EventArgs());
+      }
+    }
+    protected virtual void OnUpdate() {
+      if ((UpdateEnabled) && (Update != null)) {
+        Update(this, new EventArgs());
+      }
+    }
+    private void Group_Update(object sender, EventArgs e) {
+      OnUpdate();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.Designer.cs	(revision 1270)
@@ -0,0 +1,205 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Charting {
+  partial class ChartControl {
+    /// <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.pictureBox = new System.Windows.Forms.PictureBox();
+      this.pictureBoxContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.moveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.zoomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.selectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+      this.oneLayerUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.oneLayerDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.intoForegroundToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.intoBackgroundToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripSeparator();
+      this.propertiesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.pictureBoxContextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.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.pictureBox.BackColor = System.Drawing.Color.White;
+      this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.pictureBox.ContextMenuStrip = this.pictureBoxContextMenuStrip;
+      this.pictureBox.Location = new System.Drawing.Point(0, 0);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(266, 236);
+      this.pictureBox.TabIndex = 0;
+      this.pictureBox.TabStop = false;
+      this.pictureBox.VisibleChanged += new System.EventHandler(this.pictureBox_VisibleChanged);
+      this.pictureBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDown);
+      this.pictureBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseMove);
+      this.pictureBox.MouseUp += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseUp);
+      this.pictureBox.SizeChanged += new System.EventHandler(this.pictureBox_SizeChanged);
+      // 
+      // pictureBoxContextMenuStrip
+      // 
+      this.pictureBoxContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.moveToolStripMenuItem,
+            this.zoomToolStripMenuItem,
+            this.selectToolStripMenuItem,
+            this.toolStripMenuItem1,
+            this.oneLayerUpToolStripMenuItem,
+            this.oneLayerDownToolStripMenuItem,
+            this.intoForegroundToolStripMenuItem,
+            this.intoBackgroundToolStripMenuItem,
+            this.toolStripMenuItem2,
+            this.propertiesToolStripMenuItem});
+      this.pictureBoxContextMenuStrip.Name = "pictureBoxContextMenuStrip";
+      this.pictureBoxContextMenuStrip.Size = new System.Drawing.Size(165, 192);
+      // 
+      // moveToolStripMenuItem
+      // 
+      this.moveToolStripMenuItem.Checked = true;
+      this.moveToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.moveToolStripMenuItem.Name = "moveToolStripMenuItem";
+      this.moveToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.moveToolStripMenuItem.Text = "&Move";
+      this.moveToolStripMenuItem.Click += new System.EventHandler(this.moveToolStripMenuItem_Click);
+      // 
+      // zoomToolStripMenuItem
+      // 
+      this.zoomToolStripMenuItem.Name = "zoomToolStripMenuItem";
+      this.zoomToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.zoomToolStripMenuItem.Text = "&Zoom";
+      this.zoomToolStripMenuItem.Click += new System.EventHandler(this.zoomToolStripMenuItem_Click);
+      // 
+      // selectToolStripMenuItem
+      // 
+      this.selectToolStripMenuItem.Name = "selectToolStripMenuItem";
+      this.selectToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.selectToolStripMenuItem.Text = "&Select";
+      this.selectToolStripMenuItem.Click += new System.EventHandler(this.selectToolStripMenuItem_Click);
+      // 
+      // toolStripMenuItem1
+      // 
+      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+      this.toolStripMenuItem1.Size = new System.Drawing.Size(161, 6);
+      // 
+      // oneLayerUpToolStripMenuItem
+      // 
+      this.oneLayerUpToolStripMenuItem.Enabled = false;
+      this.oneLayerUpToolStripMenuItem.Name = "oneLayerUpToolStripMenuItem";
+      this.oneLayerUpToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.oneLayerUpToolStripMenuItem.Text = "One Layer &Up";
+      this.oneLayerUpToolStripMenuItem.Click += new System.EventHandler(this.oneLayerUpToolStripMenuItem_Click);
+      // 
+      // oneLayerDownToolStripMenuItem
+      // 
+      this.oneLayerDownToolStripMenuItem.Enabled = false;
+      this.oneLayerDownToolStripMenuItem.Name = "oneLayerDownToolStripMenuItem";
+      this.oneLayerDownToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.oneLayerDownToolStripMenuItem.Text = "OneLayer &Down";
+      this.oneLayerDownToolStripMenuItem.Click += new System.EventHandler(this.oneLayerDownToolStripMenuItem_Click);
+      // 
+      // intoForegroundToolStripMenuItem
+      // 
+      this.intoForegroundToolStripMenuItem.Enabled = false;
+      this.intoForegroundToolStripMenuItem.Name = "intoForegroundToolStripMenuItem";
+      this.intoForegroundToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.intoForegroundToolStripMenuItem.Text = "Into &Foreground";
+      this.intoForegroundToolStripMenuItem.Click += new System.EventHandler(this.intoForegroundToolStripMenuItem_Click);
+      // 
+      // intoBackgroundToolStripMenuItem
+      // 
+      this.intoBackgroundToolStripMenuItem.Enabled = false;
+      this.intoBackgroundToolStripMenuItem.Name = "intoBackgroundToolStripMenuItem";
+      this.intoBackgroundToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.intoBackgroundToolStripMenuItem.Text = "Into &Background";
+      this.intoBackgroundToolStripMenuItem.Click += new System.EventHandler(this.intoBackgroundToolStripMenuItem_Click);
+      // 
+      // toolStripMenuItem2
+      // 
+      this.toolStripMenuItem2.Name = "toolStripMenuItem2";
+      this.toolStripMenuItem2.Size = new System.Drawing.Size(161, 6);
+      // 
+      // propertiesToolStripMenuItem
+      // 
+      this.propertiesToolStripMenuItem.Enabled = false;
+      this.propertiesToolStripMenuItem.Name = "propertiesToolStripMenuItem";
+      this.propertiesToolStripMenuItem.Size = new System.Drawing.Size(164, 22);
+      this.propertiesToolStripMenuItem.Text = "&Properties";
+      this.propertiesToolStripMenuItem.Click += new System.EventHandler(this.propertiesToolStripMenuItem_Click);
+      // 
+      // ChartControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.Controls.Add(this.pictureBox);
+      this.Name = "ChartControl";
+      this.Size = new System.Drawing.Size(266, 236);
+      this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ChartControl_KeyDown);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.pictureBoxContextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.PictureBox pictureBox;
+    protected System.Windows.Forms.ToolTip toolTip;
+    protected System.Windows.Forms.ContextMenuStrip pictureBoxContextMenuStrip;
+    protected System.Windows.Forms.ToolStripMenuItem moveToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem zoomToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem selectToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+    protected System.Windows.Forms.ToolStripMenuItem propertiesToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem oneLayerUpToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem oneLayerDownToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem intoForegroundToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripMenuItem intoBackgroundToolStripMenuItem;
+    protected System.Windows.Forms.ToolStripSeparator toolStripMenuItem2;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.cs	(revision 1270)
@@ -0,0 +1,224 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public partial class ChartControl : UserControl {
+    private Bitmap bitmap;
+    private bool renderingRequired;
+    private Point buttonDownPoint;
+    private Point mousePosition;
+    private int mouseClickCount;
+
+    private Chart myChart;
+    public Chart Chart {
+      get { return myChart; }
+      set {
+        if (myChart != null) myChart.Update -= new EventHandler(myChart_Update);
+        myChart = value;
+        if (myChart != null) {
+          myChart.Update += new EventHandler(myChart_Update);
+          SetMode(Chart.Mode);
+        }
+        GenerateImage();
+      }
+    }
+    private bool myScaleOnResize;
+    public bool ScaleOnResize {
+      get { return myScaleOnResize; }
+      set { myScaleOnResize = value; }
+    }
+
+    public ChartControl() {
+      InitializeComponent();
+      myScaleOnResize = true;
+      GenerateImage();
+    }
+
+    private void myChart_Update(object sender, EventArgs e) {
+      GenerateImage();
+    }
+    private void pictureBox_SizeChanged(object sender, EventArgs e) {
+      if (ScaleOnResize) {
+        if ((pictureBox.Width > 0) && (pictureBox.Height > 0) && (Chart != null)) {
+          PointD point = Chart.TransformPixelToWorld(new Point(pictureBox.Width, Chart.SizeInPixels.Height - pictureBox.Height));
+          Chart.SetPosition(Chart.LowerLeft, point);
+        }
+      }
+      GenerateImage();
+    }
+    private void pictureBox_VisibleChanged(object sender, EventArgs e) {
+      if (pictureBox.Visible && renderingRequired) {
+        GenerateImage();
+      }
+    }
+
+    private void pictureBox_MouseDown(object sender, MouseEventArgs e) {
+      buttonDownPoint = e.Location;
+      mouseClickCount = e.Clicks;
+    }
+    private void pictureBox_MouseUp(object sender, MouseEventArgs e) {
+      if (e.Button == MouseButtons.Left) {
+        if (Chart.Mode == ChartMode.Zoom) {
+          pictureBox.Refresh();
+          Point lowerLeft = new Point(Math.Min(e.X, buttonDownPoint.X),
+                                      Math.Max(e.Y, buttonDownPoint.Y));
+          Point upperRight = new Point(Math.Max(e.X, buttonDownPoint.X),
+                                       Math.Min(e.Y, buttonDownPoint.Y));
+          if ((lowerLeft.X != upperRight.X) && (lowerLeft.Y != upperRight.Y)) {
+            Chart.ZoomIn(lowerLeft, upperRight);
+          }
+        }
+      } else if (e.Button == MouseButtons.Right) {
+        propertiesToolStripMenuItem.Enabled = Chart.Group.SelectedPrimitives.Count == 1;
+        oneLayerUpToolStripMenuItem.Enabled = Chart.Group.SelectedPrimitives.Count == 1;
+        oneLayerDownToolStripMenuItem.Enabled = Chart.Group.SelectedPrimitives.Count == 1;
+        intoForegroundToolStripMenuItem.Enabled = Chart.Group.SelectedPrimitives.Count == 1;
+        intoBackgroundToolStripMenuItem.Enabled = Chart.Group.SelectedPrimitives.Count == 1;
+      } else if (e.Button == MouseButtons.Middle) {
+        if (Chart.Mode == ChartMode.Zoom) {
+          if (mouseClickCount == 1) Chart.ZoomOut();
+          else if (mouseClickCount == 2) Chart.Unzoom();
+        }
+      }
+      if (buttonDownPoint == e.Location) {
+        if (mouseClickCount == 1)
+          Chart.MouseClick(e.Location, e.Button);
+        else if (mouseClickCount == 2)
+          Chart.MouseDoubleClick(e.Location, e.Button);
+      }
+    }
+    private void pictureBox_MouseMove(object sender, MouseEventArgs e) {
+      toolTip.SetToolTip(pictureBox, Chart.GetToolTipText(e.Location));
+      Cursor cursor = Chart.GetCursor(e.Location);
+      if (cursor != null) pictureBox.Cursor = cursor;
+      else pictureBox.Cursor = Cursors.Default;
+
+      if (e.Button != MouseButtons.None) {
+        if ((Chart.Mode == ChartMode.Zoom) && (e.Button == MouseButtons.Left)) {
+          pictureBox.Refresh();
+          Graphics graphics = pictureBox.CreateGraphics();
+          Pen pen = new Pen(Color.Gray);
+          pen.DashStyle = DashStyle.Dash;
+          graphics.DrawRectangle(pen,
+                                 Math.Min(e.X, buttonDownPoint.X),
+                                 Math.Min(e.Y, buttonDownPoint.Y),
+                                 Math.Abs(e.X - buttonDownPoint.X),
+                                 Math.Abs(e.Y - buttonDownPoint.Y));
+          pen.Dispose();
+          graphics.Dispose();
+        }
+        Chart.MouseDrag(mousePosition, e.Location, e.Button);
+      } else {
+        Chart.MouseMove(mousePosition, e.Location);
+      }
+      mousePosition = e.Location;
+    }
+
+    private void ChartControl_KeyDown(object sender, KeyEventArgs e) {
+      if (Chart.Mode == ChartMode.Select) {
+        if (e.KeyCode == Keys.Delete) {
+          IList<IPrimitive> selected = Chart.Group.SelectedPrimitives;
+          Chart.UpdateEnabled = false;
+          foreach (IPrimitive primitive in selected)
+            Chart.Group.Remove(primitive);
+          Chart.UpdateEnabled = true;
+          Chart.EnforceUpdate();
+        }
+      }
+    }
+
+    private void moveToolStripMenuItem_Click(object sender, EventArgs e) {
+      SetMode(ChartMode.Move);
+    }
+    private void zoomToolStripMenuItem_Click(object sender, EventArgs e) {
+      SetMode(ChartMode.Zoom);
+    }
+    private void selectToolStripMenuItem_Click(object sender, EventArgs e) {
+      SetMode(ChartMode.Select);
+    }
+    private void oneLayerUpToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (Chart.Group.SelectedPrimitives.Count == 1) {
+        Chart.Group.SelectedPrimitives[0].OneLayerUp();
+      }
+    }
+    private void oneLayerDownToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (Chart.Group.SelectedPrimitives.Count == 1) {
+        Chart.Group.SelectedPrimitives[0].OneLayerDown();
+      }
+    }
+    private void intoForegroundToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (Chart.Group.SelectedPrimitives.Count == 1) {
+        Chart.Group.SelectedPrimitives[0].IntoForeground();
+      }
+    }
+    private void intoBackgroundToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (Chart.Group.SelectedPrimitives.Count == 1) {
+        Chart.Group.SelectedPrimitives[0].IntoBackground();
+      }
+    }
+    private void propertiesToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (Chart.Group.SelectedPrimitives.Count == 1) {
+        PropertiesDialog dialog = new PropertiesDialog(Chart.Group.SelectedPrimitives[0]);
+        dialog.ShowDialog(this);
+        dialog.Dispose();
+      }
+    }
+
+    private void GenerateImage() {
+      if (!Visible) {
+        renderingRequired = true;
+      } else {
+        if ((pictureBox.Width == 0) || (pictureBox.Height == 0)) {
+          bitmap = null;
+        } else {
+          bitmap = new Bitmap(pictureBox.Width, pictureBox.Height);
+          if (Chart != null) {
+            Graphics graphics = Graphics.FromImage(bitmap);
+            graphics.SetClip(new System.Drawing.Rectangle(0, 0, pictureBox.Width, pictureBox.Height));
+            Chart.Render(graphics, pictureBox.Width, pictureBox.Height);
+            graphics.Dispose();
+          }
+        }
+        pictureBox.Image = bitmap;
+        renderingRequired = false;
+      }
+    }
+
+    private void SetMode(ChartMode mode) {
+      moveToolStripMenuItem.Checked = false;
+      zoomToolStripMenuItem.Checked = false;
+      selectToolStripMenuItem.Checked = false;
+      if (mode == ChartMode.Move) moveToolStripMenuItem.Checked = true;
+      else if (mode == ChartMode.Zoom) zoomToolStripMenuItem.Checked = true;
+      else if (mode == ChartMode.Select) selectToolStripMenuItem.Checked = true;
+      Chart.Mode = mode;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartControl.resx	(revision 1270)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="pictureBoxContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>102, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartMode.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartMode.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ChartMode.cs	(revision 1270)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Charting {
+  public enum ChartMode {
+    Move,
+    Zoom,
+    Select
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ClassDiagram.cd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ClassDiagram.cd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/ClassDiagram.cd	(revision 1270)
@@ -0,0 +1,154 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
+  <Font Name="Tahoma" Size="8.25" />
+  <Class Name="HeuristicLab.Charting.Chart" Collapsed="true" BaseTypeListCollapsed="true">
+    <Position X="36.75" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Chart.cs</FileName>
+      <HashCode>IAQAhGIABIACwAKAFAAAAAAiEAMBAgCEABgYARGAAAA=</HashCode>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" Collapsed="true" />
+  </Class>
+  <Class Name="HeuristicLab.Charting.ChartControl" Collapsed="true">
+    <Position X="38.5" Y="0.5" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>ChartControl.cs</FileName>
+      <HashCode>AgLgCIQBECBAogCCDCCACgBuEKAAAgAEASAAAACAAiA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.Ellipse">
+    <Position X="6.5" Y="14.5" Width="5.25" />
+    <TypeIdentifier>
+      <FileName>Primitives\Ellipse.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.FixedSizeCircle">
+    <Position X="25" Y="13.75" Width="5" />
+    <TypeIdentifier>
+      <FileName>Primitives\FixedSizeCircle.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.FixedSizePrimitiveBase">
+    <Position X="27.75" Y="9.5" Width="5.25" />
+    <TypeIdentifier>
+      <FileName>Primitives\FixedSizePrimitiveBase.cs</FileName>
+      <HashCode>AAAAABAAAIAAgAAAAAAAAAAAAIAAAgAAAAAAAAAAABA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.FixedSizeRectangle">
+    <Position X="30.75" Y="13.75" Width="5" />
+    <TypeIdentifier>
+      <FileName>Primitives\FixedSizeRectangle.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.Group">
+    <Position X="2" Y="9.5" Width="3.75" />
+    <TypeIdentifier>
+      <FileName>Primitives\Group.cs</FileName>
+      <HashCode>AAIAAAAAAIAABgAAAAAABBACAAIACEAAgAIQAABWABo=</HashCode>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Charting.Line">
+    <Position X="19.25" Y="14.75" Width="4.25" />
+    <TypeIdentifier>
+      <FileName>Primitives\Line.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.LinearPrimitiveBase">
+    <Position X="18.5" Y="9.5" Width="5.75" />
+    <TypeIdentifier>
+      <FileName>Primitives\LinearPrimitiveBase.cs</FileName>
+      <HashCode>AAIAEAAAAKAEggIAAAAAAABAAACAAgAAAAAQAAAAABA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.PrimitiveBase">
+    <Position X="16.5" Y="0.5" Width="5" />
+    <TypeIdentifier>
+      <FileName>Primitives\PrimitiveBase.cs</FileName>
+      <HashCode>AAQADEIAAIAiiiJAAAAAABAAEAIASgAAAAoYAAGCARI=</HashCode>
+    </TypeIdentifier>
+    <Lollipop Position="0.2" />
+  </Class>
+  <Class Name="HeuristicLab.Charting.Rectangle">
+    <Position X="12.5" Y="14.5" Width="5.25" />
+    <TypeIdentifier>
+      <FileName>Primitives\Rectangle.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAABA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.RectangularPrimitiveBase">
+    <Position X="9" Y="9.5" Width="6.25" />
+    <TypeIdentifier>
+      <FileName>Primitives\RectangularPrimitiveBase.cs</FileName>
+      <HashCode>AAAAECAABIAAggKAAAAAAAAAAAAAAgAAAAAQAQAAABA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.SelectionRectangle">
+    <Position X="31.25" Y="16.25" Width="4" />
+    <TypeIdentifier>
+      <FileName>Primitives\SelectionRectangle.cs</FileName>
+      <HashCode>AAAAAAAAAAAAAAEAAIAAAAAAAAAAAAAAAAAQAAAAAAA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Class Name="HeuristicLab.Charting.PropertiesDialog" Collapsed="true">
+    <Position X="36.75" Y="1.5" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>PropertiesDialog.cs</FileName>
+      <HashCode>AAAAAAAAACAAAAAAAACAAAACGAAAEAAAAAAAAAAAAAA=</HashCode>
+    </TypeIdentifier>
+  </Class>
+  <Struct Name="HeuristicLab.Charting.Offset" Collapsed="true">
+    <Position X="36.75" Y="2.75" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Structs\Offset.cs</FileName>
+      <HashCode>AAJABAAAAAAAQAAEwAMCAABAAAAYAIgAAAAAAAAAAiA=</HashCode>
+    </TypeIdentifier>
+  </Struct>
+  <Struct Name="HeuristicLab.Charting.PointD" Collapsed="true">
+    <Position X="38.5" Y="2.75" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Structs\PointD.cs</FileName>
+      <HashCode>AAJABAAAAAAAAgAEwBMCAAAAAAAAAIAAAAAAAAAAYiA=</HashCode>
+    </TypeIdentifier>
+  </Struct>
+  <Struct Name="HeuristicLab.Charting.SizeD" Collapsed="true">
+    <Position X="36.75" Y="3.75" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Structs\SizeD.cs</FileName>
+      <HashCode>AAJABAAABAAAAkAEwAMCAEAAAAAAAIAAAgAAAAAAAiA=</HashCode>
+    </TypeIdentifier>
+  </Struct>
+  <Interface Name="HeuristicLab.Charting.IChart" Collapsed="true">
+    <Position X="36.75" Y="5" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>Interfaces\IChart.cs</FileName>
+      <HashCode>IAQABEIAAIAAgAKAEAAAAAAiEAIBAgCEABAYAQCAAAA=</HashCode>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Charting.IGroup">
+    <Position X="1.25" Y="24.5" Width="3.75" />
+    <TypeIdentifier>
+      <FileName>Interfaces\IGroup.cs</FileName>
+      <HashCode>AAIAAAAAAAAABAAAAAAABBACAAAACEAAAAIAAABWAAA=</HashCode>
+    </TypeIdentifier>
+  </Interface>
+  <Interface Name="HeuristicLab.Charting.IPrimitive">
+    <Position X="0.5" Y="17.5" Width="5" />
+    <TypeIdentifier>
+      <FileName>Interfaces\IPrimitive.cs</FileName>
+      <HashCode>AAQABEIAAIAgiiIAAAAAABAAEAIACAAAAAIYAACCABI=</HashCode>
+    </TypeIdentifier>
+  </Interface>
+  <Enum Name="HeuristicLab.Charting.ChartMode" Collapsed="true">
+    <Position X="36.75" Y="6" Width="1.5" />
+    <TypeIdentifier>
+      <FileName>ChartMode.cs</FileName>
+      <HashCode>AAAAAAAAAIAAAAAAEAAAAAAAAAAAAAAAAAAAQAAAAAA=</HashCode>
+    </TypeIdentifier>
+  </Enum>
+</ClassDiagram>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/HeuristicLab.Charting.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/HeuristicLab.Charting.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/HeuristicLab.Charting.csproj	(revision 1270)
@@ -0,0 +1,139 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B462D3CC-8866-42F0-9832-AD0967613B72}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Charting</RootNamespace>
+    <AssemblyName>HeuristicLab.Charting-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Charting-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Charting-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Chart.cs" />
+    <Compile Include="ChartControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ChartControl.designer.cs">
+      <DependentUpon>ChartControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ChartMode.cs" />
+    <Compile Include="AxisType.cs" />
+    <Compile Include="HeuristicLabChartingPlugin.cs" />
+    <Compile Include="Interfaces\IGroup.cs" />
+    <Compile Include="Interfaces\IChart.cs" />
+    <Compile Include="Interfaces\IPrimitive.cs" />
+    <Compile Include="Primitives\Axis.cs" />
+    <Compile Include="Primitives\AxisPrimitiveBase.cs" />
+    <Compile Include="Primitives\LinearPrimitiveBase.cs" />
+    <Compile Include="Primitives\RectangularPrimitiveBase.cs" />
+    <Compile Include="Primitives\Ellipse.cs" />
+    <Compile Include="Primitives\FixedSizeCircle.cs" />
+    <Compile Include="Primitives\FixedSizePrimitiveBase.cs" />
+    <Compile Include="Primitives\FixedSizeRectangle.cs" />
+    <Compile Include="Primitives\Group.cs" />
+    <Compile Include="Primitives\Line.cs" />
+    <Compile Include="Primitives\PrimitiveBase.cs" />
+    <Compile Include="Primitives\Rectangle.cs" />
+    <Compile Include="Primitives\SelectionRectangle.cs" />
+    <Compile Include="PropertiesDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="PropertiesDialog.designer.cs">
+      <DependentUpon>PropertiesDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Structs\Offset.cs" />
+    <Compile Include="Structs\PointD.cs" />
+    <Compile Include="Structs\SizeD.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ChartControl.resx">
+      <DependentUpon>ChartControl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PropertiesDialog.resx">
+      <DependentUpon>PropertiesDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="ClassDiagram.cd" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/HeuristicLabChartingPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/HeuristicLabChartingPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/HeuristicLabChartingPlugin.cs	(revision 1270)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Charting {
+  [ClassInfo(Name = "HeuristicLab.Charting-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Charting-3.2.dll", Filetype = PluginFileType.Assembly)]
+  public class HeuristicLabChartingPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IChart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IChart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IChart.cs	(revision 1270)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public interface IChart {
+    ChartMode Mode { get; set; }
+    PointD LowerLeft { get; }
+    PointD UpperRight { get; }
+    SizeD Size { get; }
+    Size SizeInPixels { get; }
+    SizeD PixelToWorldRatio { get; }
+    SizeD WorldToPixelRatio { get; }
+    IGroup Group { get; }
+    bool UpdateEnabled { get; }
+
+    PointD TransformPixelToWorld(Point point);
+    SizeD TransformPixelToWorld(Size size);
+    Point TransformWorldToPixel(PointD point);
+    Size TransformWorldToPixel(SizeD size);
+
+    void SetPosition(PointD lowerLeft, PointD upperRight);
+    void SetPosition(double x1, double y1, double x2, double y2);
+    void Move(Offset delta);
+    void Move(double dx, double dy);
+
+    void ZoomIn(PointD lowerLeft, PointD upperRight);
+    void ZoomIn(double x1, double y1, double x2, double y2);
+    void ZoomIn(Point lowerLeft, Point upperRight);
+    void ZoomIn(int x1, int y1, int x2, int y2);
+    void ZoomOut();
+    void Unzoom();
+
+    IPrimitive GetPrimitive(Point point);
+    IPrimitive GetPrimitive(int x, int y);
+    IList<IPrimitive> GetAllPrimitives(Point point);
+    IList<IPrimitive> GetAllPrimitives(int x, int y);
+
+    Cursor GetCursor(Point point);
+    Cursor GetCursor(int x, int y);
+    string GetToolTipText(Point point);
+    string GetToolTipText(int x, int y);
+
+    void MouseClick(Point point, MouseButtons button);
+    void MouseClick(int x, int y, MouseButtons button);
+    void MouseDoubleClick(Point point, MouseButtons button);
+    void MouseDoubleClick(int x, int y, MouseButtons button);
+    void MouseMove(Point start, Point end);
+    void MouseMove(int x1, int y1, int x2, int y2);
+    void MouseDrag(Point start, Point end, MouseButtons button);
+    void MouseDrag(int x1, int y1, int x2, int y2, MouseButtons button);
+
+    void Render(Graphics graphics, int width, int height);
+
+    event EventHandler Update;
+    void EnforceUpdate();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IGroup.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IGroup.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IGroup.cs	(revision 1270)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Text;
+
+namespace HeuristicLab.Charting {
+  public interface IGroup : IPrimitive {
+    ReadOnlyCollection<IPrimitive> Primitives { get; }
+    ReadOnlyCollection<IPrimitive> SelectedPrimitives { get; }
+
+    void Add(IPrimitive primitive);
+    void AddRange(IEnumerable<IPrimitive> primitives);
+    bool Contains(IPrimitive primitive);
+    bool Remove(IPrimitive primitive);
+    void Clear();
+
+    IPrimitive GetPrimitive(PointD point);
+    IPrimitive GetPrimitive(double x, double y);
+    IList<IPrimitive> GetAllPrimitives(PointD point);
+    IList<IPrimitive> GetAllPrimitives(double x, double y);
+
+    void OneLayerUp(IPrimitive primitive);
+    void OneLayerDown(IPrimitive primitive);
+    void IntoForeground(IPrimitive primitive);
+    void IntoBackground(IPrimitive primitive);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IPrimitive.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IPrimitive.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Interfaces/IPrimitive.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public interface IPrimitive {
+    IChart Chart { get; }
+    IGroup Group { get; set; }
+    Pen Pen { get; set; }
+    Brush Brush { get; set; }
+    bool UpdateEnabled { get; }
+    bool Selected { get; set; }
+    string ToolTipText { get; set; }
+    object Tag { get; set; }
+
+    void Move(Offset delta);
+    void Move(double dx, double dy);
+
+    bool ContainsPoint(PointD point);
+    bool ContainsPoint(double x, double y);
+
+    Cursor GetCursor(PointD point);
+    Cursor GetCursor(double x, double y);
+    string GetToolTipText(PointD point);
+    string GetToolTipText(double x, double y);
+
+    void OneLayerUp();
+    void OneLayerDown();
+    void IntoForeground();
+    void IntoBackground();
+
+    void MouseClick(PointD point, MouseButtons button);
+    void MouseClick(double x, double y, MouseButtons button);
+    void MouseDoubleClick(PointD point, MouseButtons button);
+    void MouseDoubleClick(double x, double y, MouseButtons button);
+    void MouseMove(PointD point, Offset offset);
+    void MouseMove(double x, double y, double dx, double dy);
+    void MouseDrag(PointD point, Offset offset, MouseButtons button);
+    void MouseDrag(double x, double y, double dx, double dy, MouseButtons button);
+
+    void PreDraw(Graphics graphics);
+    void Draw(Graphics graphics);
+    void PostDraw(Graphics graphics);
+
+    event EventHandler Update;
+    void EnforceUpdate();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Axis.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Axis.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Axis.cs	(revision 1270)
@@ -0,0 +1,132 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public class Axis : AxisPrimitiveBase {
+    public Axis(IChart chart, PointD point, AxisType axisType)
+      : base(chart, point, axisType) {
+    }
+    public Axis(IChart chart, double x, double y, AxisType axisType)
+      : this(chart, new PointD(x, y), axisType) {
+    }
+    public Axis(IChart chart, PointD point, AxisType axisType, Pen pen, Brush brush)
+      : base(chart, point, axisType, pen, brush) {
+    }
+    public Axis(IChart chart, double x, double y, AxisType axisType, Pen pen, Brush brush)
+      : this(chart, new PointD(x, y), axisType, pen, brush) {
+    }
+
+    public override void Draw(Graphics graphics) {
+      int pixelsPerInterval = 100;
+      Font axisValuesFont = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Regular, GraphicsUnit.Pixel);
+      Font axisLabelsFont = new Font(FontFamily.GenericSansSerif, 14, FontStyle.Regular, GraphicsUnit.Pixel);
+
+      if ((AxisType & AxisType.Horizontal) == AxisType.Horizontal) {
+        int intervals = Chart.SizeInPixels.Width / pixelsPerInterval;
+
+        if (intervals > 0) {
+          double step = (Chart.UpperRight.X - Chart.LowerLeft.X) / intervals;
+          step = Math.Pow(10, Math.Floor(Math.Log10(step)));
+          if ((Chart.UpperRight.X - Chart.LowerLeft.X) / (step * 5) > intervals)
+            step = step * 5;
+          else if ((Chart.UpperRight.X - Chart.LowerLeft.X) / (step * 2) > intervals)
+            step = step * 2;
+
+          double x = Math.Floor(Chart.LowerLeft.X / step) * step;
+          PointD current = new PointD(x, Point.Y);
+          while (current.X <= Chart.UpperRight.X) {
+            Point p = Chart.TransformWorldToPixel(current);
+            if (ShowGrid)
+              graphics.DrawLine(Pens.LightGray, p.X, 0, p.X, Chart.SizeInPixels.Height);
+            graphics.DrawLine(Pen, p.X, p.Y - 3, p.X, p.Y + 3);
+            graphics.DrawString(current.X.ToString(),
+                                axisValuesFont,
+                                Brush,
+                                p.X,
+                                p.Y + 5,
+                                StringFormat.GenericDefault);
+            current.X = current.X + step;
+          }
+          if ((HorizontalLabel != null) && (HorizontalLabel != "")) {
+            Point p = Chart.TransformWorldToPixel(Point);
+            graphics.DrawString(HorizontalLabel,
+                                axisLabelsFont,
+                                Brush,
+                                Chart.SizeInPixels.Width - 20,
+                                p.Y + 20,
+                                new StringFormat(StringFormatFlags.DirectionRightToLeft));
+          }
+        }
+      }
+      if ((AxisType & AxisType.Vertical) == AxisType.Vertical) {
+        int intervals = Chart.SizeInPixels.Height / pixelsPerInterval;
+
+        if (intervals > 0) {
+          double step = (Chart.UpperRight.Y - Chart.LowerLeft.Y) / intervals;
+          step = Math.Pow(10, Math.Floor(Math.Log10(step)));
+          if ((Chart.UpperRight.Y - Chart.LowerLeft.Y) / (step * 5) > intervals)
+            step = step * 5;
+          else if ((Chart.UpperRight.Y - Chart.LowerLeft.Y) / (step * 2) > intervals)
+            step = step * 2;
+
+          double y = Math.Floor(Chart.LowerLeft.Y / step) * step;
+          PointD current = new PointD(Point.X, y);
+          while (current.Y <= Chart.UpperRight.Y) {
+            Point p = Chart.TransformWorldToPixel(current);
+            if (ShowGrid)
+              graphics.DrawLine(Pens.LightGray, 0, p.Y, Chart.SizeInPixels.Width, p.Y);
+            graphics.DrawLine(Pen, p.X - 3, p.Y, p.X + 3, p.Y);
+            graphics.DrawString(current.Y.ToString(),
+                                axisValuesFont,
+                                Brush,
+                                p.X + 5,
+                                p.Y,
+                                StringFormat.GenericDefault);
+            current.Y = current.Y + step;
+          }
+          if ((VerticalLabel != null) && (VerticalLabel != "")) {
+            Point p = Chart.TransformWorldToPixel(Point);
+            graphics.DrawString(VerticalLabel,
+                                axisLabelsFont,
+                                Brush,
+                                p.X - 20,
+                                20,
+                                new StringFormat(StringFormatFlags.DirectionRightToLeft | StringFormatFlags.DirectionVertical));
+          }
+        }
+      }
+      if ((AxisType & AxisType.Horizontal) == AxisType.Horizontal) {
+        Point p = Chart.TransformWorldToPixel(Point);
+        graphics.DrawLine(Pen, 0, p.Y, Chart.SizeInPixels.Width, p.Y);
+      }
+      if ((AxisType & AxisType.Vertical) == AxisType.Vertical) {
+        Point p = Chart.TransformWorldToPixel(Point);
+        graphics.DrawLine(Pen, p.X, 0, p.X, Chart.SizeInPixels.Height);
+      }
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/AxisPrimitiveBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/AxisPrimitiveBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/AxisPrimitiveBase.cs	(revision 1270)
@@ -0,0 +1,109 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public abstract class AxisPrimitiveBase : PrimitiveBase {
+    private AxisType myAxisType;
+    public AxisType AxisType {
+      get { return myAxisType; }
+    }
+    private PointD myPoint;
+    public virtual PointD Point {
+      get { return myPoint; }
+    }
+    private bool myShowGrid;
+    public bool ShowGrid {
+      get { return myShowGrid; }
+      set {
+        if (value != myShowGrid) {
+          myShowGrid = value;
+          OnUpdate();
+        }
+      }
+    }
+    private string myHorizontalLabel;
+    public string HorizontalLabel {
+      get { return myHorizontalLabel; }
+      set {
+        if (value != myHorizontalLabel) {
+          myHorizontalLabel = value;
+          OnUpdate();
+        }
+      }
+    }
+    private string myVerticalLabel;
+    public string VerticalLabel {
+      get { return myVerticalLabel; }
+      set {
+        if (value != myVerticalLabel) {
+          myVerticalLabel = value;
+          OnUpdate();
+        }
+      }
+    }
+
+    protected AxisPrimitiveBase(IChart chart, PointD point, AxisType axisType)
+      : base(chart) {
+      Brush = Brushes.Black;
+      myPoint = point;
+      myAxisType = axisType;
+      myShowGrid = true;
+    }
+    protected AxisPrimitiveBase(IChart chart, double x, double y, AxisType axisType)
+      : this(chart, new PointD(x, y), axisType) {
+    }
+    protected AxisPrimitiveBase(IChart chart, PointD point, AxisType axisType, Pen pen, Brush brush)
+      : base(chart, pen, brush) {
+      myPoint = point;
+      myAxisType = axisType;
+      myShowGrid = true;
+    }
+    protected AxisPrimitiveBase(IChart chart, double x, double y, AxisType axisType, Pen pen, Brush brush)
+      : this(chart, new PointD(x, y), axisType, pen, brush) {
+    }
+
+    public virtual void SetPosition(PointD point) {
+      myPoint = point;
+      OnUpdate();
+    }
+    public void SetPosition(double x, double y) {
+      SetPosition(new PointD(x, y));
+    }
+    public override void Move(Offset delta) {
+      SetPosition(Point + delta);
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      SizeD size = Chart.TransformPixelToWorld(new Size(5, 5));
+      bool result = false;
+      if ((AxisType & AxisType.Horizontal) == AxisType.Horizontal)
+        result = result || (point.Y >= Point.Y - (size.Height / 2)) && (point.Y <= Point.Y + (size.Height / 2));
+      if ((AxisType & AxisType.Vertical) == AxisType.Vertical)
+        result = result || (point.X >= Point.X - (size.Height / 2)) && (point.X <= Point.X + (size.Height / 2));
+      return result;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Ellipse.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Ellipse.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Ellipse.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public class Ellipse : RectangularPrimitiveBase {
+    public Ellipse(IChart chart, PointD lowerLeft, PointD upperRight)
+      : base(chart, lowerLeft, upperRight) {
+    }
+    public Ellipse(IChart chart, double x1, double y1, double x2, double y2)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+    public Ellipse(IChart chart, PointD lowerLeft, PointD upperRight, Pen pen, Brush brush)
+      : base(chart, lowerLeft, upperRight, pen, brush) {
+    }
+    public Ellipse(IChart chart, double x1, double y1, double x2, double y2, Pen pen, Brush brush)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen, brush) {
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      if (base.ContainsPoint(point)) return true;
+
+      PointD midpoint;
+      PointD focus1;
+      PointD focus2;
+      Offset focus1_point;
+      Offset focus2_point;
+
+      double a = Size.Width / 2;   // half length of horizontal axis
+      double b = Size.Height / 2;  // half length of vertical axis
+      midpoint = LowerLeft + new Offset(a, b);
+
+      if (a >= b) {
+        double e = Math.Sqrt(a * a - b * b);  // linear eccentricity
+        focus1 = new PointD(midpoint.X - e, midpoint.Y);
+        focus2 = new PointD(midpoint.X + e, midpoint.Y);
+      } else {
+        double e = Math.Sqrt(b * b - a * a);  // linear eccentricity
+        focus1 = new PointD(midpoint.X, midpoint.Y - e);
+        focus2 = new PointD(midpoint.X, midpoint.Y + e);
+      }
+      focus1_point = focus1 - point;
+      focus2_point = focus2 - point;
+
+      return focus1_point.Length + focus2_point.Length <= 2 * Math.Max(a, b);
+    }
+
+    public override void Draw(Graphics graphics) {
+      Point p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y + Size.Height));
+      Size s = Chart.TransformWorldToPixel(Size);
+      if (Brush != null)
+        graphics.FillEllipse(Brush, p.X, p.Y, s.Width, s.Height);
+      graphics.DrawEllipse(Pen, p.X, p.Y, s.Width, s.Height);
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizeCircle.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizeCircle.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizeCircle.cs	(revision 1270)
@@ -0,0 +1,66 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public class FixedSizeCircle : FixedSizePrimitiveBase {
+    public FixedSizeCircle(IChart chart, PointD point, int diameter)
+      : base(chart, point, new Size(diameter, diameter)) {
+    }
+    public FixedSizeCircle(IChart chart, double x, double y, int diameter)
+      : this(chart, new PointD(x, y), diameter) {
+    }
+    public FixedSizeCircle(IChart chart, PointD point, int diameter, Pen pen, Brush brush)
+      : base(chart, point, new Size(diameter, diameter), pen, brush) {
+    }
+    public FixedSizeCircle(IChart chart, double x, double y, int diameter, Pen pen, Brush brush)
+      : this(chart, new PointD(x, y), diameter, pen, brush) {
+    }
+
+    public override void Draw(Graphics graphics) {
+      Point p = Chart.TransformWorldToPixel(Point);
+
+      graphics.FillEllipse(Brush,
+                           p.X - (Size.Width / 2),
+                           p.Y - (Size.Height / 2),
+                           Size.Width,
+                           Size.Height);
+      graphics.DrawEllipse(Pen,
+                           p.X - (Size.Width / 2),
+                           p.Y - (Size.Height / 2),
+                           Size.Width,
+                           Size.Height);
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      PointD center = Chart.TransformWorldToPixel(this.Point);
+      PointD x = Chart.TransformWorldToPixel(point);
+      double xDistance = x.X - center.X;
+      double yDistance = x.Y - center.Y;
+
+      return Size.Height*Size.Height/4.0 >= (xDistance * xDistance + yDistance * yDistance);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizePrimitiveBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizePrimitiveBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizePrimitiveBase.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public abstract class FixedSizePrimitiveBase : PrimitiveBase {
+    private PointD myPoint;
+    public virtual PointD Point {
+      get { return myPoint; }
+    }
+    private Size mySize;
+    public virtual Size Size {
+      get { return mySize; }
+    }
+
+    protected FixedSizePrimitiveBase(IChart chart, PointD point, Size size)
+      : base(chart) {
+      myPoint = point;
+      mySize = size;
+    }
+    protected FixedSizePrimitiveBase(IChart chart, double x, double y, Size size)
+      : this(chart, new PointD(x, y), size) {
+    }
+    protected FixedSizePrimitiveBase(IChart chart, PointD point, Size size, Pen pen, Brush brush)
+      : base(chart, pen, brush) {
+      myPoint = point;
+      mySize = size;
+    }
+    protected FixedSizePrimitiveBase(IChart chart, double x, double y, Size size, Pen pen, Brush brush)
+      : this(chart, new PointD(x, y), size, pen, brush) {
+    }
+
+    public virtual void SetPosition(PointD point) {
+      myPoint = point;
+      OnUpdate();
+    }
+    public void SetPosition(double x, double y) {
+      SetPosition(new PointD(x, y));
+    }
+    public override void Move(Offset delta) {
+      SetPosition(Point + delta);
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      SizeD size = Chart.TransformPixelToWorld(Size);
+      return (point.X >= Point.X - (size.Width / 2)) && (point.X <= Point.X + (size.Width / 2)) &&
+             (point.Y >= Point.Y - (size.Height / 2)) && (point.Y <= Point.Y + (size.Height / 2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizeRectangle.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizeRectangle.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/FixedSizeRectangle.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public class FixedSizeRectangle : FixedSizePrimitiveBase {
+    public FixedSizeRectangle(IChart chart, PointD point, Size size)
+      : base(chart, point, size) {
+    }
+    public FixedSizeRectangle(IChart chart, double x, double y, Size size)
+      : this(chart, new PointD(x, y), size) {
+    }
+    public FixedSizeRectangle(IChart chart, PointD point, Size size, Pen pen, Brush brush)
+      : base(chart, point, size, pen, brush) {
+    }
+    public FixedSizeRectangle(IChart chart, double x, double y, Size size, Pen pen, Brush brush)
+      : this(chart, new PointD(x, y), size, pen, brush) {
+    }
+
+    public override void Draw(Graphics graphics) {
+      Point p = Chart.TransformWorldToPixel(Point);
+
+      graphics.FillRectangle(Brush,
+                             p.X - (Size.Width / 2),
+                             p.Y - (Size.Height / 2),
+                             Size.Width,
+                             Size.Height);
+      graphics.DrawRectangle(Pen,
+                             p.X - (Size.Width / 2),
+                             p.Y - (Size.Height / 2),
+                             Size.Width,
+                             Size.Height);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Group.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Group.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Group.cs	(revision 1270)
@@ -0,0 +1,204 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public class Group : PrimitiveBase, IGroup {
+    private IList<IPrimitive> myPrimitives;
+    public virtual ReadOnlyCollection<IPrimitive> Primitives {
+      get { return new ReadOnlyCollection<IPrimitive>(myPrimitives); }
+    }
+    public virtual ReadOnlyCollection<IPrimitive> SelectedPrimitives {
+      get {
+        List<IPrimitive> selected = new List<IPrimitive>();
+        foreach (IPrimitive primitive in myPrimitives) {
+          if (primitive.Selected) selected.Add(primitive);
+        }
+        return new ReadOnlyCollection<IPrimitive>(selected);
+      }
+    }
+    public override bool Selected {
+      get { return base.Selected; }
+      set {
+        bool updateEnabled = UpdateEnabled;
+        UpdateEnabled = false;
+        foreach (IPrimitive primitive in myPrimitives)
+          primitive.Selected = value;
+        UpdateEnabled = updateEnabled;
+        base.Selected = value;
+      }
+    }
+
+    public Group(IChart chart)
+      : base(chart) {
+      myPrimitives = new List<IPrimitive>();
+    }
+
+    public virtual void Add(IPrimitive primitive) {
+      if (Contains(primitive))
+        throw new ArgumentException("Primitive already added");
+
+      myPrimitives.Insert(0, primitive);
+      primitive.Group = this;
+      primitive.Update += new EventHandler(primitive_Update);
+      OnUpdate();
+    }
+    public virtual void AddRange(IEnumerable<IPrimitive> primitives) {
+      foreach (IPrimitive primitive in primitives) {
+        if (Contains(primitive))
+          throw new ArgumentException("Primitive already added");
+
+        myPrimitives.Insert(0, primitive);
+        primitive.Group = this;
+        primitive.Update += new EventHandler(primitive_Update);
+      }
+      OnUpdate();
+    }
+    public virtual bool Contains(IPrimitive primitive) {
+      return myPrimitives.Contains(primitive);
+    }
+    public virtual bool Remove(IPrimitive primitive) {
+      if (myPrimitives.Remove(primitive)) {
+        primitive.Group = null;
+        primitive.Update -= new EventHandler(primitive_Update);
+        OnUpdate();
+        return true;
+      } else {
+        return false;
+      }
+    }
+    public virtual void Clear() {
+      foreach (IPrimitive primitive in myPrimitives) {
+        primitive.Group = null;
+        primitive.Update -= new EventHandler(primitive_Update);
+      }
+      myPrimitives.Clear();
+      OnUpdate();
+    }
+
+    public virtual IPrimitive GetPrimitive(PointD point) {
+      int i = 0;
+      while ((i < myPrimitives.Count) && (!myPrimitives[i].ContainsPoint(point)))
+        i++;
+      if (i == myPrimitives.Count) return null;
+      else return myPrimitives[i];
+    }
+    public IPrimitive GetPrimitive(double x, double y) {
+      return GetPrimitive(new PointD(x, y));
+    }
+    public virtual IList<IPrimitive> GetAllPrimitives(PointD point) {
+      List<IPrimitive> primitives = new List<IPrimitive>();
+      for (int i = 0; i < myPrimitives.Count; i++) {
+        if (myPrimitives[i].ContainsPoint(point)) {
+          primitives.Add(myPrimitives[i]);
+          if (myPrimitives[i] is IGroup) {
+            primitives.AddRange(((IGroup)myPrimitives[i]).Primitives);
+          }
+        }
+      }
+      return primitives;
+    }
+    public IList<IPrimitive> GetAllPrimitives(double x, double y) {
+      return GetAllPrimitives(new PointD(x, y));
+    }
+
+    public override void Move(Offset delta) {
+      bool updateEnabled = UpdateEnabled;
+      UpdateEnabled = false;
+      foreach (IPrimitive primitive in myPrimitives)
+        primitive.Move(delta);
+      UpdateEnabled = updateEnabled;
+      OnUpdate();
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      return GetPrimitive(point) != null;
+    }
+
+    public override Cursor GetCursor(PointD point) {
+      IPrimitive primitive = GetPrimitive(point);
+      if (primitive != null) return primitive.GetCursor(point);
+      else return base.GetCursor(point);
+    }
+    public override string GetToolTipText(PointD point) {
+      IPrimitive primitive = GetPrimitive(point);
+      if (primitive != null) return primitive.GetToolTipText(point);
+      else return base.GetToolTipText(point);
+    }
+
+    public void OneLayerUp(IPrimitive primitive) {
+      if (!Contains(primitive))
+        throw new ArgumentException("Primitive not found");
+
+      int index = myPrimitives.IndexOf(primitive);
+      if (index > 0) {
+        myPrimitives.Remove(primitive);
+        myPrimitives.Insert(index - 1, primitive);
+        OnUpdate();
+      }
+    }
+    public void OneLayerDown(IPrimitive primitive) {
+      if (!Contains(primitive))
+        throw new ArgumentException("Primitive not found");
+
+      int index = myPrimitives.IndexOf(primitive);
+      if (index < myPrimitives.Count - 1) {
+        myPrimitives.Remove(primitive);
+        myPrimitives.Insert(index + 1, primitive);
+        OnUpdate();
+      }
+    }
+    public void IntoForeground(IPrimitive primitive) {
+      if (!Contains(primitive))
+        throw new ArgumentException("Primitive not found");
+
+      myPrimitives.Remove(primitive);
+      myPrimitives.Insert(0, primitive);
+      OnUpdate();
+    }
+    public void IntoBackground(IPrimitive primitive) {
+      if (!Contains(primitive))
+        throw new ArgumentException("Primitive not found");
+
+      myPrimitives.Remove(primitive);
+      myPrimitives.Add(primitive);
+      OnUpdate();
+    }
+
+    public override void Draw(Graphics graphics) {
+      for (int i = myPrimitives.Count - 1; i >= 0; i--) {
+        myPrimitives[i].PreDraw(graphics);
+        myPrimitives[i].Draw(graphics);
+        myPrimitives[i].PostDraw(graphics);
+      }
+    }
+
+    private void primitive_Update(object sender, EventArgs e) {
+      OnUpdate();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Line.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Line.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Line.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public class Line : LinearPrimitiveBase {
+    public Line(IChart chart, PointD start, PointD end)
+      : base(chart, start, end) {
+    }
+    public Line(IChart chart, double x1, double y1, double x2, double y2)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+    public Line(IChart chart, PointD start, PointD end, Pen pen)
+      : base(chart, start, end, pen, null) {
+    }
+    public Line(IChart chart, double x1, double y1, double x2, double y2, Pen pen)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen) {
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      if (base.ContainsPoint(point)) return true;
+
+      double penWidthX = Chart.PixelToWorldRatio.Width * (Pen.Width + 1);
+      double penWidthY = Chart.PixelToWorldRatio.Height * (Pen.Width + 1);
+
+      if ((point.X < (Math.Min(Start.X, End.X) - (penWidthX / 2))) ||
+          (point.Y < (Math.Min(Start.Y, End.Y) - (penWidthY / 2))) ||
+          (point.X > (Math.Max(Start.X, End.X) + (penWidthX / 2))) ||
+          (point.Y > (Math.Max(Start.Y, End.Y) + (penWidthY / 2)))) {
+        return false;
+      }
+
+      // calculate distance between point P(X,Y) and line
+      // d(P,g) = |AP.n|/|n|
+      Offset start_end = End - Start;
+      Offset n = new Offset(start_end.DY, -1 * start_end.DX);
+      Offset start_point = point - Start;
+      double d = Math.Abs(start_point.DX * n.DX + start_point.DY * n.DY) / n.Length;
+
+      return d <= Math.Max(penWidthX, penWidthY) / 2;
+    }
+
+    public override void Draw(Graphics graphics) {
+      graphics.DrawLine(Pen, Chart.TransformWorldToPixel(Start), Chart.TransformWorldToPixel(End));
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/LinearPrimitiveBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/LinearPrimitiveBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/LinearPrimitiveBase.cs	(revision 1270)
@@ -0,0 +1,126 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public abstract class LinearPrimitiveBase : PrimitiveBase {
+    protected IGroup selectionRectangles;
+
+    private PointD myStart;
+    public virtual PointD Start {
+      get { return myStart; }
+    }
+    private PointD myEnd;
+    public virtual PointD End {
+      get { return myEnd; }
+    }
+    public virtual SizeD Size {
+      get { return new SizeD(End.X - Start.X, End.Y - Start.Y); }
+    }
+    public virtual double Length {
+      get { return (Start - End).Length; }
+    }
+
+    protected LinearPrimitiveBase(IChart chart, PointD start, PointD end)
+      : base(chart) {
+      selectionRectangles = new Group(chart);
+      myStart = start;
+      myEnd = end;
+    }
+    protected LinearPrimitiveBase(IChart chart, double x1, double y1, double x2, double y2)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+    protected LinearPrimitiveBase(IChart chart, PointD start, PointD end, Pen pen, Brush brush)
+      : base(chart, pen, brush) {
+      selectionRectangles = new Group(chart);
+      myStart = start;
+      myEnd = end;
+    }
+    protected LinearPrimitiveBase(IChart chart, double x1, double y1, double x2, double y2, Pen pen, Brush brush)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen, brush) {
+    }
+
+    public virtual void SetPosition(PointD start, PointD end) {
+      myStart = start;
+      myEnd = end;
+      OnUpdate();
+    }
+    public void SetPosition(double x1, double y1, double x2, double y2) {
+      SetPosition(new PointD(x1, y1), new PointD(x2, y2));
+    }
+    public override void Move(Offset delta) {
+      SetPosition(Start + delta, End + delta);
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      if (Selected) {
+        if (selectionRectangles.GetPrimitive(point) != null) return true;
+      }
+      return false;
+    }
+
+    public override void MouseDrag(PointD point, Offset offset, MouseButtons button) {
+      if (button == MouseButtons.Left) {
+        if (Selected) {
+          if (selectionRectangles.ContainsPoint(point)) {
+            SelectionRectangle rect = (SelectionRectangle)selectionRectangles.GetPrimitive(point);
+            if (rect.Point == Start) {
+              SetPosition(Start + offset, End);
+            } else if (rect.Point == End) {
+              SetPosition(Start, End + offset);
+            }
+          } else {
+            base.MouseDrag(point, offset, button);
+          }
+        }
+      }
+    }
+
+    public override Cursor GetCursor(PointD point) {
+      if (Selected) {
+        Cursor cursor = selectionRectangles.GetCursor(point);
+        if (cursor != null) return cursor;
+      }
+      return base.GetCursor(point);
+    }
+
+    public override void PostDraw(Graphics graphics) {
+      selectionRectangles.Clear();
+      if (Selected) {
+        Pen pen = new Pen(Color.LightGray, 3);
+        pen.DashStyle = DashStyle.Dash;
+        graphics.DrawLine(pen,
+                          Chart.TransformWorldToPixel(Start),
+                          Chart.TransformWorldToPixel(End));
+        selectionRectangles.Add(new SelectionRectangle(Chart, Start, Cursors.SizeAll));
+        selectionRectangles.Add(new SelectionRectangle(Chart, End, Cursors.SizeAll));
+
+        selectionRectangles.Draw(graphics);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/PrimitiveBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/PrimitiveBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/PrimitiveBase.cs	(revision 1270)
@@ -0,0 +1,182 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public abstract class PrimitiveBase : IPrimitive {
+    private IChart myChart;
+    public IChart Chart {
+      get { return myChart; }
+    }
+    private IGroup myGroup;
+    public IGroup Group {
+      get { return myGroup; }
+      set { myGroup = value; }
+    }
+
+    private Pen myPen;
+    public virtual Pen Pen {
+      get { return myPen; }
+      set {
+        myPen = value;
+        OnUpdate();
+      }
+    }
+    private Brush myBrush;
+    public virtual Brush Brush {
+      get { return myBrush; }
+      set {
+        myBrush = value;
+        OnUpdate();
+      }
+    }
+
+    private bool myUpdateEnabled;
+    public bool UpdateEnabled {
+      get { return myUpdateEnabled; }
+      set { myUpdateEnabled = value; }
+    }
+
+    private bool mySelected;
+    public virtual bool Selected {
+      get { return mySelected; }
+      set {
+        mySelected = value;
+        OnUpdate();
+      }
+    }
+
+    private string myToolTipText;
+    public string ToolTipText {
+      get { return myToolTipText; }
+      set { myToolTipText = value; }
+    }
+
+    private object myTag;
+    public object Tag {
+      get { return myTag; }
+      set { myTag = value; }
+    }
+
+    protected PrimitiveBase(IChart chart) {
+      myChart = chart;
+      myGroup = null;
+      myPen = Pens.Black;
+      myBrush = Brushes.White;
+      myUpdateEnabled = true;
+      mySelected = false;
+      myToolTipText = null;
+      myTag = null;
+    }
+    protected PrimitiveBase(IChart chart, Pen pen, Brush brush)
+      : this(chart) {
+      myPen = pen;
+      myBrush = brush;
+    }
+
+    public abstract void Move(Offset delta);
+    public void Move(double dx, double dy) {
+      Move(new Offset(dx, dy));
+    }
+
+    public abstract bool ContainsPoint(PointD point);
+    public bool ContainsPoint(double x, double y) {
+      return ContainsPoint(new PointD(x, y));
+    }
+
+    public virtual Cursor GetCursor(PointD point) {
+      return null;
+    }
+    public Cursor GetCursor(double x, double y) {
+      return GetCursor(new PointD(x, y));
+    }
+    public virtual string GetToolTipText(PointD point) {
+      return ToolTipText;
+    }
+    public string GetToolTipText(double x, double y) {
+      return GetToolTipText(new PointD(x, y));
+    }
+
+    public void OneLayerUp() {
+      Group.OneLayerUp(this);
+    }
+    public void OneLayerDown() {
+      Group.OneLayerDown(this);
+    }
+    public void IntoForeground() {
+      Group.IntoForeground(this);
+    }
+    public void IntoBackground() {
+      Group.IntoBackground(this);
+    }
+
+    public virtual void MouseClick(PointD point, MouseButtons button) {
+      if (button == MouseButtons.Left) {
+        Selected = true;
+      }
+    }
+    public void MouseClick(double x, double y, MouseButtons button) {
+      MouseClick(new PointD(x, y), button);
+    }
+    public virtual void MouseDoubleClick(PointD point, MouseButtons button) {
+    }
+    public void MouseDoubleClick(double x, double y, MouseButtons button) {
+      MouseDoubleClick(new PointD(x, y), button);
+    }
+    public virtual void MouseMove(PointD point, Offset offset) {
+    }
+    public void MouseMove(double x, double y, double dx, double dy) {
+      MouseMove(new PointD(x, y), new Offset(dx, dy));
+    }
+    public virtual void MouseDrag(PointD point, Offset offset, MouseButtons button) {
+      if (button == MouseButtons.Left) {
+        Move(offset);
+      }
+    }
+    public void MouseDrag(double x, double y, double dx, double dy, MouseButtons button) {
+      MouseDrag(new PointD(x, y), new Offset(dx, dy), button);
+    }
+
+    public virtual void PreDraw(Graphics graphics) {
+    }
+    public virtual void Draw(Graphics graphics) {
+    }
+    public virtual void PostDraw(Graphics graphics) {
+    }
+
+    public event EventHandler Update;
+    public void EnforceUpdate() {
+      if (Update != null) {
+        Update(this, new EventArgs());
+      }
+    }
+    protected virtual void OnUpdate() {
+      if ((UpdateEnabled) && (Update != null)) {
+        Update(this, new EventArgs());
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Rectangle.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Rectangle.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/Rectangle.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public class Rectangle : RectangularPrimitiveBase {
+    public Rectangle(IChart chart, PointD lowerLeft, PointD upperRight)
+      : base(chart, lowerLeft, upperRight) {
+    }
+    public Rectangle(IChart chart, double x1, double y1, double x2, double y2)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+    public Rectangle(IChart chart, PointD lowerLeft, PointD upperRight, Pen pen, Brush brush)
+      : base(chart, lowerLeft, upperRight, pen, brush) {
+    }
+    public Rectangle(IChart chart, double x1, double y1, double x2, double y2, Pen pen, Brush brush)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen, brush) {
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      if (base.ContainsPoint(point)) return true;
+      return (point.X >= LowerLeft.X) && (point.X <= UpperRight.X) &&
+             (point.Y >= LowerLeft.Y) && (point.Y <= UpperRight.Y);
+    }
+
+    public override void Draw(Graphics graphics) {
+      Point p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y + Size.Height));
+      Size s = Chart.TransformWorldToPixel(Size);
+      if (Brush != null)
+        graphics.FillRectangle(Brush, p.X, p.Y, s.Width, s.Height);
+      graphics.DrawRectangle(Pen, p.X, p.Y, s.Width, s.Height);
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/RectangularPrimitiveBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/RectangularPrimitiveBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/RectangularPrimitiveBase.cs	(revision 1270)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public abstract class RectangularPrimitiveBase : PrimitiveBase {
+    protected IGroup selectionRectangles;
+
+    private PointD myLowerLeft;
+    public virtual PointD LowerLeft {
+      get { return myLowerLeft; }
+    }
+    private PointD myUpperRight;
+    public virtual PointD UpperRight {
+      get { return myUpperRight; }
+    }
+    public virtual SizeD Size {
+      get { return new SizeD(UpperRight.X - LowerLeft.X, UpperRight.Y - LowerLeft.Y); }
+    }
+
+    protected RectangularPrimitiveBase(IChart chart, PointD lowerLeft, PointD upperRight)
+      : base(chart) {
+      selectionRectangles = new Group(chart);
+      SetPosition(lowerLeft, upperRight);
+    }
+    protected RectangularPrimitiveBase(IChart chart, double x1, double y1, double x2, double y2)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2)) {
+    }
+    protected RectangularPrimitiveBase(IChart chart, PointD lowerLeft, PointD upperRight, Pen pen, Brush brush)
+      : base(chart, pen, brush) {
+      selectionRectangles = new Group(chart);
+      SetPosition(lowerLeft, upperRight);
+    }
+    protected RectangularPrimitiveBase(IChart chart, double x1, double y1, double x2, double y2, Pen pen, Brush brush)
+      : this(chart, new PointD(x1, y1), new PointD(x2, y2), pen, brush) {
+    }
+
+    public virtual void SetPosition(PointD lowerLeft, PointD upperRight) {
+      if ((lowerLeft.X > upperRight.X) || (lowerLeft.Y > upperRight.Y))
+        throw new ArgumentException("Lower left point is greater than upper right point");
+
+      myLowerLeft = lowerLeft;
+      myUpperRight = upperRight;
+      OnUpdate();
+    }
+    public void SetPosition(double x1, double y1, double x2, double y2) {
+      SetPosition(new PointD(x1, y1), new PointD(x2, y2));
+    }
+    public override void Move(Offset delta) {
+      SetPosition(LowerLeft + delta, UpperRight + delta);
+    }
+
+    public override bool ContainsPoint(PointD point) {
+      if (Selected) {
+        if (selectionRectangles.ContainsPoint(point)) return true;
+      }
+      return false;
+    }
+
+    public override void MouseDrag(PointD point, Offset offset, MouseButtons button) {
+      if (button == MouseButtons.Left) {
+        if (Selected) {
+          if (selectionRectangles.ContainsPoint(point)) {
+            SelectionRectangle rect = (SelectionRectangle)selectionRectangles.GetPrimitive(point);
+            PointD point1 = PointD.Empty;
+            PointD point2 = PointD.Empty;
+            if (rect.Point == LowerLeft) {
+              point1 = LowerLeft + offset;
+              point2 = UpperRight;
+            } else if (rect.Point == UpperRight) {
+              point1 = LowerLeft;
+              point2 = UpperRight + offset;
+            } else if ((rect.Point.X == LowerLeft.X) && (rect.Point.Y == UpperRight.Y)) {
+              point1 = new PointD(LowerLeft.X + offset.DX, LowerLeft.Y);
+              point2 = new PointD(UpperRight.X, UpperRight.Y + offset.DY);
+            } else if ((rect.Point.X == UpperRight.X) && (rect.Point.Y == LowerLeft.Y)) {
+              point1 = new PointD(LowerLeft.X, LowerLeft.Y + offset.DY);
+              point2 = new PointD(UpperRight.X + offset.DX, UpperRight.Y);
+            }
+            SetPosition(Math.Min(point1.X, point2.X), Math.Min(point1.Y, point2.Y),
+                        Math.Max(point1.X, point2.X), Math.Max(point1.Y, point2.Y));
+          } else {
+            base.MouseDrag(point, offset, button);
+          }
+        }
+      }
+    }
+
+    public override Cursor GetCursor(PointD point) {
+      if (Selected) {
+        Cursor cursor = selectionRectangles.GetCursor(point);
+        if (cursor != null) return cursor;
+      }
+      return base.GetCursor(point);
+    }
+
+    public override void PostDraw(Graphics graphics) {
+      selectionRectangles.Clear();
+      if (Selected) {
+        Pen pen = new Pen(Color.LightGray, 3);
+        pen.DashStyle = DashStyle.Dash;
+        Point p = Chart.TransformWorldToPixel(new PointD(LowerLeft.X, LowerLeft.Y + Size.Height));
+        Size s = Chart.TransformWorldToPixel(Size);
+        graphics.DrawRectangle(pen, p.X, p.Y, s.Width, s.Height);
+        selectionRectangles.Add(new SelectionRectangle(Chart, UpperRight.X, LowerLeft.Y, Cursors.SizeNWSE));
+        selectionRectangles.Add(new SelectionRectangle(Chart, LowerLeft.X, LowerLeft.Y, Cursors.SizeNESW));
+        selectionRectangles.Add(new SelectionRectangle(Chart, UpperRight.X, UpperRight.Y, Cursors.SizeNESW));
+        selectionRectangles.Add(new SelectionRectangle(Chart, LowerLeft.X, UpperRight.Y, Cursors.SizeNWSE));
+
+        selectionRectangles.Draw(graphics);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/SelectionRectangle.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/SelectionRectangle.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Primitives/SelectionRectangle.cs	(revision 1270)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public class SelectionRectangle : FixedSizeRectangle {
+    private static int size = 6;
+    private Cursor cursor;
+
+    public SelectionRectangle(IChart chart, PointD point, Cursor cursor)
+      : base(chart, point, new Size(size, size)) {
+      this.cursor = cursor;
+      Pen = Pens.Black;
+      Brush = Brushes.LightGray;
+    }
+    public SelectionRectangle(IChart chart, double x, double y, Cursor cursor)
+      : this(chart, new PointD(x, y), cursor) {
+    }
+
+    public override Cursor GetCursor(PointD point) {
+      return cursor;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Charting")]
+[assembly: AssemblyDescription("Core classes of the HeuristicLab charting framework")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("d68ae989-7286-4f29-a237-852547e5701d")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,95 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Charting {
+  partial class PropertiesDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.propertyGrid = new System.Windows.Forms.PropertyGrid();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Location = new System.Drawing.Point(419, 271);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      // 
+      // propertyGrid
+      // 
+      this.propertyGrid.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.propertyGrid.Location = new System.Drawing.Point(12, 12);
+      this.propertyGrid.Name = "propertyGrid";
+      this.propertyGrid.Size = new System.Drawing.Size(482, 253);
+      this.propertyGrid.TabIndex = 1;
+      // 
+      // PropertiesDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(506, 306);
+      this.Controls.Add(this.propertyGrid);
+      this.Controls.Add(this.okButton);
+      this.Name = "PropertiesDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Properties";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.Button okButton;
+    protected System.Windows.Forms.PropertyGrid propertyGrid;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Charting {
+  public partial class PropertiesDialog : Form {
+    public object SelectedObject {
+      get { return propertyGrid.SelectedObject; }
+      set { propertyGrid.SelectedObject = value; }
+    }
+
+    public PropertiesDialog() {
+      InitializeComponent();
+    }
+    public PropertiesDialog(object selectedObject)
+      : this() {
+      SelectedObject = selectedObject;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/PropertiesDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/Offset.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/Offset.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/Offset.cs	(revision 1270)
@@ -0,0 +1,101 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public struct Offset {
+    public static readonly Offset Empty;
+
+    private double myDX;
+    public double DX {
+      get { return myDX; }
+      set { myDX = value; }
+    }
+    private double myDY;
+    public double DY {
+      get { return myDY; }
+      set { myDY = value; }
+    }
+    public bool IsEmpty {
+      get { return this == Empty; }
+    }
+    public double Length {
+      get { return Math.Sqrt(DX * DX + DY * DY); }
+    }
+
+    public Offset(double dx, double dy) {
+      myDX = dx;
+      myDY = dy;
+    }
+    public Offset(PointD point) {
+      myDX = point.X;
+      myDY = point.Y;
+    }
+    public Offset(SizeD size) {
+      myDX = size.Width;
+      myDY = size.Height;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj is Offset) {
+        return ((Offset)obj) == this;
+      } else {
+        return base.Equals(obj);
+      }
+    }
+    public override int GetHashCode() {
+      return (int)Math.Pow(DX, DY);
+    }
+    public override string ToString() {
+      return "(" + DX.ToString() + ";" + DY.ToString() + ")";
+    }
+
+    public static Offset operator +(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX + offset2.DX, offset1.DY + offset2.DY);
+    }
+    public static Offset operator -(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX - offset2.DX, offset1.DY - offset2.DY);
+    }
+    public static bool operator ==(Offset offset1, Offset offset2) {
+      return (offset1.DX == offset2.DX) && (offset1.DY == offset2.DY);
+    }
+    public static bool operator !=(Offset offset1, Offset offset2) {
+      return (offset1.DX != offset2.DX) && (offset1.DY != offset2.DY);
+    }
+    public static explicit operator PointD(Offset offset) {
+      return new PointD(offset.DX, offset.DY);
+    }
+    public static explicit operator SizeD(Offset offset) {
+      return new SizeD(offset.DX, offset.DY);
+    }
+
+    public static Offset Add(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX + offset2.DX, offset1.DY + offset2.DY);
+    }
+    public static Offset Subtract(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX - offset2.DX, offset1.DY - offset2.DY);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/PointD.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/PointD.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/PointD.cs	(revision 1270)
@@ -0,0 +1,110 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public struct PointD {
+    public static readonly PointD Empty;
+
+    private double myX;
+    public double X {
+      get { return myX; }
+      set { myX = value; }
+    }
+    private double myY;
+    public double Y {
+      get { return myY; }
+      set { myY = value; }
+    }
+    public bool IsEmpty {
+      get { return this == Empty; }
+    }
+
+    public PointD(double x, double y) {
+      myX = x;
+      myY = y;
+    }
+    public PointD(SizeD size) {
+      myX = size.Width;
+      myY = size.Height;
+    }
+    public PointD(Offset offset) {
+      myX = offset.DX;
+      myY = offset.DY;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj is PointD) {
+        return ((PointD)obj) == this;
+      } else {
+        return base.Equals(obj);
+      }
+    }
+    public override int GetHashCode() {
+      return (int)Math.Pow(X, Y);
+    }
+    public override string ToString() {
+      return "(" + X.ToString() + ";" + Y.ToString() + ")";
+    }
+
+    public static PointD operator +(PointD point, Offset offset) {
+      return new PointD(point.X + offset.DX, point.Y + offset.DY);
+    }
+    public static PointD operator -(PointD point, Offset offset) {
+      return new PointD(point.X - offset.DX, point.Y - offset.DY);
+    }
+    public static Offset operator +(PointD point1, PointD point2) {
+      return new Offset(point1.X + point2.X, point1.Y + point2.Y);
+    }
+    public static Offset operator -(PointD point1, PointD point2) {
+      return new Offset(point1.X - point2.X, point1.Y - point2.Y);
+    }
+    public static bool operator ==(PointD point1, PointD point2) {
+      return (point1.X == point2.X) && (point1.Y == point2.Y);
+    }
+    public static bool operator !=(PointD point1, PointD point2) {
+      return (point1.X != point2.X) && (point1.Y != point2.Y);
+    }
+    public static explicit operator SizeD(PointD point) {
+      return new SizeD(point.X, point.Y);
+    }
+    public static explicit operator Offset(PointD point) {
+      return new Offset(point.X, point.Y);
+    }
+    public static implicit operator PointD(Point point) {
+      return new PointD(point.X, point.Y);
+    }
+    public static implicit operator PointD(PointF point) {
+      return new PointD(point.X, point.Y);
+    }
+
+    public static PointD Add(PointD point, Offset offset) {
+      return new PointD(point.X + offset.DX, point.Y + offset.DY);
+    }
+    public static PointD Subtract(PointD point, Offset offset) {
+      return new PointD(point.X - offset.DX, point.Y - offset.DY);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/SizeD.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/SizeD.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Charting/Structs/SizeD.cs	(revision 1270)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+
+namespace HeuristicLab.Charting {
+  public struct SizeD {
+    public static readonly SizeD Empty;
+
+    private double myWidth;
+    public double Width {
+      get { return myWidth; }
+      set { myWidth = value; }
+    }
+    private double myHeight;
+    public double Height {
+      get { return myHeight; }
+      set { myHeight = value; }
+    }
+    public bool IsEmpty {
+      get { return this == Empty; }
+    }
+
+    public SizeD(double width, double height) {
+      myWidth = width;
+      myHeight = height;
+    }
+    public SizeD(PointD point) {
+      myWidth = point.X;
+      myHeight = point.Y;
+    }
+    public SizeD(Offset offset) {
+      myWidth = offset.DX;
+      myHeight = offset.DY;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj is SizeD) {
+        return ((SizeD)obj) == this;
+      } else {
+        return base.Equals(obj);
+      }
+    }
+    public override int GetHashCode() {
+      return (int)Math.Pow(Width, Height);
+    }
+    public override string ToString() {
+      return "(" + Width.ToString() + ";" + Height.ToString() + ")";
+    }
+
+    public static SizeD operator +(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width + size2.Width, size1.Height + size2.Height);
+    }
+    public static SizeD operator -(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width - size2.Width, size1.Height - size2.Height);
+    }
+    public static bool operator ==(SizeD size1, SizeD size2) {
+      return (size1.Width == size2.Width) && (size1.Height == size2.Height);
+    }
+    public static bool operator !=(SizeD size1, SizeD size2) {
+      return (size1.Width != size2.Width) && (size1.Height != size2.Height);
+    }
+    public static explicit operator PointD(SizeD size) {
+      return new PointD(size.Width, size.Height);
+    }
+    public static explicit operator Offset(SizeD size) {
+      return new Offset(size.Width, size.Height);
+    }
+    public static implicit operator SizeD(Size size) {
+      return new SizeD(size.Width, size.Height);
+    }
+    public static implicit operator SizeD(SizeF size) {
+      return new SizeD(size.Width, size.Height);
+    }
+
+    public static SizeD Add(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width + size2.Width, size1.Height + size2.Height);
+    }
+    public static SizeD Subtract(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width - size2.Width, size1.Height - size2.Height);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/DummyDriverConfiguration.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/DummyDriverConfiguration.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/DummyDriverConfiguration.cs	(revision 1270)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Communication.Data {
+  public class DummyDriverConfiguration : ItemBase, IDriverConfiguration {
+    public DummyDriverConfiguration() {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/HeuristicLab.Communication.Data.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/HeuristicLab.Communication.Data.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/HeuristicLab.Communication.Data.csproj	(revision 1270)
@@ -0,0 +1,232 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{14E1C3E3-2496-436A-AE00-09F7B81DB15B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Communication.Data</RootNamespace>
+    <AssemblyName>HeuristicLab.Communication.Data-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ItemGroup>
+    <Compile Include="Message.cs" />
+    <Compile Include="DummyDriverConfiguration.cs" />
+    <Compile Include="HeuristicLabCommunicationDataPlugin.cs" />
+    <Compile Include="IDataStream.cs" />
+    <Compile Include="IDriverConfiguration.cs" />
+    <Compile Include="IObjectStream.cs" />
+    <Compile Include="LocalProcessDriverConfiguration.cs" />
+    <Compile Include="LocalProcessDriverConfigurationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LocalProcessDriverConfigurationView.designer.cs">
+      <DependentUpon>LocalProcessDriverConfigurationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OdbcDatabaseDriverConfiguration.cs" />
+    <Compile Include="OdbcDatabaseDriverConfigurationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OdbcDatabaseDriverConfigurationView.designer.cs">
+      <DependentUpon>OdbcDatabaseDriverConfigurationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProcessData.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Protocol.cs" />
+    <Compile Include="ProtocolEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProtocolEditor.Designer.cs">
+      <DependentUpon>ProtocolEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ProtocolState.cs" />
+    <Compile Include="ProtocolStateView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProtocolStateView.Designer.cs">
+      <DependentUpon>ProtocolStateView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SocketData.cs" />
+    <Compile Include="StateTransition.cs" />
+    <Compile Include="StateTransitionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StateTransitionView.Designer.cs">
+      <DependentUpon>StateTransitionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TcpNetworkDriverConfiguration.cs" />
+    <Compile Include="TcpNetworkDriverConfigurationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TcpNetworkDriverConfigurationView.designer.cs">
+      <DependentUpon>TcpNetworkDriverConfigurationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="WindowedView.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="WindowedView.Designer.cs">
+      <DependentUpon>WindowedView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="LocalProcessDriverConfigurationView.resx">
+      <DependentUpon>LocalProcessDriverConfigurationView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OdbcDatabaseDriverConfigurationView.resx">
+      <DependentUpon>OdbcDatabaseDriverConfigurationView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProtocolEditor.resx">
+      <DependentUpon>ProtocolEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ProtocolStateView.resx">
+      <DependentUpon>ProtocolStateView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StateTransitionView.resx">
+      <DependentUpon>StateTransitionView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="TcpNetworkDriverConfigurationView.resx">
+      <DependentUpon>TcpNetworkDriverConfigurationView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="WindowedView.resx">
+      <DependentUpon>WindowedView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.XML" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators.Programmable\HeuristicLab.Operators.Programmable.csproj">
+      <Project>{E3CCBFC6-900C-41B6-AFB8-6646DB097435}</Project>
+      <Name>HeuristicLab.Operators.Programmable</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/HeuristicLabCommunicationDataPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/HeuristicLabCommunicationDataPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/HeuristicLabCommunicationDataPlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Communication.Data {
+  [ClassInfo(Name = "HeuristicLab.Communication.Data-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Communication.Data-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators.Programmable-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  public class HeuristicLabCommunicationDataPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IDataStream.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IDataStream.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IDataStream.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Communication.Data {
+  public interface IDataStream : IItem {
+    void Initialize(IDriverConfiguration configuration);
+    bool Connect();
+    void Close();
+
+    void Write(string s);
+    string Read();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IDriverConfiguration.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IDriverConfiguration.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IDriverConfiguration.cs	(revision 1270)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Communication.Data {
+  public interface IDriverConfiguration : IItem {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IObjectStream.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IObjectStream.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/IObjectStream.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Communication.Data {
+  public interface IObjectStream : IItem {
+    void Initialize(IDriverConfiguration configuration);
+    bool Connect();
+    void Close();
+
+    void Write(IItem item);
+    IItem Read();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfiguration.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfiguration.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfiguration.cs	(revision 1270)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class LocalProcessDriverConfiguration : ItemBase, IDriverConfiguration {
+    private StringData executablePath;
+    public StringData ExecutablePath {
+      get { return executablePath; }
+      set {
+        executablePath = value;
+        OnChanged();
+      }
+    }
+    private StringData arguments;
+    public StringData Arguments {
+      get { return arguments; }
+      set {
+        arguments = value;
+        OnChanged();
+      }
+    }
+    public LocalProcessDriverConfiguration() {
+      executablePath = new StringData("");
+      arguments = new StringData("");
+    }
+
+    public override IView CreateView() {
+      return new LocalProcessDriverConfigurationView(this);
+    }
+
+    #region persistence & clone
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode executablePathNode = PersistenceManager.Persist("ExecutablePath", ExecutablePath, document, persistedObjects);
+      node.AppendChild(executablePathNode);
+      XmlNode argumentsNode = PersistenceManager.Persist("Arguments", Arguments, document, persistedObjects);
+      node.AppendChild(argumentsNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      executablePath = (StringData)PersistenceManager.Restore(node.SelectSingleNode("ExecutablePath"), restoredObjects);
+      arguments = (StringData)PersistenceManager.Restore(node.SelectSingleNode("Arguments"), restoredObjects);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      LocalProcessDriverConfiguration clone = new LocalProcessDriverConfiguration();
+      clonedObjects.Add(Guid, clone);
+      clone.executablePath = (StringData)Auxiliary.Clone(executablePath, clonedObjects);
+      clone.arguments = (StringData)Auxiliary.Clone(arguments, clonedObjects);
+      return clone;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.Designer.cs	(revision 1270)
@@ -0,0 +1,131 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Data {
+  partial class LocalProcessDriverConfigurationView {
+    /// <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.executablePathStringDataView = new HeuristicLab.Data.StringDataView();
+      this.argumentsStringDataView = new HeuristicLab.Data.StringDataView();
+      this.executableLabel = new System.Windows.Forms.Label();
+      this.argumentsLabel = new System.Windows.Forms.Label();
+      this.browseExecutableButtom = new System.Windows.Forms.Button();
+      this.executablePathOpenFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.SuspendLayout();
+      // 
+      // executablePathStringDataView
+      // 
+      this.executablePathStringDataView.Caption = "View";
+      this.executablePathStringDataView.Location = new System.Drawing.Point(69, 3);
+      this.executablePathStringDataView.Name = "executablePathStringDataView";
+      this.executablePathStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.executablePathStringDataView.StringData = null;
+      this.executablePathStringDataView.TabIndex = 0;
+      // 
+      // argumentsStringDataView
+      // 
+      this.argumentsStringDataView.Caption = "View";
+      this.argumentsStringDataView.Location = new System.Drawing.Point(69, 31);
+      this.argumentsStringDataView.Name = "argumentsStringDataView";
+      this.argumentsStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.argumentsStringDataView.StringData = null;
+      this.argumentsStringDataView.TabIndex = 1;
+      // 
+      // executableLabel
+      // 
+      this.executableLabel.AutoSize = true;
+      this.executableLabel.Location = new System.Drawing.Point(3, 6);
+      this.executableLabel.Name = "executableLabel";
+      this.executableLabel.Size = new System.Drawing.Size(60, 13);
+      this.executableLabel.TabIndex = 2;
+      this.executableLabel.Text = "Executable";
+      // 
+      // argumentsLabel
+      // 
+      this.argumentsLabel.AutoSize = true;
+      this.argumentsLabel.Location = new System.Drawing.Point(3, 34);
+      this.argumentsLabel.Name = "argumentsLabel";
+      this.argumentsLabel.Size = new System.Drawing.Size(57, 13);
+      this.argumentsLabel.TabIndex = 3;
+      this.argumentsLabel.Text = "Arguments";
+      // 
+      // browseExecutableButtom
+      // 
+      this.browseExecutableButtom.Location = new System.Drawing.Point(275, 1);
+      this.browseExecutableButtom.Name = "browseExecutableButtom";
+      this.browseExecutableButtom.Size = new System.Drawing.Size(75, 23);
+      this.browseExecutableButtom.TabIndex = 4;
+      this.browseExecutableButtom.Text = "Browse...";
+      this.browseExecutableButtom.UseVisualStyleBackColor = true;
+      this.browseExecutableButtom.Click += new System.EventHandler(this.browseExecutableButtom_Click);
+      // 
+      // executablePathOpenFileDialog
+      // 
+      this.executablePathOpenFileDialog.FileName = "*.exe";
+      this.executablePathOpenFileDialog.Filter = "Executables|*.exe|All files|*.*";
+      // 
+      // LocalProcessDriverConfigurationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.browseExecutableButtom);
+      this.Controls.Add(this.argumentsLabel);
+      this.Controls.Add(this.executableLabel);
+      this.Controls.Add(this.argumentsStringDataView);
+      this.Controls.Add(this.executablePathStringDataView);
+      this.Name = "LocalProcessDriverConfigurationView";
+      this.Size = new System.Drawing.Size(352, 54);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.StringDataView executablePathStringDataView;
+    private HeuristicLab.Data.StringDataView argumentsStringDataView;
+    private System.Windows.Forms.Label executableLabel;
+    private System.Windows.Forms.Label argumentsLabel;
+    private System.Windows.Forms.Button browseExecutableButtom;
+    private System.Windows.Forms.OpenFileDialog executablePathOpenFileDialog;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.cs	(revision 1270)
@@ -0,0 +1,69 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class LocalProcessDriverConfigurationView : ViewBase {
+    public LocalProcessDriverConfiguration LocalProcessDriverConfiguration {
+      get { return (LocalProcessDriverConfiguration)base.Item; }
+      set { base.Item = value; }
+    }
+
+    public LocalProcessDriverConfigurationView() {
+      InitializeComponent();
+    }
+
+    public LocalProcessDriverConfigurationView(LocalProcessDriverConfiguration localProcessDriverConfiguration)
+      : this() {
+      LocalProcessDriverConfiguration = localProcessDriverConfiguration;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (LocalProcessDriverConfiguration == null) {
+        executablePathStringDataView.Enabled = false;
+        executablePathStringDataView.StringData = null;
+        argumentsStringDataView.Enabled = false;
+        argumentsStringDataView.StringData = null;
+      } else {
+        executablePathStringDataView.StringData = LocalProcessDriverConfiguration.ExecutablePath;
+        executablePathStringDataView.Enabled = true;
+        argumentsStringDataView.StringData = LocalProcessDriverConfiguration.Arguments;
+        argumentsStringDataView.Enabled = true;
+      }
+    }
+
+    private void browseExecutableButtom_Click(object sender, EventArgs e) {
+      if (LocalProcessDriverConfiguration != null && executablePathOpenFileDialog.ShowDialog() == DialogResult.OK) {
+        LocalProcessDriverConfiguration.ExecutablePath = new StringData(executablePathOpenFileDialog.FileName);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/LocalProcessDriverConfigurationView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="executablePathOpenFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Message.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Message.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Message.cs	(revision 1270)
@@ -0,0 +1,122 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class Message : ItemBase {
+    public string Protocol;
+    public string Source;
+    public string Destination;
+    public DateTime Timestamp;
+    public IList<IVariable> Give;
+    public IList<IVariable> Expect;
+
+    public Message()
+      : base() {
+      Protocol = "unknown";
+      Source = "unknown";
+      Destination = "unknown";
+      Timestamp = DateTime.Now;
+      Give = new List<IVariable>();
+      Expect = new List<IVariable>();
+    }
+
+    #region clone & persistence
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Message clone = new Message();
+      clonedObjects.Add(Guid, clone);
+      clone.Protocol = (string)Protocol.Clone();
+      clone.Source = (string)Source.Clone();
+      clone.Destination = (string)Destination.Clone();
+      clone.Timestamp = new DateTime(Timestamp.Ticks);
+      foreach (IVariable var in Give)
+        clone.Give.Add((IVariable)var.Clone(clonedObjects));
+      foreach (IVariable var in Expect)
+        clone.Expect.Add((IVariable)var.Clone(clonedObjects));
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute protoAttrib = document.CreateAttribute("Protocol");
+      protoAttrib.Value = (string)Protocol.Clone();
+      XmlAttribute sourceAttrib = document.CreateAttribute("Source");
+      sourceAttrib.Value = (string)Source.Clone();
+      XmlAttribute destinationAttrib = document.CreateAttribute("Destination");
+      destinationAttrib.Value = (string)Destination.Clone();
+      XmlAttribute timeStampAttrib = document.CreateAttribute("Timestamp");
+      StringBuilder tsBuilder = new StringBuilder();
+      tsBuilder.Append(Timestamp.Year);tsBuilder.Append("/");
+      tsBuilder.Append(Timestamp.Month);tsBuilder.Append("/");
+      tsBuilder.Append(Timestamp.Day);tsBuilder.Append(" ");
+      tsBuilder.Append(Timestamp.Hour);tsBuilder.Append(":");
+      tsBuilder.Append(Timestamp.Minute);tsBuilder.Append(":");
+      tsBuilder.Append(Timestamp.Second);tsBuilder.Append(":");
+      tsBuilder.Append(Timestamp.Millisecond);
+      timeStampAttrib.Value = tsBuilder.ToString();
+
+      node.Attributes.Append(protoAttrib);
+      node.Attributes.Append(sourceAttrib);
+      node.Attributes.Append(destinationAttrib);
+      node.Attributes.Append(timeStampAttrib);
+
+      XmlNode dataNode = document.CreateNode(XmlNodeType.Element, "Data", null);
+      XmlNode giveNode = document.CreateNode(XmlNodeType.Element, "Give", null);
+      foreach (IVariable var in Give) {
+        XmlNode varNode = document.CreateNode(XmlNodeType.Element, "Parameter", null);
+        XmlAttribute varNameAttrib = document.CreateAttribute("Name");
+        varNameAttrib.Value = (string)var.Name.Clone();
+        varNode.Attributes.Append(varNameAttrib);
+        varNode.AppendChild(var.Value.GetXmlNode("Value", document, persistedObjects));
+        giveNode.AppendChild(varNode);
+      }
+      dataNode.AppendChild(giveNode);
+      XmlNode expectNode = document.CreateNode(XmlNodeType.Element, "Expect", null);
+      foreach (IVariable var in Expect) {
+        XmlNode varNode = document.CreateNode(XmlNodeType.Element, "Parameter", null);
+        XmlAttribute varNameAttrib = document.CreateAttribute("Name");
+        varNameAttrib.Value = (string)var.Name.Clone();
+        varNode.Attributes.Append(varNameAttrib);
+        varNode.AppendChild(var.Value.GetXmlNode("Value", document, persistedObjects));
+        expectNode.AppendChild(varNode);
+      }
+      dataNode.AppendChild(expectNode);
+      node.AppendChild(dataNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Protocol = node.Attributes.GetNamedItem("Protocol").Value;
+      Source = node.Attributes.GetNamedItem("Source").Value;
+      Destination = node.Attributes.GetNamedItem("Destination").Value;
+      string ts = node.Attributes.GetNamedItem("Timestamp").Value;
+      string[] tsTokens = ts.Split(new string[] { "/", " ", ":" }, StringSplitOptions.RemoveEmptyEntries);
+      int year = int.Parse(tsTokens[0]);
+      int month = int.Parse(tsTokens[1]);
+      int day = int.Parse(tsTokens[2]);
+      int hour = int.Parse(tsTokens[3]);
+      int minute = int.Parse(tsTokens[4]);
+      int seconds = int.Parse(tsTokens[5]);
+      int milliseconds = int.Parse(tsTokens[6]);
+      Timestamp = new DateTime(year, month, day, hour, minute, seconds, milliseconds);
+      XmlNode dataNode = node.SelectSingleNode("Data");
+      XmlNode giveNode = dataNode.SelectSingleNode("Give");
+      XmlNodeList giveParams = giveNode.SelectNodes("Parameter");
+      Give = new List<IVariable>();
+      foreach (XmlNode n in giveParams) {
+        Give.Add(new Variable(n.Attributes.GetNamedItem("Name").Value, (IItem)PersistenceManager.Restore(n.SelectSingleNode("Value"), restoredObjects)));
+      }
+      XmlNode expectNode = dataNode.SelectSingleNode("Expect");
+      XmlNodeList expectParams = expectNode.SelectNodes("Parameter");
+      Expect = new List<IVariable>();
+      foreach (XmlNode n in expectParams) {
+        Expect.Add(new Variable(n.Attributes.GetNamedItem("Name").Value, (IItem)PersistenceManager.Restore(n.SelectSingleNode("Value"), restoredObjects)));
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfiguration.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfiguration.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfiguration.cs	(revision 1270)
@@ -0,0 +1,187 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Data;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class OdbcDatabaseDriverConfiguration : ItemBase, IDriverConfiguration {
+    private StringData odbcDriver;
+    public StringData OdbcDriver {
+      get { return odbcDriver; }
+      set {
+        odbcDriver = value;
+        OnChanged();
+      }
+    }
+    private StringData ipAddress;
+    public StringData IPAddress {
+      get { return ipAddress; }
+      set {
+        ipAddress = value;
+        OnChanged();
+      }
+    }
+    private IntData port;
+    public IntData Port {
+      get { return port; }
+      set {
+        port = value;
+        OnChanged();
+      }
+    }
+    private StringData dbName;
+    public StringData DBName {
+      get { return dbName; }
+      set {
+        dbName = value;
+        OnChanged();
+      }
+    }
+    private StringData dbUser;
+    public StringData DBUser {
+      get { return dbUser; }
+      set {
+        dbUser = value;
+        OnChanged();
+      }
+    }
+    private StringData dbPassword;
+    public StringData DBPassword {
+      get { return dbPassword; }
+      set {
+        dbPassword = value;
+        OnChanged();
+      }
+    }
+    private StringData dbTable;
+    public StringData DBTable {
+      get { return dbTable; }
+      set {
+        dbTable = value;
+        OnChanged();
+      }
+    }
+    private StringData dbIDcolumnName;
+    public StringData DBIDColumnName {
+      get { return dbIDcolumnName; }
+      set {
+        dbIDcolumnName = value;
+        OnChanged();
+      }
+    }
+    private StringData dbCommunicationColumnName;
+    public StringData DBCommunciationColumnName {
+      get { return dbCommunicationColumnName; }
+      set {
+        dbCommunicationColumnName = value;
+        OnChanged();
+      }
+    }
+    private StringData dbSynchronizationColumnName;
+    public StringData DBSynchronizationColumnName {
+      get { return dbSynchronizationColumnName; }
+      set {
+        dbSynchronizationColumnName = value;
+        OnChanged();
+      }
+    }
+    
+    public OdbcDatabaseDriverConfiguration() {
+      odbcDriver = new StringData("");
+      ipAddress = new StringData("127.0.0.1");
+      port = new IntData(0);
+      dbName = new StringData("");
+      dbUser = new StringData("");
+      dbPassword = new StringData("");
+      dbTable = new StringData("");
+      dbIDcolumnName = new StringData("");
+      dbCommunicationColumnName = new StringData("");
+      dbSynchronizationColumnName = new StringData("");
+    }
+
+    public override IView CreateView() {
+      return new OdbcDatabaseDriverConfigurationView(this);
+    }
+
+    #region persistence & clone
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode driverNode = PersistenceManager.Persist("Driver", OdbcDriver, document, persistedObjects);
+      node.AppendChild(driverNode);
+      XmlNode ipNode = PersistenceManager.Persist("IP", IPAddress, document, persistedObjects);
+      node.AppendChild(ipNode);
+      XmlNode portNode = PersistenceManager.Persist("Port", Port, document, persistedObjects);
+      node.AppendChild(portNode);
+      XmlNode nameNode = PersistenceManager.Persist("DBName", DBName, document, persistedObjects);
+      node.AppendChild(nameNode);
+      XmlNode userNode = PersistenceManager.Persist("DBUser", DBUser, document, persistedObjects);
+      node.AppendChild(userNode);
+      XmlNode pwdNode = PersistenceManager.Persist("DBPassword", DBPassword, document, persistedObjects);
+      node.AppendChild(pwdNode);
+      XmlNode tableNode = PersistenceManager.Persist("DBTable", DBTable, document, persistedObjects);
+      node.AppendChild(tableNode);
+      XmlNode idNode = PersistenceManager.Persist("DBIDColumnName", DBIDColumnName, document, persistedObjects);
+      node.AppendChild(idNode);
+      XmlNode commNode = PersistenceManager.Persist("DBCommunicationColumnName", DBCommunciationColumnName, document, persistedObjects);
+      node.AppendChild(commNode);
+      XmlNode syncNode = PersistenceManager.Persist("DBSynchronizationColumnName", DBSynchronizationColumnName, document, persistedObjects);
+      node.AppendChild(syncNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      odbcDriver = (StringData)PersistenceManager.Restore(node.SelectSingleNode("Driver"), restoredObjects);
+      ipAddress = (StringData)PersistenceManager.Restore(node.SelectSingleNode("IP"), restoredObjects);
+      port = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Port"), restoredObjects);
+      dbName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBName"), restoredObjects);
+      dbUser = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBUser"), restoredObjects);
+      dbPassword = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBPassword"), restoredObjects);
+      dbTable = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBTable"), restoredObjects);
+      dbIDcolumnName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBIDColumnName"), restoredObjects);
+      dbCommunicationColumnName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBCommunicationColumnName"), restoredObjects);
+      dbSynchronizationColumnName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("DBSynchronizationColumnName"), restoredObjects);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OdbcDatabaseDriverConfiguration clone = new OdbcDatabaseDriverConfiguration();
+      clonedObjects.Add(Guid, clone);
+      clone.odbcDriver = (StringData)Auxiliary.Clone(odbcDriver, clonedObjects);
+      clone.ipAddress = (StringData)Auxiliary.Clone(ipAddress, clonedObjects);
+      clone.port = (IntData)Auxiliary.Clone(port, clonedObjects);
+      clone.dbName = (StringData)Auxiliary.Clone(dbName, clonedObjects);
+      clone.dbUser = (StringData)Auxiliary.Clone(dbUser, clonedObjects);
+      clone.dbPassword = (StringData)Auxiliary.Clone(dbPassword, clonedObjects);
+      clone.dbTable = (StringData)Auxiliary.Clone(dbTable, clonedObjects);
+      clone.dbIDcolumnName = (StringData)Auxiliary.Clone(dbIDcolumnName, clonedObjects);
+      clone.dbCommunicationColumnName = (StringData)Auxiliary.Clone(dbCommunicationColumnName, clonedObjects);
+      clone.dbSynchronizationColumnName = (StringData)Auxiliary.Clone(dbSynchronizationColumnName, clonedObjects);
+      return clone;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.cs	(revision 1270)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using Microsoft.Win32;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class OdbcDatabaseDriverConfigurationView : ViewBase {
+    public OdbcDatabaseDriverConfiguration OdbcDatabaseDriverConfiguration {
+      get { return (OdbcDatabaseDriverConfiguration)base.Item; }
+      set { base.Item = value; }
+    }
+
+    public OdbcDatabaseDriverConfigurationView() {
+      InitializeComponent();
+      BuildOdbcDriverComboBox();
+    }
+
+    public OdbcDatabaseDriverConfigurationView(OdbcDatabaseDriverConfiguration odbcDatabaseDriverConfiguration)
+      : this() {
+      OdbcDatabaseDriverConfiguration = odbcDatabaseDriverConfiguration;
+    }
+
+    private void BuildOdbcDriverComboBox() {
+      RegistryKey lm = null;
+      try {
+        lm = Registry.LocalMachine.OpenSubKey("Software").OpenSubKey("ODBC").OpenSubKey("ODBCINST.INI").OpenSubKey("ODBC Drivers");
+      } catch (Exception e) {
+        MessageBox.Show("Unable to open registry:\n" + e.Message + "\n\nPlease provide the correct driver name for the ODBC connection driver.", "Registry error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
+      }
+      if (lm != null) {
+        string[] odbcDrivers = lm.GetValueNames();
+        odbcDriverComboBox.Items.AddRange(odbcDrivers);
+        odbcDriverComboBox.SelectedIndex = 0;
+      }
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (OdbcDatabaseDriverConfiguration == null) {
+        odbcDriverComboBox.Enabled = false;
+        ipAddressStringDataView.Enabled = false;
+        ipAddressStringDataView.StringData = null;
+        portIntDataView.Enabled = false;
+        portIntDataView.IntData = null;
+        dbNameStringDataView.Enabled = false;
+        dbNameStringDataView.StringData = null;
+        dbUserStringDataView.Enabled = false;
+        dbUserStringDataView.StringData = null;
+        dbPasswordStringDataView.Enabled = false;
+        dbPasswordStringDataView.StringData = null;
+        dbTableStringDataView.Enabled = false;
+        dbTableStringDataView.StringData = null;
+        dbIDColumnNameStringDataView.Enabled = false;
+        dbIDColumnNameStringDataView.StringData = null;
+        dbCommunicationColumnNameStringDataView.Enabled = false;
+        dbCommunicationColumnNameStringDataView.StringData = null;
+        dbSynchronizationColumnNameStringDataView.Enabled = false;
+        dbSynchronizationColumnNameStringDataView.StringData = null;
+      } else {
+        odbcDriverComboBox.Enabled = true;
+        ipAddressStringDataView.StringData = OdbcDatabaseDriverConfiguration.IPAddress;
+        ipAddressStringDataView.Enabled = true;
+        portIntDataView.IntData = OdbcDatabaseDriverConfiguration.Port;
+        portIntDataView.Enabled = true;
+        dbNameStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBName;
+        dbNameStringDataView.Enabled = true;
+        dbUserStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBUser;
+        dbUserStringDataView.Enabled = true;
+        dbPasswordStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBPassword;
+        dbPasswordStringDataView.Enabled = true;
+        dbTableStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBTable;
+        dbTableStringDataView.Enabled = true;
+        dbIDColumnNameStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBIDColumnName;
+        dbIDColumnNameStringDataView.Enabled = true;
+        dbCommunicationColumnNameStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBCommunciationColumnName;
+        dbCommunicationColumnNameStringDataView.Enabled = true;
+        dbSynchronizationColumnNameStringDataView.StringData = OdbcDatabaseDriverConfiguration.DBSynchronizationColumnName;
+        dbSynchronizationColumnNameStringDataView.Enabled = true;
+      }
+    }
+
+    private void odbcDriverComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (odbcDriverComboBox.SelectedIndex >= 0 && OdbcDatabaseDriverConfiguration != null) {
+        OdbcDatabaseDriverConfiguration.OdbcDriver = new StringData((string)odbcDriverComboBox.SelectedItem);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.designer.cs	(revision 1270)
@@ -0,0 +1,319 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Data {
+  partial class OdbcDatabaseDriverConfigurationView {
+    /// <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.dbTableGroupBox = new System.Windows.Forms.GroupBox();
+      this.dbSynchronizationColumnNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbCommunicationColumnNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbIDColumnNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbIDColumnNameLabel = new System.Windows.Forms.Label();
+      this.dbCommunicationColumnNameLabel = new System.Windows.Forms.Label();
+      this.dbSynchronizationColumnNameLabel = new System.Windows.Forms.Label();
+      this.dbTableStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbPasswordStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbUserStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.dbTableLabel = new System.Windows.Forms.Label();
+      this.dbPasswordLabel = new System.Windows.Forms.Label();
+      this.dbUserLabel = new System.Windows.Forms.Label();
+      this.dbNameLabel = new System.Windows.Forms.Label();
+      this.portLabel = new System.Windows.Forms.Label();
+      this.ipAddressLabel = new System.Windows.Forms.Label();
+      this.portIntDataView = new HeuristicLab.Data.IntDataView();
+      this.ipAddressStringDataView = new HeuristicLab.Data.StringDataView();
+      this.odbcDriverLabel = new System.Windows.Forms.Label();
+      this.odbcDriverComboBox = new System.Windows.Forms.ComboBox();
+      this.dbTableGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dbTableGroupBox
+      // 
+      this.dbTableGroupBox.Controls.Add(this.dbSynchronizationColumnNameStringDataView);
+      this.dbTableGroupBox.Controls.Add(this.dbCommunicationColumnNameStringDataView);
+      this.dbTableGroupBox.Controls.Add(this.dbIDColumnNameStringDataView);
+      this.dbTableGroupBox.Controls.Add(this.dbIDColumnNameLabel);
+      this.dbTableGroupBox.Controls.Add(this.dbCommunicationColumnNameLabel);
+      this.dbTableGroupBox.Controls.Add(this.dbSynchronizationColumnNameLabel);
+      this.dbTableGroupBox.Location = new System.Drawing.Point(6, 180);
+      this.dbTableGroupBox.Name = "dbTableGroupBox";
+      this.dbTableGroupBox.Size = new System.Drawing.Size(402, 101);
+      this.dbTableGroupBox.TabIndex = 6;
+      this.dbTableGroupBox.TabStop = false;
+      this.dbTableGroupBox.Text = "Table";
+      // 
+      // dbSynchronizationColumnNameStringDataView
+      // 
+      this.dbSynchronizationColumnNameStringDataView.Caption = "View";
+      this.dbSynchronizationColumnNameStringDataView.Location = new System.Drawing.Point(184, 65);
+      this.dbSynchronizationColumnNameStringDataView.Name = "dbSynchronizationColumnNameStringDataView";
+      this.dbSynchronizationColumnNameStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbSynchronizationColumnNameStringDataView.StringData = null;
+      this.dbSynchronizationColumnNameStringDataView.TabIndex = 2;
+      // 
+      // dbCommunicationColumnNameStringDataView
+      // 
+      this.dbCommunicationColumnNameStringDataView.Caption = "View";
+      this.dbCommunicationColumnNameStringDataView.Location = new System.Drawing.Point(184, 42);
+      this.dbCommunicationColumnNameStringDataView.Name = "dbCommunicationColumnNameStringDataView";
+      this.dbCommunicationColumnNameStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbCommunicationColumnNameStringDataView.StringData = null;
+      this.dbCommunicationColumnNameStringDataView.TabIndex = 1;
+      // 
+      // dbIDColumnNameStringDataView
+      // 
+      this.dbIDColumnNameStringDataView.Caption = "View";
+      this.dbIDColumnNameStringDataView.Location = new System.Drawing.Point(184, 19);
+      this.dbIDColumnNameStringDataView.Name = "dbIDColumnNameStringDataView";
+      this.dbIDColumnNameStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbIDColumnNameStringDataView.StringData = null;
+      this.dbIDColumnNameStringDataView.TabIndex = 0;
+      // 
+      // dbIDColumnNameLabel
+      // 
+      this.dbIDColumnNameLabel.AutoSize = true;
+      this.dbIDColumnNameLabel.Location = new System.Drawing.Point(6, 23);
+      this.dbIDColumnNameLabel.Name = "dbIDColumnNameLabel";
+      this.dbIDColumnNameLabel.Size = new System.Drawing.Size(108, 13);
+      this.dbIDColumnNameLabel.TabIndex = 3;
+      this.dbIDColumnNameLabel.Text = "DB ID Column Name:";
+      // 
+      // dbCommunicationColumnNameLabel
+      // 
+      this.dbCommunicationColumnNameLabel.AutoSize = true;
+      this.dbCommunicationColumnNameLabel.Location = new System.Drawing.Point(6, 46);
+      this.dbCommunicationColumnNameLabel.Name = "dbCommunicationColumnNameLabel";
+      this.dbCommunicationColumnNameLabel.Size = new System.Drawing.Size(169, 13);
+      this.dbCommunicationColumnNameLabel.TabIndex = 4;
+      this.dbCommunicationColumnNameLabel.Text = "DB Communication Column Name:";
+      // 
+      // dbSynchronizationColumnNameLabel
+      // 
+      this.dbSynchronizationColumnNameLabel.AutoSize = true;
+      this.dbSynchronizationColumnNameLabel.Location = new System.Drawing.Point(6, 70);
+      this.dbSynchronizationColumnNameLabel.Name = "dbSynchronizationColumnNameLabel";
+      this.dbSynchronizationColumnNameLabel.Size = new System.Drawing.Size(172, 13);
+      this.dbSynchronizationColumnNameLabel.TabIndex = 5;
+      this.dbSynchronizationColumnNameLabel.Text = "DB Synchronization Column Name:";
+      // 
+      // dbTableStringDataView
+      // 
+      this.dbTableStringDataView.Caption = "View";
+      this.dbTableStringDataView.Location = new System.Drawing.Point(86, 148);
+      this.dbTableStringDataView.Name = "dbTableStringDataView";
+      this.dbTableStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbTableStringDataView.StringData = null;
+      this.dbTableStringDataView.TabIndex = 5;
+      // 
+      // dbPasswordStringDataView
+      // 
+      this.dbPasswordStringDataView.Caption = "View";
+      this.dbPasswordStringDataView.Location = new System.Drawing.Point(86, 124);
+      this.dbPasswordStringDataView.Name = "dbPasswordStringDataView";
+      this.dbPasswordStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbPasswordStringDataView.StringData = null;
+      this.dbPasswordStringDataView.TabIndex = 4;
+      // 
+      // dbUserStringDataView
+      // 
+      this.dbUserStringDataView.Caption = "View";
+      this.dbUserStringDataView.Location = new System.Drawing.Point(86, 100);
+      this.dbUserStringDataView.Name = "dbUserStringDataView";
+      this.dbUserStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbUserStringDataView.StringData = null;
+      this.dbUserStringDataView.TabIndex = 3;
+      // 
+      // dbNameStringDataView
+      // 
+      this.dbNameStringDataView.Caption = "View";
+      this.dbNameStringDataView.Location = new System.Drawing.Point(86, 76);
+      this.dbNameStringDataView.Name = "dbNameStringDataView";
+      this.dbNameStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.dbNameStringDataView.StringData = null;
+      this.dbNameStringDataView.TabIndex = 2;
+      // 
+      // dbTableLabel
+      // 
+      this.dbTableLabel.AutoSize = true;
+      this.dbTableLabel.Location = new System.Drawing.Point(3, 152);
+      this.dbTableLabel.Name = "dbTableLabel";
+      this.dbTableLabel.Size = new System.Drawing.Size(55, 13);
+      this.dbTableLabel.TabIndex = 12;
+      this.dbTableLabel.Text = "DB Table:";
+      // 
+      // dbPasswordLabel
+      // 
+      this.dbPasswordLabel.AutoSize = true;
+      this.dbPasswordLabel.Location = new System.Drawing.Point(3, 128);
+      this.dbPasswordLabel.Name = "dbPasswordLabel";
+      this.dbPasswordLabel.Size = new System.Drawing.Size(74, 13);
+      this.dbPasswordLabel.TabIndex = 11;
+      this.dbPasswordLabel.Text = "DB Password:";
+      // 
+      // dbUserLabel
+      // 
+      this.dbUserLabel.AutoSize = true;
+      this.dbUserLabel.Location = new System.Drawing.Point(3, 104);
+      this.dbUserLabel.Name = "dbUserLabel";
+      this.dbUserLabel.Size = new System.Drawing.Size(50, 13);
+      this.dbUserLabel.TabIndex = 10;
+      this.dbUserLabel.Text = "DB User:";
+      // 
+      // dbNameLabel
+      // 
+      this.dbNameLabel.AutoSize = true;
+      this.dbNameLabel.Location = new System.Drawing.Point(3, 80);
+      this.dbNameLabel.Name = "dbNameLabel";
+      this.dbNameLabel.Size = new System.Drawing.Size(56, 13);
+      this.dbNameLabel.TabIndex = 9;
+      this.dbNameLabel.Text = "DB Name:";
+      // 
+      // portLabel
+      // 
+      this.portLabel.AutoSize = true;
+      this.portLabel.Location = new System.Drawing.Point(3, 55);
+      this.portLabel.Name = "portLabel";
+      this.portLabel.Size = new System.Drawing.Size(29, 13);
+      this.portLabel.TabIndex = 8;
+      this.portLabel.Text = "Port:";
+      // 
+      // ipAddressLabel
+      // 
+      this.ipAddressLabel.AutoSize = true;
+      this.ipAddressLabel.Location = new System.Drawing.Point(3, 31);
+      this.ipAddressLabel.Name = "ipAddressLabel";
+      this.ipAddressLabel.Size = new System.Drawing.Size(61, 13);
+      this.ipAddressLabel.TabIndex = 7;
+      this.ipAddressLabel.Text = "IP Address:";
+      // 
+      // portIntDataView
+      // 
+      this.portIntDataView.Caption = "View";
+      this.portIntDataView.IntData = null;
+      this.portIntDataView.Location = new System.Drawing.Point(86, 52);
+      this.portIntDataView.Name = "portIntDataView";
+      this.portIntDataView.Size = new System.Drawing.Size(200, 26);
+      this.portIntDataView.TabIndex = 1;
+      // 
+      // ipAddressStringDataView
+      // 
+      this.ipAddressStringDataView.Caption = "View";
+      this.ipAddressStringDataView.Location = new System.Drawing.Point(86, 28);
+      this.ipAddressStringDataView.Name = "ipAddressStringDataView";
+      this.ipAddressStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.ipAddressStringDataView.StringData = null;
+      this.ipAddressStringDataView.TabIndex = 0;
+      // 
+      // odbcDriverLabel
+      // 
+      this.odbcDriverLabel.AutoSize = true;
+      this.odbcDriverLabel.Location = new System.Drawing.Point(3, 6);
+      this.odbcDriverLabel.Name = "odbcDriverLabel";
+      this.odbcDriverLabel.Size = new System.Drawing.Size(71, 13);
+      this.odbcDriverLabel.TabIndex = 13;
+      this.odbcDriverLabel.Text = "ODBC Driver:";
+      // 
+      // odbcDriverComboBox
+      // 
+      this.odbcDriverComboBox.FormattingEnabled = true;
+      this.odbcDriverComboBox.Location = new System.Drawing.Point(86, 3);
+      this.odbcDriverComboBox.Name = "odbcDriverComboBox";
+      this.odbcDriverComboBox.Size = new System.Drawing.Size(200, 21);
+      this.odbcDriverComboBox.TabIndex = 14;
+      this.odbcDriverComboBox.SelectedIndexChanged += new System.EventHandler(this.odbcDriverComboBox_SelectedIndexChanged);
+      // 
+      // MySQLOdbcDatabaseDriverConfigurationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.odbcDriverComboBox);
+      this.Controls.Add(this.odbcDriverLabel);
+      this.Controls.Add(this.dbTableGroupBox);
+      this.Controls.Add(this.dbTableStringDataView);
+      this.Controls.Add(this.dbPasswordStringDataView);
+      this.Controls.Add(this.dbUserStringDataView);
+      this.Controls.Add(this.dbNameStringDataView);
+      this.Controls.Add(this.dbTableLabel);
+      this.Controls.Add(this.dbPasswordLabel);
+      this.Controls.Add(this.dbUserLabel);
+      this.Controls.Add(this.dbNameLabel);
+      this.Controls.Add(this.portLabel);
+      this.Controls.Add(this.ipAddressLabel);
+      this.Controls.Add(this.portIntDataView);
+      this.Controls.Add(this.ipAddressStringDataView);
+      this.Name = "MySQLOdbcDatabaseDriverConfigurationView";
+      this.Size = new System.Drawing.Size(411, 284);
+      this.dbTableGroupBox.ResumeLayout(false);
+      this.dbTableGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox dbTableGroupBox;
+    private System.Windows.Forms.Label dbIDColumnNameLabel;
+    private HeuristicLab.Data.StringDataView dbSynchronizationColumnNameStringDataView;
+    private System.Windows.Forms.Label dbCommunicationColumnNameLabel;
+    private HeuristicLab.Data.StringDataView dbCommunicationColumnNameStringDataView;
+    private System.Windows.Forms.Label dbSynchronizationColumnNameLabel;
+    private HeuristicLab.Data.StringDataView dbIDColumnNameStringDataView;
+    private HeuristicLab.Data.StringDataView dbTableStringDataView;
+    private HeuristicLab.Data.StringDataView dbPasswordStringDataView;
+    private HeuristicLab.Data.StringDataView dbUserStringDataView;
+    private HeuristicLab.Data.StringDataView dbNameStringDataView;
+    private System.Windows.Forms.Label dbTableLabel;
+    private System.Windows.Forms.Label dbPasswordLabel;
+    private System.Windows.Forms.Label dbUserLabel;
+    private System.Windows.Forms.Label dbNameLabel;
+    private System.Windows.Forms.Label portLabel;
+    private System.Windows.Forms.Label ipAddressLabel;
+    private HeuristicLab.Data.IntDataView portIntDataView;
+    private HeuristicLab.Data.StringDataView ipAddressStringDataView;
+    private System.Windows.Forms.Label odbcDriverLabel;
+    private System.Windows.Forms.ComboBox odbcDriverComboBox;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/OdbcDatabaseDriverConfigurationView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProcessData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProcessData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProcessData.cs	(revision 1270)
@@ -0,0 +1,121 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class ProcessData : ItemBase, IDataStream {
+    private LocalProcessDriverConfiguration config;
+    public IDriverConfiguration Configuration {
+      get { return config; }
+      set { config = (LocalProcessDriverConfiguration)value; }
+    }
+    private Process process;
+    public Process Process {
+      get { return process; }
+      set { process = value; }
+    }
+
+    public ProcessData() {
+      process = null;
+      config = null;
+    }
+
+    // A process cannot be cloned
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ProcessData clone = new ProcessData();
+      clonedObjects.Add(Guid, clone);
+      clone.process = process;
+      clone.config = (LocalProcessDriverConfiguration)Auxiliary.Clone(config, clonedObjects);
+      return clone;
+    }
+
+    #region persistence
+    // A process cannot be persisted
+    // but information can be persisted that will allow it to be recreated
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode configNode = PersistenceManager.Persist("Configuration", config, document, persistedObjects);
+      node.AppendChild(configNode);
+      return node;
+    }
+
+    // A process cannot be persisted
+    // but information can be persisted that will allow it to be recreated
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Configuration = (LocalProcessDriverConfiguration)PersistenceManager.Restore(node.SelectSingleNode("Configuration"), restoredObjects);
+      StartProcess();
+    }
+    #endregion
+
+    private void StartProcess() {
+      process = new Process();
+      process.StartInfo.FileName = config.ExecutablePath.Data;
+      process.StartInfo.Arguments = config.Arguments.Data;
+      process.StartInfo.UseShellExecute = false;
+      process.StartInfo.RedirectStandardInput = true;
+      process.StartInfo.RedirectStandardError = true;
+      process.StartInfo.RedirectStandardOutput = true;
+      process.Start();
+    }
+
+    public void Initialize(IDriverConfiguration configuration) {
+      Configuration = configuration;
+    }
+
+    public bool Connect() {
+      StartProcess();
+      return process != null && !process.HasExited;
+    }
+
+    public void Close() {
+      if (!process.HasExited) process.Kill();
+      process.Close();
+      process = null;
+    }
+
+    public void Write(string s) {
+      StreamWriter writer = process.StandardInput;
+      writer.WriteLine(s);
+      writer.WriteLine(((char)4).ToString());
+    }
+
+    public string Read() {
+      StreamReader reader = process.StandardOutput;
+      StringBuilder buffer = new StringBuilder();
+      string line = "";
+      do {
+        line = reader.ReadLine();
+        if (line.Equals(((char)4).ToString())) break;
+        buffer.AppendLine(line);
+      } while (true);
+      return buffer.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,33 @@
+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.Communication.Data")]
+[assembly: AssemblyDescription("This assembly contains the datatypes that are used in communication")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("e477780c-b901-4f5d-80d6-056991e55248")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Protocol.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Protocol.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/Protocol.cs	(revision 1270)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.Xml.XPath;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class Protocol : ItemBase, IEditable {
+    private string name;
+    public string Name {
+      get { return name; }
+      set {
+        name = value;
+        OnChanged();
+      }
+    }
+    private IList<ProtocolState> states;
+    public IList<ProtocolState> States {
+      get { return states; }
+      set {
+        states = value;
+        // if the newly assigned states list doesn't contain the currently selected initial state
+        if (!states.Contains(initialState))
+          if (states.Count > 0)
+            initialState = states[0];
+          else initialState = null;
+        OnChanged();
+      }
+    }
+    private ProtocolState initialState;
+    public ProtocolState InitialState {
+      get { return initialState; }
+      set {
+        initialState = value;
+        OnChanged();
+      }
+    }
+
+    public Protocol() {
+      name = "Unnamed protocol";
+      states = new List<ProtocolState>();
+
+      ProtocolState firstState = new ProtocolState();
+      firstState.Name = "InitialState";
+      states.Add(firstState);
+      initialState = firstState;
+    }
+
+    public override IView CreateView() {
+      return new ProtocolEditor(this);
+    }
+    public virtual IEditor CreateEditor() {
+      return new ProtocolEditor(this);
+    }
+
+    #region clone & persistence
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Protocol clone = new Protocol();
+      clonedObjects.Add(Guid, clone);
+      clone.Name = (string)name.Clone();
+      clone.States = new List<ProtocolState>(states.Count);
+      foreach (ProtocolState state in states)
+        clone.States.Add((ProtocolState)state.Clone(clonedObjects));
+      // iterate through the states and select the appropriate state in the clone
+      int index = states.IndexOf(initialState);
+      if (index >= 0) clone.InitialState = clone.States[index];
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      
+      XmlAttribute nameAttrib = document.CreateAttribute("Name");
+      nameAttrib.Value = this.name;
+      node.Attributes.Append(nameAttrib);
+
+      XmlNode statesNode = document.CreateNode(XmlNodeType.Element, "States", null);
+      foreach (ProtocolState state in states) {
+        XmlNode tmp = state.GetXmlNode("State", document, persistedObjects);
+        if (state.Equals(initialState)) {
+          XmlAttribute initialStateAttrib = document.CreateAttribute("InitialState");
+          initialStateAttrib.Value = "1";
+          tmp.Attributes.Append(initialStateAttrib);
+        }
+        statesNode.AppendChild(tmp);
+      }
+      node.AppendChild(statesNode);
+
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      name = node.Attributes.GetNamedItem("Name").Value;
+
+      XmlNode statesNode = node.SelectSingleNode("States");
+      states = new List<ProtocolState>(statesNode.ChildNodes.Count);
+      foreach (XmlNode childNode in statesNode.ChildNodes) {
+        ProtocolState tmp = new ProtocolState();
+        tmp.Populate(childNode, restoredObjects);
+        states.Add(tmp);
+        XmlNode initialStateNode = childNode.Attributes.GetNamedItem("InitialState");
+        if (initialStateNode != null && initialStateNode.Value.Equals("1")) initialState = tmp;
+      }
+    }
+    #endregion clone & persistence
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,173 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Data {
+  partial class ProtocolEditor {
+    /// <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();
+      }
+      if (Protocol != null) Protocol.Changed -= new System.EventHandler(Protocol_Changed);
+      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.protocolNameLabel = new System.Windows.Forms.Label();
+      this.protocolStatesLabel = new System.Windows.Forms.Label();
+      this.statesListBox = new System.Windows.Forms.ListBox();
+      this.stateChartPictureBox = new System.Windows.Forms.PictureBox();
+      this.addStateButton = new System.Windows.Forms.Button();
+      this.removeStateButton = new System.Windows.Forms.Button();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.setAsInitialStateButton = new System.Windows.Forms.Button();
+      ((System.ComponentModel.ISupportInitialize)(this.stateChartPictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // protocolNameLabel
+      // 
+      this.protocolNameLabel.AutoSize = true;
+      this.protocolNameLabel.Location = new System.Drawing.Point(3, 6);
+      this.protocolNameLabel.Name = "protocolNameLabel";
+      this.protocolNameLabel.Size = new System.Drawing.Size(80, 13);
+      this.protocolNameLabel.TabIndex = 3;
+      this.protocolNameLabel.Text = "Protocol Name:";
+      // 
+      // protocolStatesLabel
+      // 
+      this.protocolStatesLabel.AutoSize = true;
+      this.protocolStatesLabel.Location = new System.Drawing.Point(3, 32);
+      this.protocolStatesLabel.Name = "protocolStatesLabel";
+      this.protocolStatesLabel.Size = new System.Drawing.Size(82, 13);
+      this.protocolStatesLabel.TabIndex = 8;
+      this.protocolStatesLabel.Text = "Protocol States:";
+      // 
+      // statesListBox
+      // 
+      this.statesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.statesListBox.FormattingEnabled = true;
+      this.statesListBox.Location = new System.Drawing.Point(6, 48);
+      this.statesListBox.MultiColumn = true;
+      this.statesListBox.Name = "statesListBox";
+      this.statesListBox.Size = new System.Drawing.Size(159, 303);
+      this.statesListBox.TabIndex = 10;
+      this.statesListBox.SelectedIndexChanged += new System.EventHandler(this.statesListBox_SelectedIndexChanged);
+      this.statesListBox.DoubleClick += new System.EventHandler(this.statesListBox_DoubleClick);
+      // 
+      // stateChartPictureBox
+      // 
+      this.stateChartPictureBox.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.stateChartPictureBox.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+      this.stateChartPictureBox.Location = new System.Drawing.Point(172, 48);
+      this.stateChartPictureBox.Name = "stateChartPictureBox";
+      this.stateChartPictureBox.Size = new System.Drawing.Size(444, 303);
+      this.stateChartPictureBox.TabIndex = 11;
+      this.stateChartPictureBox.TabStop = false;
+      // 
+      // addStateButton
+      // 
+      this.addStateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addStateButton.Location = new System.Drawing.Point(6, 357);
+      this.addStateButton.Name = "addStateButton";
+      this.addStateButton.Size = new System.Drawing.Size(77, 23);
+      this.addStateButton.TabIndex = 12;
+      this.addStateButton.Text = "Add";
+      this.addStateButton.UseVisualStyleBackColor = true;
+      this.addStateButton.Click += new System.EventHandler(this.addStateButton_Click);
+      // 
+      // removeStateButton
+      // 
+      this.removeStateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeStateButton.Location = new System.Drawing.Point(89, 357);
+      this.removeStateButton.Name = "removeStateButton";
+      this.removeStateButton.Size = new System.Drawing.Size(75, 23);
+      this.removeStateButton.TabIndex = 13;
+      this.removeStateButton.Text = "Remove";
+      this.removeStateButton.UseVisualStyleBackColor = true;
+      this.removeStateButton.Click += new System.EventHandler(this.removeStateButton_Click);
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(89, 3);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(142, 20);
+      this.nameTextBox.TabIndex = 14;
+      // 
+      // setAsInitialStateButton
+      // 
+      this.setAsInitialStateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.setAsInitialStateButton.Location = new System.Drawing.Point(170, 357);
+      this.setAsInitialStateButton.Name = "setAsInitialStateButton";
+      this.setAsInitialStateButton.Size = new System.Drawing.Size(75, 23);
+      this.setAsInitialStateButton.TabIndex = 15;
+      this.setAsInitialStateButton.Text = "Set Initital";
+      this.setAsInitialStateButton.UseVisualStyleBackColor = true;
+      this.setAsInitialStateButton.Click += new System.EventHandler(this.setAsInitialStateButton_Click);
+      // 
+      // ProtocolEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.setAsInitialStateButton);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.removeStateButton);
+      this.Controls.Add(this.addStateButton);
+      this.Controls.Add(this.stateChartPictureBox);
+      this.Controls.Add(this.statesListBox);
+      this.Controls.Add(this.protocolStatesLabel);
+      this.Controls.Add(this.protocolNameLabel);
+      this.Name = "ProtocolEditor";
+      this.Size = new System.Drawing.Size(619, 389);
+      ((System.ComponentModel.ISupportInitialize)(this.stateChartPictureBox)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label protocolNameLabel;
+    private System.Windows.Forms.Label protocolStatesLabel;
+    private System.Windows.Forms.ListBox statesListBox;
+    private System.Windows.Forms.PictureBox stateChartPictureBox;
+    private System.Windows.Forms.Button addStateButton;
+    private System.Windows.Forms.Button removeStateButton;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Button setAsInitialStateButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.cs	(revision 1270)
@@ -0,0 +1,170 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class ProtocolEditor : EditorBase {
+    public Protocol Protocol {
+      get { return (Protocol)Item; }
+      set { base.Item = value; }
+    }
+
+    public ProtocolEditor() {
+      InitializeComponent();
+      statesListBox.DrawMode = DrawMode.OwnerDrawFixed;
+      statesListBox.DrawItem += new DrawItemEventHandler(statesListBox_DrawItem);
+    }
+
+    void statesListBox_DrawItem(object sender, DrawItemEventArgs e) {
+      if (e.Index >= 0) { // during Items.Clear() this method is called with index -1
+        ListBox lb = (ListBox)sender;
+        ProtocolState state = (ProtocolState)lb.Items[e.Index];
+        e.DrawBackground();
+        e.DrawFocusRectangle();
+        SolidBrush textColor = new SolidBrush(Color.Black);
+        if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) textColor.Color = Color.White;
+        if (Protocol.InitialState.Equals(state))
+          e.Graphics.DrawString(state.Name, new Font(e.Font.FontFamily, e.Font.Size, FontStyle.Bold), textColor, e.Bounds);
+        else
+          e.Graphics.DrawString(state.Name, e.Font, textColor, e.Bounds);
+      }
+    }
+
+    public ProtocolEditor(Protocol protocol)
+      : this() {
+      Protocol = protocol;
+    }
+
+    protected override void RemoveItemEvents() {
+      nameTextBox.DataBindings.Clear();
+      Protocol.Changed -= new EventHandler(Protocol_Changed);
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Protocol.Changed += new EventHandler(Protocol_Changed);
+      nameTextBox.DataBindings.Add("Text", Protocol, "Name");
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (Protocol == null) {
+        Caption = "Protocol";
+        nameTextBox.Enabled = false;
+        setAsInitialStateButton.Enabled = false;
+        addStateButton.Enabled = false;
+        removeStateButton.Enabled = false;
+        statesListBox.Enabled = false;
+
+        nameTextBox.Text = "";
+        statesListBox.Items.Clear();
+      } else {
+        Caption = Protocol.Name;
+
+        statesListBox.Items.Clear();
+        foreach (ProtocolState state in Protocol.States)
+          statesListBox.Items.Add(state);
+
+        statesListBox.Enabled = true;
+        addStateButton.Enabled = true;
+        removeStateButton.Enabled = true;
+        setAsInitialStateButton.Enabled = true;
+        nameTextBox.Enabled = true;
+      }
+    }
+
+    void Protocol_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void addStateButton_Click(object sender, EventArgs e) {
+      ProtocolState tmp = new ProtocolState();
+      int index = statesListBox.SelectedIndex;
+      if (index < 0) {
+        Protocol.States.Add(tmp);
+      } else {
+        Protocol.States.Insert(index, tmp);
+      }
+      Refresh();
+      statesListBox.SelectedIndex = index;
+    }
+
+    private void removeStateButton_Click(object sender, EventArgs e) {
+      if (statesListBox.SelectedIndex >= 0) {
+        int index = statesListBox.SelectedIndex;
+        Protocol.States.RemoveAt(statesListBox.SelectedIndex);
+        Refresh();
+        if (Protocol.States.Count > 0)
+          statesListBox.SelectedIndex = ((index < Protocol.States.Count) ? (index) : (Protocol.States.Count - 1));
+      }
+    }
+
+    private void setAsInitialStateButton_Click(object sender, EventArgs e) {
+      if (statesListBox.SelectedIndex >= 0) {
+        Protocol.InitialState = (ProtocolState)statesListBox.SelectedItem;
+        statesListBox.Refresh();
+      }
+    }
+
+    private void statesListBox_DoubleClick(object sender, EventArgs e) {
+      if (lastDeselectedIndex >= 0 || lastSelectedIndex >= 0) {
+        statesListBox.SelectedIndex = (lastDeselectedIndex >= 0) ? (lastDeselectedIndex) : (lastSelectedIndex);
+        ProtocolState selected = (ProtocolState)statesListBox.Items[(lastDeselectedIndex >= 0) ? (lastDeselectedIndex) : (lastSelectedIndex)];
+        bool editingInitial = (Protocol.InitialState == selected);
+        ProtocolState selectedClone = (ProtocolState)selected.Clone(new Dictionary<Guid, object>());
+        IView stateView = selectedClone.CreateView();
+        using (WindowedView display = new WindowedView(stateView as UserControl)) {
+          display.ShowDialog(this);
+          if (display.DialogResult == DialogResult.OK) {
+            Protocol.States[(lastDeselectedIndex >= 0) ? (lastDeselectedIndex) : (lastSelectedIndex)] = selectedClone;
+            if (editingInitial) Protocol.InitialState = selectedClone;
+            Refresh();
+          }
+        }
+      }
+    }
+
+    private int lastSelectedIndex = -1;
+    private int lastDeselectedIndex = -1;
+
+    private void statesListBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (statesListBox.SelectedIndex >= 0) {
+        if (lastSelectedIndex == statesListBox.SelectedIndex) {
+          lastDeselectedIndex = statesListBox.SelectedIndex;
+          statesListBox.SelectedIndex = -1;
+          lastSelectedIndex = -1;
+        } else {
+          lastSelectedIndex = statesListBox.SelectedIndex;
+          lastDeselectedIndex = -1;
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolEditor.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolState.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolState.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolState.cs	(revision 1270)
@@ -0,0 +1,177 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.Communication.Data {
+  public class ProtocolState : ItemBase {
+    private string name;
+    public string Name {
+      get { return name; }
+      set {
+        name = value;
+        OnChanged();
+      }
+    }
+    private bool giveBatch;
+    public bool GiveBatch {
+      get { return giveBatch; }
+      set {
+        giveBatch = value;
+        OnChanged();
+      }
+    }
+    private ItemList<IVariable> give;
+    public ItemList<IVariable> Give {
+      get { return give; }
+      set {
+        give = value;
+        OnChanged();
+      }
+    }
+    private bool expectBatch;
+    public bool ExpectBatch {
+      get { return expectBatch; }
+      set {
+        expectBatch = value;
+        OnChanged();
+      }
+    }
+    private ItemList<IVariable> expect;
+    public ItemList<IVariable> Expect {
+      get { return expect; }
+      set {
+        expect = value;
+        OnChanged();
+      }
+    }
+
+    public ProtocolState() {
+      name = Guid.NewGuid().ToString();
+      giveBatch = false;
+      expectBatch = false;
+      give = new ItemList<IVariable>();
+      expect = new ItemList<IVariable>();
+    }
+
+    public override IView CreateView() {
+      return new ProtocolStateView(this);
+    }
+
+    #region clone & persistence
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ProtocolState clone = new ProtocolState();
+      clonedObjects.Add(Guid, clone);
+
+      clone.name = (string)name.Clone();
+      clone.giveBatch = giveBatch;
+      clone.expectBatch = expectBatch;
+
+      clone.give = new ItemList<IVariable>();
+      for (int i = 0; i < give.Count; i++)
+        clone.give.Add((IVariable)give[i].Clone());
+
+      clone.expect = new ItemList<IVariable>();
+      for (int i = 0; i < expect.Count; i++)
+        clone.expect.Add((IVariable)expect[i].Clone());
+
+      return clone;
+    }
+
+    // use a simpler serialization for the protocol to make reading it in other programming languages easier
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute nameAttrib = document.CreateAttribute("Name");
+      nameAttrib.Value = this.name;
+      node.Attributes.Append(nameAttrib);
+      XmlAttribute giveBatchAttrib = document.CreateAttribute("GiveBatch");
+      giveBatchAttrib.Value = giveBatch.ToString();
+      node.Attributes.Append(giveBatchAttrib);
+      XmlAttribute expectBatchAttrib = document.CreateAttribute("ExpectBatch");
+      expectBatchAttrib.Value = expectBatch.ToString();
+      node.Attributes.Append(expectBatchAttrib);
+
+      XmlNode giveNode = document.CreateNode(XmlNodeType.Element, "Give", null);
+      foreach (IVariable param in give) {
+        XmlNode tmp = document.CreateNode(XmlNodeType.Element, "Parameter", null);
+        XmlAttribute paramNameAttrib = document.CreateAttribute("Name");
+        paramNameAttrib.Value = param.Name;
+        tmp.Attributes.Append(paramNameAttrib);
+        XmlAttribute valueTypeAttrib = document.CreateAttribute("Type");
+        Type type = param.Value.GetType();
+        valueTypeAttrib.Value = type.FullName + ", " + type.Assembly.FullName.Substring(0, type.Assembly.FullName.IndexOf(","));
+        tmp.Attributes.Append(valueTypeAttrib);
+        giveNode.AppendChild(tmp);
+      }
+      node.AppendChild(giveNode);
+
+      XmlNode expectNode = document.CreateNode(XmlNodeType.Element, "Expect", null);
+      foreach (IVariable param in expect) {
+        XmlNode tmp = document.CreateNode(XmlNodeType.Element, "Parameter", null);
+        XmlAttribute paramNameAttrib = document.CreateAttribute("Name");
+        paramNameAttrib.Value = param.Name;
+        tmp.Attributes.Append(paramNameAttrib);
+        XmlAttribute valueTypeAttrib = document.CreateAttribute("Type");
+        Type type = param.Value.GetType();
+        valueTypeAttrib.Value = type.FullName + ", " + type.Assembly.FullName.Substring(0, type.Assembly.FullName.IndexOf(","));
+        tmp.Attributes.Append(valueTypeAttrib);
+        expectNode.AppendChild(tmp);
+      }
+      node.AppendChild(expectNode);
+      return node;
+    }
+
+    // use a simpler serialization for the protocol to make reading it in other programming languages easier
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      name = node.Attributes.GetNamedItem("Name").Value;
+      bool.TryParse(node.Attributes.GetNamedItem("GiveBatch").Value, out giveBatch);
+      bool.TryParse(node.Attributes.GetNamedItem("ExpectBatch").Value, out expectBatch);
+
+      give = new ItemList<IVariable>();
+      XmlNodeList giveParams = node.SelectSingleNode("Give").SelectNodes("Parameter");
+      foreach (XmlNode param in giveParams) {
+        IItem tmp = (IItem)Activator.CreateInstance(System.Type.GetType(param.Attributes.GetNamedItem("Type").Value));
+        IVariable var = new Variable(param.Attributes.GetNamedItem("Name").Value, tmp);
+        give.Add(var);
+      }
+
+      expect = new ItemList<IVariable>();
+      XmlNodeList expectParams = node.SelectSingleNode("Expect").SelectNodes("Parameter");
+      foreach (XmlNode param in expectParams) {
+        IItem tmp = (IItem)Activator.CreateInstance(System.Type.GetType(param.Attributes.GetNamedItem("Type").Value));
+        IVariable var = new Variable(param.Attributes.GetNamedItem("Name").Value, tmp);
+        expect.Add(var);
+      }
+    }
+    #endregion clone & persistence
+
+    public override string ToString() {
+      return name.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.Designer.cs	(revision 1270)
@@ -0,0 +1,236 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Data {
+  partial class ProtocolStateView {
+    /// <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.nameLabel = new System.Windows.Forms.Label();
+      this.communicationDataTabControl = new System.Windows.Forms.TabControl();
+      this.giveTabPage = new System.Windows.Forms.TabPage();
+      this.giveBatchCheckBox = new System.Windows.Forms.CheckBox();
+      this.giveVariablesLabel = new System.Windows.Forms.Label();
+      this.giveBatchLabel = new System.Windows.Forms.Label();
+      this.expectTabPage = new System.Windows.Forms.TabPage();
+      this.expectVariablesLabel = new System.Windows.Forms.Label();
+      this.expectBatchCheckBox = new System.Windows.Forms.CheckBox();
+      this.expectBatchLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.giveItemListView = new HeuristicLab.Data.ItemListView<HeuristicLab.Core.IVariable>();
+      this.expectItemListView = new HeuristicLab.Data.ItemListView<HeuristicLab.Core.IVariable>();
+      this.communicationDataTabControl.SuspendLayout();
+      this.giveTabPage.SuspendLayout();
+      this.expectTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(4, 17);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 3;
+      this.nameLabel.Text = "Name:";
+      // 
+      // communicationDataTabControl
+      // 
+      this.communicationDataTabControl.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.communicationDataTabControl.Controls.Add(this.giveTabPage);
+      this.communicationDataTabControl.Controls.Add(this.expectTabPage);
+      this.communicationDataTabControl.Location = new System.Drawing.Point(3, 46);
+      this.communicationDataTabControl.Name = "communicationDataTabControl";
+      this.communicationDataTabControl.SelectedIndex = 0;
+      this.communicationDataTabControl.Size = new System.Drawing.Size(404, 324);
+      this.communicationDataTabControl.TabIndex = 5;
+      // 
+      // giveTabPage
+      // 
+      this.giveTabPage.Controls.Add(this.giveItemListView);
+      this.giveTabPage.Controls.Add(this.giveBatchCheckBox);
+      this.giveTabPage.Controls.Add(this.giveVariablesLabel);
+      this.giveTabPage.Controls.Add(this.giveBatchLabel);
+      this.giveTabPage.Location = new System.Drawing.Point(4, 22);
+      this.giveTabPage.Name = "giveTabPage";
+      this.giveTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.giveTabPage.Size = new System.Drawing.Size(396, 298);
+      this.giveTabPage.TabIndex = 0;
+      this.giveTabPage.Text = "Give";
+      this.giveTabPage.UseVisualStyleBackColor = true;
+      // 
+      // giveBatchCheckBox
+      // 
+      this.giveBatchCheckBox.AutoSize = true;
+      this.giveBatchCheckBox.Location = new System.Drawing.Point(58, 20);
+      this.giveBatchCheckBox.Name = "giveBatchCheckBox";
+      this.giveBatchCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.giveBatchCheckBox.TabIndex = 9;
+      this.giveBatchCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // giveVariablesLabel
+      // 
+      this.giveVariablesLabel.AutoSize = true;
+      this.giveVariablesLabel.Location = new System.Drawing.Point(13, 48);
+      this.giveVariablesLabel.Name = "giveVariablesLabel";
+      this.giveVariablesLabel.Size = new System.Drawing.Size(53, 13);
+      this.giveVariablesLabel.TabIndex = 8;
+      this.giveVariablesLabel.Text = "Variables:";
+      // 
+      // giveBatchLabel
+      // 
+      this.giveBatchLabel.AutoSize = true;
+      this.giveBatchLabel.Location = new System.Drawing.Point(13, 20);
+      this.giveBatchLabel.Name = "giveBatchLabel";
+      this.giveBatchLabel.Size = new System.Drawing.Size(38, 13);
+      this.giveBatchLabel.TabIndex = 6;
+      this.giveBatchLabel.Text = "Batch:";
+      // 
+      // expectTabPage
+      // 
+      this.expectTabPage.Controls.Add(this.expectItemListView);
+      this.expectTabPage.Controls.Add(this.expectVariablesLabel);
+      this.expectTabPage.Controls.Add(this.expectBatchCheckBox);
+      this.expectTabPage.Controls.Add(this.expectBatchLabel);
+      this.expectTabPage.Location = new System.Drawing.Point(4, 22);
+      this.expectTabPage.Name = "expectTabPage";
+      this.expectTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.expectTabPage.Size = new System.Drawing.Size(396, 298);
+      this.expectTabPage.TabIndex = 1;
+      this.expectTabPage.Text = "Expect";
+      this.expectTabPage.UseVisualStyleBackColor = true;
+      // 
+      // expectVariablesLabel
+      // 
+      this.expectVariablesLabel.AutoSize = true;
+      this.expectVariablesLabel.Location = new System.Drawing.Point(13, 48);
+      this.expectVariablesLabel.Name = "expectVariablesLabel";
+      this.expectVariablesLabel.Size = new System.Drawing.Size(53, 13);
+      this.expectVariablesLabel.TabIndex = 12;
+      this.expectVariablesLabel.Text = "Variables:";
+      // 
+      // expectBatchCheckBox
+      // 
+      this.expectBatchCheckBox.AutoSize = true;
+      this.expectBatchCheckBox.Location = new System.Drawing.Point(58, 20);
+      this.expectBatchCheckBox.Name = "expectBatchCheckBox";
+      this.expectBatchCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.expectBatchCheckBox.TabIndex = 10;
+      this.expectBatchCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // expectBatchLabel
+      // 
+      this.expectBatchLabel.AutoSize = true;
+      this.expectBatchLabel.Location = new System.Drawing.Point(13, 20);
+      this.expectBatchLabel.Name = "expectBatchLabel";
+      this.expectBatchLabel.Size = new System.Drawing.Size(38, 13);
+      this.expectBatchLabel.TabIndex = 6;
+      this.expectBatchLabel.Text = "Batch:";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(48, 14);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(137, 20);
+      this.nameTextBox.TabIndex = 6;
+      // 
+      // giveItemListView
+      // 
+      this.giveItemListView.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.giveItemListView.Caption = "View";
+      this.giveItemListView.ItemList = null;
+      this.giveItemListView.Location = new System.Drawing.Point(16, 64);
+      this.giveItemListView.Name = "giveItemListView";
+      this.giveItemListView.Size = new System.Drawing.Size(377, 231);
+      this.giveItemListView.TabIndex = 10;
+      // 
+      // expectItemListView
+      // 
+      this.expectItemListView.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.expectItemListView.Caption = "View";
+      this.expectItemListView.ItemList = null;
+      this.expectItemListView.Location = new System.Drawing.Point(16, 64);
+      this.expectItemListView.Name = "expectItemListView";
+      this.expectItemListView.Size = new System.Drawing.Size(377, 231);
+      this.expectItemListView.TabIndex = 13;
+      // 
+      // ProtocolStateView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.communicationDataTabControl);
+      this.Controls.Add(this.nameLabel);
+      this.Name = "ProtocolStateView";
+      this.Size = new System.Drawing.Size(410, 373);
+      this.communicationDataTabControl.ResumeLayout(false);
+      this.giveTabPage.ResumeLayout(false);
+      this.giveTabPage.PerformLayout();
+      this.expectTabPage.ResumeLayout(false);
+      this.expectTabPage.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.TabControl communicationDataTabControl;
+    private System.Windows.Forms.TabPage giveTabPage;
+    private System.Windows.Forms.TabPage expectTabPage;
+    private System.Windows.Forms.Label giveBatchLabel;
+    private System.Windows.Forms.Label expectBatchLabel;
+    private System.Windows.Forms.CheckBox giveBatchCheckBox;
+    private System.Windows.Forms.Label giveVariablesLabel;
+    private System.Windows.Forms.Label expectVariablesLabel;
+    private System.Windows.Forms.CheckBox expectBatchCheckBox;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private HeuristicLab.Data.ItemListView<HeuristicLab.Core.IVariable> giveItemListView;
+    private HeuristicLab.Data.ItemListView<HeuristicLab.Core.IVariable> expectItemListView;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.cs	(revision 1270)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class ProtocolStateView : ViewBase {
+    public ProtocolState ProtocolState {
+      get { return (ProtocolState)Item; }
+      set { base.Item = value; }
+    }
+
+    public ProtocolStateView() {
+      InitializeComponent();
+    }
+    public ProtocolStateView(ProtocolState protocolState)
+      : this() {
+      ProtocolState = protocolState;
+    }
+
+    protected override void RemoveItemEvents() {
+      nameTextBox.DataBindings.Clear();
+      giveBatchCheckBox.DataBindings.Clear();
+      expectBatchCheckBox.DataBindings.Clear();
+      ProtocolState.Changed -= new EventHandler(ProtocolState_Changed);
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ProtocolState.Changed += new EventHandler(ProtocolState_Changed);
+      expectBatchCheckBox.DataBindings.Add("Checked", ProtocolState, "ExpectBatch");
+      giveBatchCheckBox.DataBindings.Add("Checked", ProtocolState, "GiveBatch");
+      nameTextBox.DataBindings.Add("Text", ProtocolState, "Name");
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ProtocolState == null) {
+        nameTextBox.Enabled = false;
+        communicationDataTabControl.Enabled = false;
+        giveItemListView.ItemList = null;
+        expectItemListView.ItemList = null;
+      } else {
+        nameTextBox.Text = ProtocolState.Name;
+        giveBatchCheckBox.Checked = ProtocolState.GiveBatch;
+        expectBatchCheckBox.Checked = ProtocolState.ExpectBatch;
+
+        giveItemListView.ItemList = ProtocolState.Give;
+        expectItemListView.ItemList = ProtocolState.Expect;
+
+        communicationDataTabControl.Enabled = true;
+        nameTextBox.Enabled = true;
+      }
+    }
+
+    #region ProtocolState change handling (main underlying object)
+    void ProtocolState_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/ProtocolStateView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/SocketData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/SocketData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/SocketData.cs	(revision 1270)
@@ -0,0 +1,199 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class SocketData : ItemBase, IDataStream {
+    private TcpNetworkDriverConfiguration config;
+    public IDriverConfiguration Configuration {
+      get { return config; }
+      set { config = (TcpNetworkDriverConfiguration)value; }
+    }
+
+    private TcpListener tcpListener;
+    private TcpClient tcpIn;
+    private TcpClient tcpOut;
+    private string buffer;
+
+    public SocketData() {
+      tcpListener = null;
+      tcpIn = null;
+      tcpOut = null;
+      config = null;
+      buffer = "";
+    }
+
+    #region clone & persistence
+    // A socket cannot be cloned
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SocketData clone = new SocketData();
+      clonedObjects.Add(Guid, clone);
+      clone.tcpIn = tcpIn;
+      clone.config = (TcpNetworkDriverConfiguration)Auxiliary.Clone(config, clonedObjects);
+      clone.buffer = buffer;
+      return clone;
+    }
+
+    // A socket cannot be persisted
+    // but information can be persisted that will allow it to be recreated
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode configNode = PersistenceManager.Persist("Configuration", config, document, persistedObjects);
+      node.AppendChild(configNode);
+      XmlNode bufferNode = document.CreateNode(XmlNodeType.Element, "Buffer", null);
+      bufferNode.InnerText = buffer;
+      node.AppendChild(bufferNode);
+      return node;
+    }
+
+    // A socket cannot be persisted
+    // but information can be persisted that will allow it to be recreated
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Configuration = (TcpNetworkDriverConfiguration)PersistenceManager.Restore(node.SelectSingleNode("Configuration"), restoredObjects);
+      buffer = node.SelectSingleNode("Buffer").InnerText;
+      if (tcpListener == null) StartListening();
+    }
+    #endregion
+
+    private void StartListening() {
+      tcpListener = new TcpListener(IPAddress.Any, config.SourcePort.Data);
+      tcpListener.Start();
+    }
+
+    public void Initialize(IDriverConfiguration configuration) {
+      Configuration = configuration;
+      StartListening();
+    }
+
+    public bool Connect() {
+      if (!Alive(tcpIn)) {
+        if (tcpListener.Pending())
+          tcpIn = tcpListener.AcceptTcpClient();
+      }
+      if (!Alive(tcpOut)) {
+        tcpOut = new TcpClient();
+        try {
+          tcpOut.Connect(new IPEndPoint(IPAddress.Parse(config.TargetIPAddress.Data), config.TargetPort.Data));
+        } catch (SocketException) {
+          tcpOut.Close();
+          tcpOut = null;
+        }
+      }
+      return (tcpIn != null && tcpIn.Connected) && (tcpOut != null && tcpOut.Connected);
+    }
+
+    public void Close() {
+      if (tcpOut != null && tcpOut.Connected) {
+        tcpOut.Client.Close();
+        tcpOut.Close();
+      }
+      tcpOut = null;
+      if (tcpIn != null && tcpIn.Connected) {
+        tcpIn.Client.Close();
+        tcpIn.Close();
+      }
+      tcpIn = null;
+      tcpListener.Stop();
+      buffer = "";
+    }
+
+    public void Write(string s) {
+      //if (tcpOut == null || !tcpOut.Connected) Connect();
+      NetworkStream outStream = tcpOut.GetStream();
+
+      byte[] sendBytes = Encoding.ASCII.GetBytes(s + "\n.\n");
+      outStream.Write(sendBytes, 0, sendBytes.Length);
+      outStream.Flush();
+      return;
+    }
+
+    public string Read() {
+      //if (tcpIn == null || !tcpIn.Connected) Connect();
+      NetworkStream inStream = tcpIn.GetStream();
+      byte[] receivedBytes;
+      int count = 0;
+      int messageEnd = -1;
+      int bufferCount = 0;
+      if (buffer.Length > 0) {
+        byte[] bufferBytes = Encoding.ASCII.GetBytes(buffer);
+        receivedBytes = new byte[1000 + bufferBytes.Length];
+        Array.Copy(bufferBytes, receivedBytes, bufferBytes.Length);
+        messageEnd = TerminationCheck(receivedBytes, 0, bufferBytes.Length);
+        count = bufferBytes.Length;
+        bufferCount = count;
+        buffer = "";
+      } else
+        receivedBytes = new byte[1000];
+
+      if (messageEnd < 0) {
+        byte[] tmp = new byte[1000];
+        bool done;
+        do {
+          int recvd = inStream.Read(tmp, 0, 1000);
+          if (recvd == 0) break;
+          count += recvd;
+          if (count > receivedBytes.Length) {
+            byte[] h = receivedBytes;
+            receivedBytes = new byte[2 * h.Length];
+            Array.Copy(h, receivedBytes, count - recvd);
+          }
+          Array.Copy(tmp, 0, receivedBytes, count - recvd, recvd);
+          if (count < 3) done = false;
+          else done = (receivedBytes[count - 1] == 10 && receivedBytes[count - 2] == 46 && receivedBytes[count - 3] == 10); // \n.\n
+        } while (!done);
+        messageEnd = TerminationCheck(receivedBytes, bufferCount, count - bufferCount);
+      }
+      if (messageEnd < 0) throw new InvalidOperationException("ERROR: message was not received");
+      if (messageEnd < count - 3)
+        buffer = Encoding.ASCII.GetString(receivedBytes, messageEnd + 3, count - messageEnd - 3);
+      return Encoding.ASCII.GetString(receivedBytes, 0, messageEnd);
+    }
+
+    private int TerminationCheck(byte[] buffer, int start, int length) {
+      for (int i = start ; i < start + length - 2 ; i++) {
+        if (buffer[i] == 10 && buffer[i + 1] == 46 && buffer[i + 2] == 10) return i;
+      }
+      return -1;
+    }
+
+    private bool Alive(TcpClient c) {
+      if (c == null || !c.Connected) return false; // not connected if null or the property says so
+      try {
+        c.Client.Send(new byte[1], 0, 0); // if c != null && c.Connected make a zero byte send to check if still alive
+      } catch (SocketException e) {
+        return e.NativeErrorCode.Equals(10035); // 10035 == WSAEWOULDBLOCK, if true then connected, otherwise not connected
+      } catch (Exception) { // false regarding any other exception
+        return false;
+      }
+      return c.Connected; // return the property
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransition.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransition.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransition.cs	(revision 1270)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators.Programmable;
+
+namespace HeuristicLab.Communication.Data {
+  public class StateTransition : ItemBase {
+    private ProtocolState sourceState;
+    public ProtocolState SourceState {
+      get { return sourceState; }
+      set {
+        sourceState = value;
+        OnChanged();
+      }
+    }
+    private ProtocolState targetState;
+    public ProtocolState TargetState {
+      get { return targetState; }
+      set {
+        targetState = value;
+        OnChanged();
+      }
+    }
+    private ProgrammableOperator transitionCondition;
+    public ProgrammableOperator TransitionCondition {
+      get { return transitionCondition; }
+      set {
+        transitionCondition = value;
+        OnChanged();
+      }
+    }
+
+    public StateTransition()
+      : base() {
+      sourceState = null;
+      targetState = null;
+      transitionCondition = new ProgrammableOperator();
+    }
+
+    public override IView CreateView() {
+      return new StateTransitionView(this);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      StateTransition clone = new StateTransition();
+      clonedObjects.Add(Guid, clone);
+      clone.sourceState = SourceState;
+      clone.targetState = TargetState;
+      clone.TransitionCondition = (ProgrammableOperator)Auxiliary.Clone(TransitionCondition, clonedObjects);
+      return clone;
+    }
+
+    #region persistence
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode sourceStateNode = PersistenceManager.Persist("SourceState", SourceState, document, persistedObjects);
+      node.AppendChild(sourceStateNode);
+      XmlNode targetStateNode = PersistenceManager.Persist("TargetState", TargetState, document, persistedObjects);
+      node.AppendChild(targetStateNode);
+      XmlNode transitionConditionNode = PersistenceManager.Persist("TransitionCondition", TransitionCondition, document, persistedObjects);
+      node.AppendChild(transitionConditionNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      sourceState = (ProtocolState)PersistenceManager.Restore(node.SelectSingleNode("SourceState"), restoredObjects);
+      targetState = (ProtocolState)PersistenceManager.Restore(node.SelectSingleNode("TargetState"), restoredObjects);
+      transitionCondition = (ProgrammableOperator)PersistenceManager.Restore(node.SelectSingleNode("TransitionCondition"), restoredObjects);
+    }
+    #endregion persistence
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.Designer.cs	(revision 1270)
@@ -0,0 +1,142 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Data {
+  partial class StateTransitionView {
+    /// <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.targetStateLabel = new System.Windows.Forms.Label();
+      this.transitionFunctionLabel = new System.Windows.Forms.Label();
+      this.variablesListBox = new System.Windows.Forms.ListBox();
+      this.variablesLabel = new System.Windows.Forms.Label();
+      this.targetStateComboBox = new System.Windows.Forms.ComboBox();
+      this.transitionFunctionProgrammableOperatorView = new HeuristicLab.Operators.Programmable.ProgrammableOperatorView();
+      this.SuspendLayout();
+      // 
+      // targetStateLabel
+      // 
+      this.targetStateLabel.AutoSize = true;
+      this.targetStateLabel.Location = new System.Drawing.Point(3, 6);
+      this.targetStateLabel.Name = "targetStateLabel";
+      this.targetStateLabel.Size = new System.Drawing.Size(69, 13);
+      this.targetStateLabel.TabIndex = 4;
+      this.targetStateLabel.Text = "Target State:";
+      // 
+      // transitionFunctionLabel
+      // 
+      this.transitionFunctionLabel.AutoSize = true;
+      this.transitionFunctionLabel.Location = new System.Drawing.Point(3, 131);
+      this.transitionFunctionLabel.Name = "transitionFunctionLabel";
+      this.transitionFunctionLabel.Size = new System.Drawing.Size(100, 13);
+      this.transitionFunctionLabel.TabIndex = 9;
+      this.transitionFunctionLabel.Text = "Transition Function:";
+      // 
+      // variablesListBox
+      // 
+      this.variablesListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.variablesListBox.FormattingEnabled = true;
+      this.variablesListBox.Location = new System.Drawing.Point(6, 46);
+      this.variablesListBox.Name = "variablesListBox";
+      this.variablesListBox.ScrollAlwaysVisible = true;
+      this.variablesListBox.Size = new System.Drawing.Size(335, 82);
+      this.variablesListBox.TabIndex = 18;
+      // 
+      // variablesLabel
+      // 
+      this.variablesLabel.AutoSize = true;
+      this.variablesLabel.Location = new System.Drawing.Point(3, 28);
+      this.variablesLabel.Name = "variablesLabel";
+      this.variablesLabel.Size = new System.Drawing.Size(53, 13);
+      this.variablesLabel.TabIndex = 19;
+      this.variablesLabel.Text = "Variables:";
+      // 
+      // targetStateComboBox
+      // 
+      this.targetStateComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.targetStateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.targetStateComboBox.FormattingEnabled = true;
+      this.targetStateComboBox.Location = new System.Drawing.Point(78, 3);
+      this.targetStateComboBox.Name = "targetStateComboBox";
+      this.targetStateComboBox.Size = new System.Drawing.Size(263, 21);
+      this.targetStateComboBox.TabIndex = 20;
+      // 
+      // transitionFunctionProgrammableOperatorView
+      // 
+      this.transitionFunctionProgrammableOperatorView.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.transitionFunctionProgrammableOperatorView.Caption = "View";
+      this.transitionFunctionProgrammableOperatorView.Location = new System.Drawing.Point(6, 147);
+      this.transitionFunctionProgrammableOperatorView.Name = "transitionFunctionProgrammableOperatorView";
+      this.transitionFunctionProgrammableOperatorView.ProgrammableOperator = null;
+      this.transitionFunctionProgrammableOperatorView.Size = new System.Drawing.Size(338, 241);
+      this.transitionFunctionProgrammableOperatorView.TabIndex = 21;
+      // 
+      // StateTransitionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.transitionFunctionProgrammableOperatorView);
+      this.Controls.Add(this.targetStateComboBox);
+      this.Controls.Add(this.variablesLabel);
+      this.Controls.Add(this.variablesListBox);
+      this.Controls.Add(this.transitionFunctionLabel);
+      this.Controls.Add(this.targetStateLabel);
+      this.Name = "StateTransitionView";
+      this.Size = new System.Drawing.Size(345, 388);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label targetStateLabel;
+    private System.Windows.Forms.Label transitionFunctionLabel;
+    private System.Windows.Forms.ListBox variablesListBox;
+    private System.Windows.Forms.Label variablesLabel;
+    private System.Windows.Forms.ComboBox targetStateComboBox;
+    private HeuristicLab.Operators.Programmable.ProgrammableOperatorView transitionFunctionProgrammableOperatorView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.cs	(revision 1270)
@@ -0,0 +1,146 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class StateTransitionView : ViewBase {
+
+    public StateTransition StateTransition {
+      get { return (StateTransition)Item; }
+      set { base.Item = value; }
+    }
+
+    public StateTransitionView() {
+      InitializeComponent();
+    }
+
+    public StateTransitionView(StateTransition stateTransition)
+      : this() {
+      StateTransition = stateTransition;
+    }
+
+    protected override void RemoveItemEvents() {
+      StateTransition.Changed -= new EventHandler(StateTransition_Changed);
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      StateTransition.Changed += new EventHandler(StateTransition_Changed);
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (StateTransition == null) {
+        transitionFunctionProgrammableOperatorView.Enabled = false;
+        targetStateComboBox.Enabled = false;
+        targetStateComboBox.DataSource = null;
+        targetStateComboBox.Items.Clear();
+      } else {
+        targetStateComboBox.Enabled = true;
+        transitionFunctionProgrammableOperatorView.ProgrammableOperator = StateTransition.TransitionCondition;
+        transitionFunctionProgrammableOperatorView.Enabled = true;
+        BuildTargetStateComboBox();
+        BuildVariablesListBox();
+      }
+    }
+
+    void StateTransition_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    void VariablesList_Changed(object sender, EventArgs e) {
+      BuildVariablesListBox();
+    }
+
+    #region Events to synchronize changes in request/response variables to state transition
+    void Parameter_Changed(object sender, EventArgs e) {
+      BuildVariablesListBox();
+    }
+    void Parameter_Added(object sender, ItemIndexEventArgs e) {
+      ((IItem)e.Item).Changed += new EventHandler(Parameter_Changed);
+    }
+    void Parameter_Removed(object sender, ItemIndexEventArgs e) {
+      ((IItem)e.Item).Changed -= new EventHandler(Parameter_Changed);
+    }
+    #endregion
+
+    private void BuildTargetStateComboBox() {
+      ComboBox comboBox = targetStateComboBox;
+      ItemList<ProtocolState> states = null;
+      /*if (StateTransition.SourceState == null || StateTransition.SourceState.Protocol == null)
+        states = null;
+      else
+        states = StateTransition.SourceState.Protocol.States;*/
+      ProtocolState selected = StateTransition.TargetState;
+      ProtocolState forbidden = StateTransition.SourceState;
+
+      if (states != null && states.Count > 0) {
+        IList<ProtocolState> sourceList = new List<ProtocolState>(states.Count);
+        int selectedIndex = -1, counter = -1;
+        for (int i = 0 ; i < states.Count ; i++) {
+          if (forbidden == null || !states[i].Guid.Equals(forbidden.Guid)) {
+            sourceList.Add((ProtocolState)states[i]);
+            counter++;
+          }
+          if (selected != null && states[i].Guid.Equals(selected.Guid))
+            selectedIndex = counter;
+        }
+        comboBox.SelectedIndexChanged -= new EventHandler(targetStateComboBox_SelectedIndexChanged);
+        BindingList<ProtocolState> bl = new BindingList<ProtocolState>(sourceList);
+        comboBox.DataSource = bl;
+        comboBox.DisplayMember = "Name";
+        comboBox.ValueMember = "Guid";
+        comboBox.SelectedIndex = selectedIndex;
+        comboBox.SelectedIndexChanged += new EventHandler(targetStateComboBox_SelectedIndexChanged);
+      }
+    }
+
+    private void BuildVariablesListBox() {
+      ListBox variables = variablesListBox;
+      /*ConstrainedItemList request = StateTransition.SourceState.SendingData;
+      ConstrainedItemList response = StateTransition.SourceState.ReceivingData;*/
+      variables.Items.Clear();
+      variables.Items.Add("==Sending==");
+      /*for (int i = 0 ; i < request.Count ; i++) {
+        variables.Items.Add(request[i]);
+      }*/
+      variables.Items.Add("==Receiving==");
+      /*for (int i = 0 ; i < response.Count ; i++) {
+        variables.Items.Add(response[i]);
+      }*/
+    }
+
+    private void targetStateComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (targetStateComboBox.SelectedIndex >= 0) {
+        StateTransition.TargetState = (ProtocolState)targetStateComboBox.SelectedItem;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/StateTransitionView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfiguration.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfiguration.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfiguration.cs	(revision 1270)
@@ -0,0 +1,98 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.Net.Sockets;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public class TcpNetworkDriverConfiguration : ItemBase, IDriverConfiguration {
+    private StringData targetIPAddress;
+    public StringData TargetIPAddress {
+      get { return targetIPAddress; }
+      set {
+        targetIPAddress = value;
+        OnChanged();
+      }
+    }
+
+    private IntData targetPort;
+    public IntData TargetPort {
+      get { return targetPort; }
+      set {
+        targetPort = value;
+        OnChanged();
+      }
+    }
+
+    private IntData sourcePort;
+    public IntData SourcePort {
+      get { return sourcePort; }
+      set {
+        sourcePort = value;
+        OnChanged();
+      }
+    }
+
+    public TcpNetworkDriverConfiguration() {
+      targetIPAddress = new StringData("127.0.0.1");
+      targetPort = new IntData(2552);
+      sourcePort = new IntData(5225);
+    }
+
+    public override IView CreateView() {
+      return new TcpNetworkDriverConfigurationView(this);
+    }
+
+    #region persistence & clone
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode ipNode = PersistenceManager.Persist("TargetIP", TargetIPAddress, document, persistedObjects);
+      node.AppendChild(ipNode);
+      XmlNode tportNode = PersistenceManager.Persist("TargetPort", TargetPort, document, persistedObjects);
+      node.AppendChild(tportNode);
+      XmlNode sportNode = PersistenceManager.Persist("SourcePort", SourcePort, document, persistedObjects);
+      node.AppendChild(sportNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      targetIPAddress = (StringData)PersistenceManager.Restore(node.SelectSingleNode("TargetIP"), restoredObjects);
+      targetPort = (IntData)PersistenceManager.Restore(node.SelectSingleNode("TargetPort"), restoredObjects);
+      sourcePort = (IntData)PersistenceManager.Restore(node.SelectSingleNode("SourcePort"), restoredObjects);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      TcpNetworkDriverConfiguration clone = new TcpNetworkDriverConfiguration();
+      clonedObjects.Add(Guid, clone);
+      clone.targetIPAddress = (StringData)Auxiliary.Clone(TargetIPAddress, clonedObjects);
+      clone.targetPort = (IntData)Auxiliary.Clone(TargetPort, clonedObjects);
+      clone.sourcePort = (IntData)Auxiliary.Clone(SourcePort, clonedObjects);
+      return clone;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.Designer.cs	(revision 1270)
@@ -0,0 +1,135 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Data {
+  partial class TcpNetworkDriverConfigurationView {
+    /// <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.ipAddressStringDataView = new HeuristicLab.Data.StringDataView();
+      this.ipAddressLabel = new System.Windows.Forms.Label();
+      this.targetPortLabel = new System.Windows.Forms.Label();
+      this.targetPortIntDataView = new HeuristicLab.Data.IntDataView();
+      this.sourcePortIntDataView = new HeuristicLab.Data.IntDataView();
+      this.sourcePortLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // ipAddressStringDataView
+      // 
+      this.ipAddressStringDataView.Caption = "View";
+      this.ipAddressStringDataView.Location = new System.Drawing.Point(74, 3);
+      this.ipAddressStringDataView.Name = "ipAddressStringDataView";
+      this.ipAddressStringDataView.Size = new System.Drawing.Size(200, 25);
+      this.ipAddressStringDataView.StringData = null;
+      this.ipAddressStringDataView.TabIndex = 0;
+      // 
+      // ipAddressLabel
+      // 
+      this.ipAddressLabel.AutoSize = true;
+      this.ipAddressLabel.Location = new System.Drawing.Point(7, 7);
+      this.ipAddressLabel.Name = "ipAddressLabel";
+      this.ipAddressLabel.Size = new System.Drawing.Size(61, 13);
+      this.ipAddressLabel.TabIndex = 3;
+      this.ipAddressLabel.Text = "IP Address:";
+      // 
+      // targetPortLabel
+      // 
+      this.targetPortLabel.AutoSize = true;
+      this.targetPortLabel.Location = new System.Drawing.Point(8, 33);
+      this.targetPortLabel.Name = "targetPortLabel";
+      this.targetPortLabel.Size = new System.Drawing.Size(60, 13);
+      this.targetPortLabel.TabIndex = 4;
+      this.targetPortLabel.Text = "TargetPort:";
+      // 
+      // targetPortIntDataView
+      // 
+      this.targetPortIntDataView.Caption = "View";
+      this.targetPortIntDataView.IntData = null;
+      this.targetPortIntDataView.Location = new System.Drawing.Point(74, 30);
+      this.targetPortIntDataView.Name = "targetPortIntDataView";
+      this.targetPortIntDataView.Size = new System.Drawing.Size(96, 26);
+      this.targetPortIntDataView.TabIndex = 1;
+      // 
+      // sourcePortIntDataView
+      // 
+      this.sourcePortIntDataView.Caption = "View";
+      this.sourcePortIntDataView.IntData = null;
+      this.sourcePortIntDataView.Location = new System.Drawing.Point(74, 57);
+      this.sourcePortIntDataView.Name = "sourcePortIntDataView";
+      this.sourcePortIntDataView.Size = new System.Drawing.Size(96, 26);
+      this.sourcePortIntDataView.TabIndex = 5;
+      // 
+      // sourcePortLabel
+      // 
+      this.sourcePortLabel.AutoSize = true;
+      this.sourcePortLabel.Location = new System.Drawing.Point(2, 60);
+      this.sourcePortLabel.Name = "sourcePortLabel";
+      this.sourcePortLabel.Size = new System.Drawing.Size(66, 13);
+      this.sourcePortLabel.TabIndex = 6;
+      this.sourcePortLabel.Text = "Source Port:";
+      // 
+      // TcpNetworkDriverConfigurationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.sourcePortLabel);
+      this.Controls.Add(this.sourcePortIntDataView);
+      this.Controls.Add(this.targetPortIntDataView);
+      this.Controls.Add(this.targetPortLabel);
+      this.Controls.Add(this.ipAddressLabel);
+      this.Controls.Add(this.ipAddressStringDataView);
+      this.Name = "TcpNetworkDriverConfigurationView";
+      this.Size = new System.Drawing.Size(278, 81);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.StringDataView ipAddressStringDataView;
+    private System.Windows.Forms.Label ipAddressLabel;
+    private System.Windows.Forms.Label targetPortLabel;
+    private HeuristicLab.Data.IntDataView targetPortIntDataView;
+    private HeuristicLab.Data.IntDataView sourcePortIntDataView;
+    private System.Windows.Forms.Label sourcePortLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.cs	(revision 1270)
@@ -0,0 +1,68 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using System.Net.Sockets;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class TcpNetworkDriverConfigurationView : ViewBase {
+    private TcpNetworkDriverConfiguration TcpNetworkDriverConfiguration {
+      get { return (TcpNetworkDriverConfiguration)base.Item; }
+      set { base.Item = value; }
+    }
+
+    public TcpNetworkDriverConfigurationView() {
+      InitializeComponent();
+    }
+
+    public TcpNetworkDriverConfigurationView(TcpNetworkDriverConfiguration tcpNetworkDriverConfiguration)
+      : this() {
+      TcpNetworkDriverConfiguration = tcpNetworkDriverConfiguration;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (TcpNetworkDriverConfiguration == null) {
+        ipAddressStringDataView.Enabled = false;
+        ipAddressStringDataView.StringData = null;
+        targetPortIntDataView.Enabled = false;
+        targetPortIntDataView.IntData = null;
+        sourcePortIntDataView.Enabled = false;
+        sourcePortIntDataView.IntData = null;
+      } else {
+        ipAddressStringDataView.StringData = TcpNetworkDriverConfiguration.TargetIPAddress;
+        ipAddressStringDataView.Enabled = true;
+        targetPortIntDataView.IntData = TcpNetworkDriverConfiguration.TargetPort;
+        targetPortIntDataView.Enabled = true;
+        sourcePortIntDataView.IntData = TcpNetworkDriverConfiguration.SourcePort;
+        sourcePortIntDataView.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/TcpNetworkDriverConfigurationView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.Designer.cs	(revision 1270)
@@ -0,0 +1,84 @@
+﻿namespace HeuristicLab.Communication.Data {
+  partial class WindowedView {
+    /// <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.saveButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // saveButton
+      // 
+      this.saveButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
+      this.saveButton.Location = new System.Drawing.Point(70, 238);
+      this.saveButton.Name = "saveButton";
+      this.saveButton.Size = new System.Drawing.Size(75, 23);
+      this.saveButton.TabIndex = 0;
+      this.saveButton.Text = "Save";
+      this.saveButton.UseVisualStyleBackColor = true;
+      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
+      this.cancelButton.Location = new System.Drawing.Point(150, 238);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 1;
+      this.cancelButton.Text = "Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.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.viewPanel.Location = new System.Drawing.Point(0, 0);
+      this.viewPanel.Margin = new System.Windows.Forms.Padding(0);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(292, 230);
+      this.viewPanel.TabIndex = 2;
+      // 
+      // WindowedView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(292, 273);
+      this.Controls.Add(this.viewPanel);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.saveButton);
+      this.Name = "WindowedView";
+      this.Text = "View";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button saveButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Panel viewPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Communication.Data {
+  public partial class WindowedView : Form {
+    public WindowedView() {
+      InitializeComponent();
+    }
+
+    public WindowedView(UserControl control)
+      : this() {
+      this.SuspendLayout();
+      this.Size = new Size(control.Width + 8, control.Height + 70);
+      control.Dock = DockStyle.Fill;
+      viewPanel.Controls.Add(control);
+      this.ResumeLayout();
+    }
+
+    private void saveButton_Click(object sender, EventArgs e) {
+      this.DialogResult = DialogResult.OK;
+      this.Close();
+    }
+
+    private void cancelButton_Click(object sender, EventArgs e) {
+      this.DialogResult = DialogResult.Cancel;
+      this.Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Data/WindowedView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/CommunicatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/CommunicatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/CommunicatorBase.cs	(revision 1270)
@@ -0,0 +1,51 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public abstract class CommunicatorBase : OperatorBase {
+    public CommunicatorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("PeerName", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Protocol", "", typeof(Protocol), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CurrentState", "", typeof(ProtocolState), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Message", "The message to be sent and/or received. If it is not present the operator will listen for incomming messages.", typeof(Message), VariableKind.New | VariableKind.In | VariableKind.Out | VariableKind.Deleted));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Protocol protocol = GetVariableValue<Protocol>("Protocol", scope, true);
+      ProtocolState currentState = GetVariableValue<ProtocolState>("CurrentState", scope, true);
+      
+      IVariableInfo info = GetVariableInfo("Message");
+      string actualName = info.ActualName;
+      if (!info.Local)
+        actualName = scope.TranslateName(info.FormalName);
+
+      string peerName = GetVariableValue<StringData>("PeerName", scope, true).Data;
+      Message message = GetVariableValue<Message>("Message", scope, false, false);
+
+      if (message == null) { // RECEIVE MODE (no message present)
+        message = Receive(scope, protocol, currentState);
+        if (message == null) throw new InvalidOperationException("ERROR in Communicator: Message could not be received");
+        if (!info.Local) scope.AddVariable(new Variable(actualName, message));
+        else AddVariable(new Variable(actualName, message));
+      } else { // SEND MODE (message present)
+        if (message.Source.Equals(peerName)) {
+          // originating here, send it
+          Send(scope, protocol, currentState, message);
+          if (!info.Local) scope.RemoveVariable(actualName);
+          else RemoveVariable(actualName);
+          // after sending the message if there is something to be received, apply this operator again
+          if (currentState.Expect.Count > 0) return new AtomicOperation(this, scope);
+        } else throw new ArgumentException("ERROR in Communicator: Message to be sent does not originate from this peer");
+      }
+      return null;
+    }
+
+    protected abstract void Send(IScope scope, Protocol protocol, ProtocolState currentState, Message message);
+    protected abstract Message Receive(IScope scope, Protocol protocol, ProtocolState currentState);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/CurrentStateInitializer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/CurrentStateInitializer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/CurrentStateInitializer.cs	(revision 1270)
@@ -0,0 +1,67 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class CurrentStateInitializer : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public CurrentStateInitializer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Protocol", "", typeof(Protocol), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CurrentState", "", typeof(ProtocolState), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Protocol p = GetVariableValue<Protocol>("Protocol", scope, true);
+      ProtocolState currentState = GetVariableValue<ProtocolState>("CurrentState", scope, true, false);
+      IVariableInfo info = GetVariableInfo("CurrentState");
+      string actualName = "";
+      if (!info.Local)
+        actualName = scope.TranslateName(info.FormalName);
+      if (currentState == null) {
+        currentState = p.InitialState;
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, currentState));
+        else
+          scope.AddVariable(new Variable(actualName, currentState));
+      } else {
+        currentState = p.InitialState;
+        if (info.Local) {
+          if (GetVariable(info.ActualName) == null) AddVariable(new Variable(info.ActualName, currentState));
+          else GetVariable(info.ActualName).Value = currentState;
+        } else {
+          if (scope.GetVariable(actualName) == null) scope.AddVariable(new Variable(actualName, currentState));
+          else scope.GetVariable(actualName).Value = currentState;
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/DataStreamCommunicator.cs	(revision 1270)
@@ -0,0 +1,100 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class DataStreamCommunicator : CommunicatorBase {
+    public override string Description {
+      get {
+        return @"Sends a message if present and otherwise listens for incoming messages";
+      }
+    }
+
+    public DataStreamCommunicator() {
+      AddVariableInfo(new VariableInfo("DataStream", "", typeof(IDataStream), VariableKind.In));
+    }
+
+    private string Encode(Message message) {
+      XmlDocument document = new XmlDocument();
+      return message.GetXmlNode("Message", document, new Dictionary<Guid, IStorable>()).OuterXml;
+    }
+
+    private Message Decode(string m) {
+      XmlDocument document = new XmlDocument();
+      document.LoadXml(m);
+      Message message = new Message();
+      message.Populate(document.SelectSingleNode("Message"), new Dictionary<Guid, IStorable>());
+      return message;
+    }
+
+    protected override void Send(IScope scope, Protocol protocol, ProtocolState currentState, Message message) {
+      IDataStream connection = scope.GetVariableValue<IDataStream>("DataStream", true);
+      connection.Write("PROTOCOL_ID " + protocol.Name);
+      string s = connection.Read();
+      if (s.Trim().Equals("ACK")) {
+        connection.Write("STATE_ID " + currentState.Name);
+        s = connection.Read();
+        if (s.Trim().Equals("ACK")) {
+          connection.Write(Encode(message));
+        } else throw new InvalidOperationException("Received unexpected response [2]: " + s);
+      } else throw new InvalidOperationException("Received unexpected response [1]: " + s);
+    }
+
+    protected override Message Receive(IScope scope, Protocol protocol, ProtocolState currentState) {
+      IDataStream connection = scope.GetVariableValue<IDataStream>("DataStream", true);
+      Message message = new Message();
+      string rcvd = connection.Read();
+      if (rcvd.StartsWith("PROTOCOL_ID ")) {
+        if (rcvd.Substring(12).Trim().Equals(protocol.Name)) {
+          connection.Write("ACK");
+          rcvd = connection.Read();
+          if (rcvd.StartsWith("STATE_ID ")) {
+            if (rcvd.Substring(9).Trim().Equals(currentState.Name)) {
+              connection.Write("ACK");
+              message = Decode(connection.Read());
+              return message;
+            } else {
+              connection.Write("SYNCERROR STATE_ID");
+              return null;
+            }
+          } else {
+            connection.Write("ERROR");
+            return null;
+          }
+        } else {
+          connection.Write("SYNCERROR PROTOCOL_ID");
+          return null;
+        }
+      } else {
+        connection.Write("ERROR");
+        return null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/DataStreamFinisher.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/DataStreamFinisher.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/DataStreamFinisher.cs	(revision 1270)
@@ -0,0 +1,61 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class DataStreamFinisher : OperatorBase {
+    public override string Description {
+      get {
+        return @"TODO";
+      }
+    }
+
+    public DataStreamFinisher() {
+      AddVariableInfo(new VariableInfo("DataStream", "", typeof(IDataStream), VariableKind.Deleted));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IDataStream datastream = GetVariableValue<IDataStream>("DataStream", scope, true);
+
+      datastream.Write("REQUEST_CLOSE");
+      string response = datastream.Read();
+      if (!response.Equals("REQUEST_CLOSE")) throw new InvalidOperationException("ERROR in DataStreamFinisher: Closing connection was denied");
+      datastream.Write("ACK");
+      response = datastream.Read();
+      if (!response.Equals("ACK")) throw new InvalidOperationException("ERROR in DataStreamFinisher: Closing connection was denied");
+      datastream.Close();
+
+      IVariableInfo info = GetVariableInfo("DataStream");
+      if (info.Local)
+        RemoveVariable(info.ActualName);
+      else
+        scope.RemoveVariable(scope.TranslateName(info.FormalName));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/HeuristicLab.Communication.Operators.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/HeuristicLab.Communication.Operators.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/HeuristicLab.Communication.Operators.csproj	(revision 1270)
@@ -0,0 +1,145 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Communication.Operators</RootNamespace>
+    <AssemblyName>HeuristicLab.Communication.Operators-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <ItemGroup>
+    <Compile Include="CommunicatorBase.cs" />
+    <Compile Include="CurrentStateInitializer.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="DataStreamCommunicator.cs" />
+    <Compile Include="DataStreamFinisher.cs" />
+    <Compile Include="HeuristicLabCommunicationOperatorsPlugin.cs" />
+    <Compile Include="LocalProcessInitiator.cs" />
+    <Compile Include="MessageInjector.cs" />
+    <Compile Include="MessageProcessor.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ProtocolInjector.cs" />
+    <Compile Include="ProtocolInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProtocolInjectorView.designer.cs">
+      <DependentUpon>ProtocolInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="StateTransistor.cs" />
+    <Compile Include="SubScopeMessageComposer.cs" />
+    <Compile Include="SubScopeMessageDecomposer.cs" />
+    <Compile Include="TcpNetworkInitiator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.XML" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ProtocolInjectorView.resx">
+      <DependentUpon>ProtocolInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Communication.Data\HeuristicLab.Communication.Data.csproj">
+      <Project>{14E1C3E3-2496-436A-AE00-09F7B81DB15B}</Project>
+      <Name>HeuristicLab.Communication.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators.Programmable\HeuristicLab.Operators.Programmable.csproj">
+      <Project>{E3CCBFC6-900C-41B6-AFB8-6646DB097435}</Project>
+      <Name>HeuristicLab.Operators.Programmable</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/HeuristicLabCommunicationOperatorsPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/HeuristicLabCommunicationOperatorsPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/HeuristicLabCommunicationOperatorsPlugin.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Communication.Operators {
+  [ClassInfo(Name = "HeuristicLab.Communication.Operators-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Communication.Operators-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators.Programmable-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Communication.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  public class HeuristicLabCommunicationOperatorsPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/LocalProcessInitiator.cs	(revision 1270)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class LocalProcessInitiator : OperatorBase {
+
+    public override string Description {
+      get { return @"This operator will initialize and start a process with the specified configuration."; }
+    }
+    public LocalProcessInitiator() {
+      AddVariableInfo(new VariableInfo("DriverConfiguration", "", typeof(LocalProcessDriverConfiguration), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Process", "", typeof(ProcessData), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      LocalProcessDriverConfiguration config = GetVariableValue<LocalProcessDriverConfiguration>("DriverConfiguration", scope, true);
+      ProcessData proc = new ProcessData();
+      proc.Initialize(config);
+      proc.Connect();
+
+      IVariableInfo info = GetVariableInfo("Process");
+      if (info.Local)
+        AddVariable(new Variable(info.ActualName, proc));
+      else
+        scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), proc));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/MessageInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/MessageInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/MessageInjector.cs	(revision 1270)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class MessageInjector : OperatorBase {
+    public override string Description {
+      get {
+        return @"Creates a message template for a communicator to send.";
+      }
+    }
+
+    public MessageInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("Protocol", "", typeof(Protocol), VariableKind.In));
+      AddVariableInfo(new VariableInfo("PeerName", "", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CurrentState", "The current state which to create a message", typeof(ProtocolState), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Message", "The message to inject", typeof(Message), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Protocol protocol = GetVariableValue<Protocol>("Protocol", scope, true);
+      ProtocolState currentState = GetVariableValue<ProtocolState>("CurrentState", scope, true);
+      string iPeer = GetVariableValue<StringData>("PeerName", scope, true).Data;
+      Message message = new Message();
+      message.Protocol = protocol.Name;
+      message.Source = iPeer;
+      message.Destination = "";
+      for (int i = 0; i < currentState.Give.Count; i++)
+        message.Give.Add((IVariable)currentState.Give[i].Clone());
+      for (int i = 0; i < currentState.Expect.Count; i++)
+        message.Expect.Add((IVariable)currentState.Expect[i].Clone());
+
+      scope.AddVariable(new Variable(scope.TranslateName("Message"),message));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/MessageProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/MessageProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/MessageProcessor.cs	(revision 1270)
@@ -0,0 +1,77 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class MessageProcessor : OperatorBase {
+    public override string Description {
+      get {
+        return @"If no ""Message"" is present it will call its first suboperator (communicator) to receive a ""Message"".
+If a locally created ""Message"" is present it will call its first suboperator (communicator) to send it and if a response is expected call itself again to check for it.
+If a received ""Message"" is present it will output it as ""Received"" and create a response ""Message"" if necessary.";
+      }
+    }
+
+    public MessageProcessor()
+      : base() {
+      AddVariableInfo(new VariableInfo("Protocol", "The protocol that is used", typeof(Protocol), VariableKind.In));
+      AddVariableInfo(new VariableInfo("PeerName", "The name of this peer", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Message", "The message that is to be processed", typeof(Message), VariableKind.New | VariableKind.Out | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("Received", "A message that has been received is saved for further processing", typeof(Message), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Message message = GetVariableValue<Message>("Message", scope, false, false);
+      if (message == null) { // Case 1: No message present -> call first SubOperator to create one (listen for one)
+        if (SubOperators.Count > 0) {
+          CompositeOperation co = new CompositeOperation();
+          co.AddOperation(new AtomicOperation(SubOperators[0], scope));
+          co.AddOperation(new AtomicOperation(this, scope));
+          return co;
+        } else throw new InvalidOperationException("ERROR in MessageProcessor: No message present and no suboperator defined which could listen and create one");
+      } else {
+        Protocol protocol = GetVariableValue<Protocol>("Protocol", scope, true);
+        if (message.Protocol.Equals(protocol.Name)) {
+          string peerName = GetVariableValue<StringData>("PeerName", scope, true).Data;
+          if (message.Source.Equals(peerName)) { // Case 2: A locally created message is present
+            if (message.Expect.Count > 0) { // Subcase 2.1: Expects response, so send it and call self afterwards to retrieve the response
+              CompositeOperation co = new CompositeOperation();
+              co.AddOperation(new AtomicOperation(SubOperators[0], scope));
+              co.AddOperation(new AtomicOperation(this, scope));
+              return co;
+            } else { // Subcase 2.2: No response expected, just send it
+              return new AtomicOperation(SubOperators[0], scope);
+            }
+          } else { // Case 3: A remotely created message received -> save message, and if necessary create response message
+            if (message.Give.Count > 0) { // if data has been added for this
+              IVariableInfo receivedInfo = GetVariableInfo("Received");
+              if (receivedInfo.Local) {
+                AddVariable(new Variable(receivedInfo.ActualName, (IItem)message.Clone()));
+              } else {
+                scope.AddVariable(new Variable(scope.TranslateName(receivedInfo.FormalName), (IItem)message.Clone()));
+              }
+            }
+            if (message.Expect.Count > 0) { // if data has been requested, create a response
+              message.Give = message.Expect;
+              message.Expect = new List<IVariable>();
+              message.Destination = message.Source;
+              message.Source = peerName;
+              message.Timestamp = DateTime.Now;
+            } else { // otherwise delete the message
+              IVariableInfo messageInfo = GetVariableInfo("Message");
+              if (messageInfo.Local) {
+                RemoveVariable(messageInfo.ActualName);
+              } else {
+                scope.RemoveVariable(scope.TranslateName(messageInfo.ActualName));
+              }
+            }
+          }
+        } else throw new InvalidOperationException("ERROR in MessageProcessor: Remote peer is using different protocol");
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,33 @@
+﻿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.Communication.Operators")]
+[assembly: AssemblyDescription("This assembly contains operators to be used for communicating")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("62a462a9-4ceb-4174-a055-91a1be696da1")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjector.cs	(revision 1270)
@@ -0,0 +1,54 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class ProtocolInjector : OperatorBase {
+    public override string Description {
+      get { return "Injects a protocol into the data tree"; }
+    }
+
+    public ProtocolInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("Protocol", "The protocol to be used for communication", typeof(Protocol), VariableKind.New));
+      AddVariable(new Variable("Protocol", new Protocol()));
+      AddVariableInfo(new VariableInfo("Dictionary", "The dictionary to translate received variables names", typeof(ItemDictionary<StringData, StringData>), VariableKind.New));
+      AddVariable(new Variable("Dictionary", new ItemDictionary<StringData, StringData>()));
+    }
+
+    public override IView CreateView() {
+      return new ProtocolInjectorView(this);
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IDictionary<Guid, object> clonedObjects = new Dictionary<Guid, object>();
+      scope.AddVariable(new Variable(scope.TranslateName("Protocol"), (Protocol)GetVariable("Protocol").Value.Clone(clonedObjects)));
+      scope.AddVariable(new Variable(scope.TranslateName("Dictionary"), (ItemDictionary<StringData, StringData>)GetVariable("Dictionary").Value.Clone()));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,169 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Communication.Operators {
+  partial class ProtocolInjectorView {
+    /// <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.protocolOpenFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.variableInfoTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.protocolTabPage = new System.Windows.Forms.TabPage();
+      this.protocolEditor = new HeuristicLab.Communication.Data.ProtocolEditor();
+      this.loadProtocolButton = new System.Windows.Forms.Button();
+      this.dictionaryTabPage = new System.Windows.Forms.TabPage();
+      this.tabControl.SuspendLayout();
+      this.variableInfoTabPage.SuspendLayout();
+      this.protocolTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // protocolOpenFileDialog
+      // 
+      this.protocolOpenFileDialog.Filter = "Protocol files|*.hl|All files|*.*";
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.variableInfoTabPage);
+      this.tabControl.Controls.Add(this.protocolTabPage);
+      this.tabControl.Controls.Add(this.dictionaryTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(503, 391);
+      this.tabControl.TabIndex = 2;
+      // 
+      // variableInfoTabPage
+      // 
+      this.variableInfoTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfoTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfoTabPage.Name = "variableInfoTabPage";
+      this.variableInfoTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfoTabPage.Size = new System.Drawing.Size(495, 365);
+      this.variableInfoTabPage.TabIndex = 0;
+      this.variableInfoTabPage.Text = "Variable Infos";
+      this.variableInfoTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(489, 359);
+      this.operatorBaseVariableInfosView.TabIndex = 1;
+      // 
+      // protocolTabPage
+      // 
+      this.protocolTabPage.Controls.Add(this.protocolEditor);
+      this.protocolTabPage.Controls.Add(this.loadProtocolButton);
+      this.protocolTabPage.Location = new System.Drawing.Point(4, 22);
+      this.protocolTabPage.Name = "protocolTabPage";
+      this.protocolTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.protocolTabPage.Size = new System.Drawing.Size(495, 365);
+      this.protocolTabPage.TabIndex = 1;
+      this.protocolTabPage.Text = "Protocol";
+      this.protocolTabPage.UseVisualStyleBackColor = true;
+      // 
+      // protocolEditor
+      // 
+      this.protocolEditor.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.protocolEditor.Caption = "Editor";
+      this.protocolEditor.Filename = null;
+      this.protocolEditor.Location = new System.Drawing.Point(6, 38);
+      this.protocolEditor.Name = "protocolEditor";
+      this.protocolEditor.Protocol = null;
+      this.protocolEditor.Size = new System.Drawing.Size(483, 321);
+      this.protocolEditor.TabIndex = 1;
+      // 
+      // loadProtocolButton
+      // 
+      this.loadProtocolButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.loadProtocolButton.Location = new System.Drawing.Point(6, 6);
+      this.loadProtocolButton.Name = "loadProtocolButton";
+      this.loadProtocolButton.Size = new System.Drawing.Size(483, 23);
+      this.loadProtocolButton.TabIndex = 0;
+      this.loadProtocolButton.Text = "Load Protocol";
+      this.loadProtocolButton.UseVisualStyleBackColor = true;
+      this.loadProtocolButton.Click += new System.EventHandler(this.loadProtocolButton_Click);
+      // 
+      // dictionaryTabPage
+      // 
+      this.dictionaryTabPage.Location = new System.Drawing.Point(4, 22);
+      this.dictionaryTabPage.Name = "dictionaryTabPage";
+      this.dictionaryTabPage.Size = new System.Drawing.Size(495, 365);
+      this.dictionaryTabPage.TabIndex = 2;
+      this.dictionaryTabPage.Text = "Dictionary";
+      this.dictionaryTabPage.UseVisualStyleBackColor = true;
+      // 
+      // ProtocolInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "ProtocolInjectorView";
+      this.Size = new System.Drawing.Size(503, 391);
+      this.tabControl.ResumeLayout(false);
+      this.variableInfoTabPage.ResumeLayout(false);
+      this.protocolTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button loadProtocolButton;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private System.Windows.Forms.OpenFileDialog protocolOpenFileDialog;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage variableInfoTabPage;
+    private System.Windows.Forms.TabPage protocolTabPage;
+    private HeuristicLab.Communication.Data.ProtocolEditor protocolEditor;
+    private System.Windows.Forms.TabPage dictionaryTabPage;
+    private HeuristicLab.Data.ItemDictionaryView<HeuristicLab.Data.StringData, HeuristicLab.Data.StringData> itemDictionaryView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.cs	(revision 1270)
@@ -0,0 +1,108 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public partial class ProtocolInjectorView : ViewBase {
+    public ProtocolInjector ProtocolInjector {
+      get { return (ProtocolInjector)Item; }
+      set {
+        Item = value;
+      }
+    }
+
+    public ProtocolInjectorView() {
+      InitializeComponent(); // killed self included code regarding ItemDictionaryView
+      dictionaryTabPage.SuspendLayout();
+      SuspendLayout();
+      itemDictionaryView = new ItemDictionaryView<StringData, StringData>();
+      itemDictionaryView.Location = new Point(6, 6);
+      itemDictionaryView.Dock = DockStyle.Fill;
+      itemDictionaryView.Name = "itemDictionaryView";
+      dictionaryTabPage.Controls.Add(itemDictionaryView);
+      dictionaryTabPage.ResumeLayout(false);
+      ResumeLayout(false);
+    }
+
+    public ProtocolInjectorView(ProtocolInjector protocolInjector)
+      : this() {
+      ProtocolInjector = protocolInjector;
+    }
+
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = ProtocolInjector;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ProtocolInjector == null) {
+        loadProtocolButton.Enabled = false;
+        protocolEditor.Enabled = false;
+        protocolEditor.Protocol = null;
+        itemDictionaryView.Enabled = false;
+        itemDictionaryView.ItemDictionary = null;
+      } else {
+        loadProtocolButton.Enabled = true;
+        protocolEditor.Protocol = (Protocol)ProtocolInjector.GetVariable("Protocol").Value;
+        protocolEditor.Enabled = true;
+        IVariable dict = ProtocolInjector.GetVariable("Dictionary");
+        if (dict == null) { // BACKWARDS COMPATIBLE CODE for versions prior to 3.0.0.40
+          dict = new Variable("Dictionary", new ItemDictionary<StringData, StringData>());
+          ProtocolInjector.AddVariable(dict);
+          ProtocolInjector.AddVariableInfo(new VariableInfo("Dictionary", "The received value translation dictionary", typeof(Dictionary<StringData, StringData>), VariableKind.New));
+        }
+        itemDictionaryView.ItemDictionary = (ItemDictionary<StringData, StringData>)dict.Value;
+        itemDictionaryView.Enabled = true;
+      }
+    }
+
+    private void loadProtocolButton_Click(object sender, EventArgs e) {
+      if (protocolOpenFileDialog.ShowDialog() == DialogResult.OK) {
+        Protocol protocol = null;
+        try {
+          protocol = (Protocol)PersistenceManager.Load(protocolOpenFileDialog.FileName);
+        } catch (InvalidCastException) {
+          throw new InvalidOperationException("Document is not a protocol");
+        } catch (Exception ex) {
+          throw new InvalidOperationException("An exception has occured:\n"+ex.Message.ToString());
+        }
+        ProtocolInjector.GetVariable("Protocol").Value = protocol;
+        UpdateControls();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/ProtocolInjectorView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="protocolOpenFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/StateTransistor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/StateTransistor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/StateTransistor.cs	(revision 1270)
@@ -0,0 +1,117 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Operators.Programmable;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class StateTransistor : OperatorBase {
+    public override string Description {
+      get { return @"Evaluates the state transition conditions one by one and advances to the state specified as target state in the first condition that results true.
+If the choice on the transition was made and there are suboperators attached, it will call its first suboperator upon successful transition, otherwise the second suboperator is the next to be executed."; }
+    }
+
+    public StateTransistor()
+      : base() {
+      AddVariableInfo(new VariableInfo("CurrentState", "", typeof(ProtocolState), VariableKind.In | VariableKind.Out | VariableKind.New));
+      AddVariableInfo(new VariableInfo("ConditionIndex", "", typeof(IntData), VariableKind.New | VariableKind.In | VariableKind.Out | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("Result", "", typeof(BoolData), VariableKind.New | VariableKind.In | VariableKind.Out | VariableKind.Deleted));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      /*ProtocolState currentState = GetVariableValue<ProtocolState>("CurrentState", scope, true);
+      // Terminate as soon as an accepting state is reached
+      if (currentState.AcceptingState.Data) return null;
+
+      ItemList<StateTransition> transitionCondition = currentState.StateTransitions;
+      if ((transitionCondition == null || transitionCondition.Count < 1) && !currentState.AcceptingState.Data)
+        throw new InvalidOperationException("ERROR: A dead-end state (" + currentState.Name.Data + ") has been reached that is not an accepting state");
+
+      IVariableInfo conditionIndexInfo = GetVariableInfo("ConditionIndex");
+      IntData conditionIndex = GetVariableValue<IntData>("ConditionIndex", scope, false, false);
+      if (conditionIndex == null) {
+        Variable conditionIndexVar = null;
+        if (conditionIndexInfo.Local) {
+          conditionIndexVar = new Variable(conditionIndexInfo.ActualName, new IntData(0));
+          AddVariable(conditionIndexVar);
+        } else {
+          conditionIndexVar = new Variable(scope.TranslateName(conditionIndexInfo.FormalName), new IntData(0));
+          scope.AddVariable(conditionIndexVar);
+        }
+        conditionIndex = (IntData)conditionIndexVar.Value;
+      }
+
+      BoolData result = GetVariableValue<BoolData>("Result", scope, false, false);
+      if (result != null) {
+        bool done = false;
+        if (result.Data) {
+          IVariable csVar = scope.GetVariable(scope.TranslateName("CurrentState"));
+          if (csVar == null) scope.AddVariable(new Variable(scope.TranslateName("CurrentState"), ((StateTransition)transitionCondition[conditionIndex.Data - 1]).TargetState));
+          else csVar.Value = ((StateTransition)transitionCondition[conditionIndex.Data - 1]).TargetState;
+          done = true;
+        }
+        if (done || conditionIndex.Data == transitionCondition.Count) {
+          //conditionIndex.Data = 0;
+          IVariableInfo resultInfo = GetVariableInfo("Result");
+          if (resultInfo.Local) RemoveVariable(resultInfo.ActualName);
+          else scope.RemoveVariable(scope.TranslateName(resultInfo.FormalName));
+          if (conditionIndexInfo.Local) RemoveVariable(conditionIndexInfo.ActualName);
+          else scope.RemoveVariable(scope.TranslateName(conditionIndexInfo.FormalName));
+        }
+        if (!done && conditionIndex.Data == transitionCondition.Count) {
+          if (SubOperators.Count > 1) return new AtomicOperation(SubOperators[1], scope);
+          else return null;
+        } else {
+          if (SubOperators.Count > 0) return new AtomicOperation(SubOperators[0], scope);
+          else return null;
+        }
+      }
+      SequentialProcessor sp = new SequentialProcessor();
+      ProgrammableOperator tmp = (ProgrammableOperator)((StateTransition)transitionCondition[conditionIndex.Data]).TransitionCondition;
+      tmp.GetVariableInfo("Result").ActualName = GetVariableInfo("Result").ActualName;
+      sp.AddSubOperator(tmp);
+
+      StateTransistor nextTransistor = new StateTransistor();
+      nextTransistor.GetVariableInfo("CurrentState").ActualName = GetVariableInfo("CurrentState").ActualName;
+      nextTransistor.GetVariableInfo("Result").ActualName = GetVariableInfo("Result").ActualName;
+      if (conditionIndexInfo.Local) {
+        nextTransistor.AddVariable(new Variable(conditionIndexInfo.ActualName, conditionIndex));
+        nextTransistor.GetVariableInfo("ConditionIndex").Local = true;
+      }
+      nextTransistor.GetVariableInfo("ConditionIndex").ActualName = conditionIndexInfo.ActualName;
+      conditionIndex.Data++;
+
+      for (int i = 0 ; i < SubOperators.Count ; i++) {
+        nextTransistor.AddSubOperator(SubOperators[i]);
+      }
+
+      sp.AddSubOperator(nextTransistor);
+      return new AtomicOperation(sp, scope);*/
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/SubScopeMessageComposer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/SubScopeMessageComposer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/SubScopeMessageComposer.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class SubScopeMessageComposer : OperatorBase {
+    public override string Description {
+      get {
+        return @"Takes a message skeleton and fills it with variables from the subscope";
+      }
+    }
+
+    public SubScopeMessageComposer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Message", "The message to fill", typeof(Message), VariableKind.In | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Message message = GetVariableValue<Message>("Message", scope, false);
+      foreach (IVariable var in message.Give) {
+        int done = 0;
+        foreach (IScope subscope in scope.SubScopes) {
+          IItem item = subscope.GetVariableValue(var.Name, false, false);
+          if (item != null) {
+            done = 1;
+            if (var.Value.GetType().Equals(item.GetType())) {
+              var.Value = (IItem)item.Clone();
+              done = 2;
+            }
+          }
+        }
+        if (done == 0) throw new InvalidOperationException("ERROR in SubScopeMessageComposer: Parameter not found");
+        if (done == 1) throw new InvalidOperationException("ERROR in SubScopeMessageComposer: Parameter did not have the right type");
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/SubScopeMessageDecomposer.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class SubScopeMessageDecomposer : OperatorBase {
+    public override string Description {
+      get {
+        return @"Takes a message and extracts the contents into subscopes";
+      }
+    }
+
+    public SubScopeMessageDecomposer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Message", "The message to decompose", typeof(Message), VariableKind.In | VariableKind.Deleted));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Message message = GetVariableValue<Message>("Message", scope, false);
+      if (message.Expect.Count > scope.SubScopes.Count) throw new InvalidOperationException("ERROR in SubScopeMessageDecomposer: There are not enough subscopes to put the contents of the message into");
+      int i = 0;
+      foreach (IVariable var in message.Give) {
+        scope.SubScopes[i].AddVariable(var);
+      }
+      IVariableInfo info = GetVariableInfo("Message");
+      if (info.Local) {
+        RemoveVariable(info.ActualName);
+      } else {
+        scope.RemoveVariable(scope.TranslateName(info.FormalName));
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/TcpNetworkInitiator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/TcpNetworkInitiator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Communication.Operators/TcpNetworkInitiator.cs	(revision 1270)
@@ -0,0 +1,69 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Communication.Data;
+
+namespace HeuristicLab.Communication.Operators {
+  public class TcpNetworkInitiator : OperatorBase {
+
+    public override string Description {
+      get { return @"Initiates a TCP socket, it opens one socket for sending and one socket for listening as specified in the configuration"; }
+    }
+
+    public TcpNetworkInitiator() {
+      AddVariableInfo(new VariableInfo("DriverConfiguration", "A configuration object", typeof(TcpNetworkDriverConfiguration), VariableKind.In));
+      AddVariableInfo(new VariableInfo("NetworkConnection", "A connection object", typeof(SocketData), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      TcpNetworkDriverConfiguration config = GetVariableValue<TcpNetworkDriverConfiguration>("DriverConfiguration", scope, true);
+      SocketData socket = new SocketData();
+      socket.Initialize(config);
+      while (!socket.Connect()) ;
+      try {
+        socket.Write("REQUEST_CONNECT");
+        if (!socket.Read().Equals("REQUEST_CONNECT")) throw new InvalidOperationException("ERROR in TcpNetworkInitiator: Remote host answered with unknown response!");
+        socket.Write("ACK");
+        if (!socket.Read().Equals("ACK")) throw new InvalidOperationException("ERROR in TcpNetworkInitiator: Remote host answered with unknown response!");
+      } catch (Exception) {
+        try {
+          socket.Close();
+        } catch (Exception) { }
+        return new AtomicOperation(this, scope);
+      }
+
+      IVariableInfo info = GetVariableInfo("NetworkConnection");
+      if (info.Local)
+        AddVariable(new Variable(info.ActualName, socket));
+      else
+        scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), socket));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraint.cs	(revision 1270)
@@ -0,0 +1,162 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Xml;
+using System.Diagnostics;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where all sub-operators have to be elements of a pre-defined group.
+  /// </summary>
+  public class AllSubOperatorsTypeConstraint : ConstraintBase {
+
+    private SubOperatorTypeConstraint groupConstraint;
+    /// <summary>
+    /// Gets all allowed sub-operators.
+    /// </summary>
+    public IList<IOperator> AllowedSubOperators {
+      get {
+        return groupConstraint.AllowedSubOperators;
+      }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "All sub-operators have to be elements of a pre-defined group."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AllSubOperatorsTypeConstraint"/>.
+    /// </summary>
+    public AllSubOperatorsTypeConstraint()
+      : base() {
+      groupConstraint = new SubOperatorTypeConstraint();
+    }
+
+    /// <summary>
+    /// Adds the given operator to the constraint.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.FireChanged"/> of base class 
+    /// <see cref="ConstraintBase"/>.</remarks>
+    /// <param name="op">The operator to add.</param>
+    public void AddOperator(IOperator op) {
+      groupConstraint.AddOperator(op);
+      FireChanged();
+    }
+
+    /// <summary>
+    /// Removes the given operator from the contraint.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.FireChanged"/> of base class 
+    /// <see cref="ConstraintBase"/>.</remarks>
+    /// <param name="op">The operator to remove.</param>
+    public void RemoveOperator(IOperator op) {
+      groupConstraint.RemoveOperator(op);
+      FireChanged();
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      IOperator op = data as IOperator;
+      if(data == null) return false;
+
+      for(int i = 0; i < op.SubOperators.Count; i++) {
+        groupConstraint.SubOperatorIndex.Data = i;
+        if(groupConstraint.Check(data) == false) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    /// <summary>
+    /// Empties the current instance.
+    /// </summary>
+    public void Clear() {
+      groupConstraint.Clear();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="AllSubOperatorsTypeConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      AllSubOperatorsTypeConstraint clone = new AllSubOperatorsTypeConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.groupConstraint = (SubOperatorTypeConstraint)Auxiliary.Clone(groupConstraint, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="AllSubOperatorsTypeConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="AllSubOperatorsTypeConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new AllSubOperatorsTypeConstraintView(groupConstraint);
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The sub-operators are saved as a child node with tag name 
+    /// <c>SubOperatorsGroupConstraint</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode subOperatorsNode = PersistenceManager.Persist("SubOperatorsGroupConstraint", groupConstraint, document, persistedObjects);
+      node.AppendChild(subOperatorsNode);
+
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      groupConstraint = (SubOperatorTypeConstraint)PersistenceManager.Restore(node.SelectSingleNode("SubOperatorsGroupConstraint"), restoredObjects);
+    }
+    #endregion persistence
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,113 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class AllSubOperatorsTypeConstraintView {
+    /// <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.groupBox = new System.Windows.Forms.GroupBox();
+      this.listView = new System.Windows.Forms.ListView();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.groupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // groupBox
+      // 
+      this.groupBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBox.Controls.Add(this.listView);
+      this.groupBox.Location = new System.Drawing.Point(0, 0);
+      this.groupBox.Name = "groupBox";
+      this.groupBox.Size = new System.Drawing.Size(463, 305);
+      this.groupBox.TabIndex = 0;
+      this.groupBox.TabStop = false;
+      this.groupBox.Text = "Allowed sub-operators";
+      // 
+      // listView
+      // 
+      this.listView.AllowDrop = true;
+      this.listView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.listView.Location = new System.Drawing.Point(3, 16);
+      this.listView.Name = "listView";
+      this.listView.Size = new System.Drawing.Size(457, 286);
+      this.listView.TabIndex = 1;
+      this.listView.UseCompatibleStateImageBehavior = false;
+      this.listView.View = System.Windows.Forms.View.List;
+      this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged);
+      this.listView.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView_DragDrop);
+      this.listView.DragEnter += new System.Windows.Forms.DragEventHandler(this.listView_DragEnter);
+      this.listView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listView_KeyDown);
+      this.listView.DragOver += new System.Windows.Forms.DragEventHandler(this.listView_DragOver);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeButton.Location = new System.Drawing.Point(3, 311);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(75, 23);
+      this.removeButton.TabIndex = 0;
+      this.removeButton.Text = "Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // AllSubOperatorsTypeConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.removeButton);
+      this.Controls.Add(this.groupBox);
+      this.Name = "AllSubOperatorsTypeConstraintView";
+      this.Size = new System.Drawing.Size(463, 337);
+      this.groupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox groupBox;
+    private System.Windows.Forms.Button removeButton;
+    private System.Windows.Forms.ListView listView;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.cs	(revision 1270)
@@ -0,0 +1,166 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// The visual representation of the <see cref="AllSubOperatorsTypeConstraint"/>.
+  /// </summary>
+  public partial class AllSubOperatorsTypeConstraintView : ViewBase {
+    private SubOperatorTypeConstraint constraint = new SubOperatorTypeConstraint();
+
+    /// <summary>
+    /// Gets or sets the SubOperatorTypeConstraint to display.
+    /// </summary>
+    public SubOperatorTypeConstraint Constraint {
+      get { return constraint; }
+      set { 
+        constraint = value;
+        UpdateAllowedOperatorsList();
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AllSubOperatorsTypeConstraintView"/>.
+    /// </summary>
+    public AllSubOperatorsTypeConstraintView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AllSubOperatorsTypeConstraintView"/> with
+    /// the given <paramref name="constraint"/> to display.
+    /// </summary>
+    /// <param name="constraint">The constraint that should be displayed.</param>
+    public AllSubOperatorsTypeConstraintView(SubOperatorTypeConstraint constraint) {
+      this.constraint = constraint;
+      InitializeComponent();
+    }
+
+    private void UpdateAllowedOperatorsList() {
+      listView.Clear();
+      foreach(IOperator op in constraint.AllowedSubOperators) {
+        ListViewItem item = new ListViewItem();
+        item.Name = op.Name;
+        item.Text = op.Name;
+        item.Tag = op;
+        listView.Items.Add(item);
+      }
+      Refresh();
+    }
+
+    private void op_NameChanged(object sender, EventArgs e) {
+      IOperator srcOp = (IOperator)sender;
+
+      foreach(ListViewItem item in listView.Items) {
+        if(item.Tag == srcOp) {
+          item.Text = srcOp.Name;
+          item.Name = srcOp.Name;
+          break;
+        }
+      }
+      Refresh();
+    }
+
+    #region Key Events
+    private void listView_KeyDown(object sender, KeyEventArgs e) {
+      if(e.KeyCode == Keys.Delete) {
+        while(listView.SelectedIndices.Count > 0) {
+          constraint.RemoveOperator((IOperator)listView.SelectedItems[0].Tag);
+          listView.Items.RemoveAt(listView.SelectedIndices[0]);
+        }
+      }
+    }
+    #endregion
+
+    #region Drag Events
+    private void listView_DragDrop(object sender, DragEventArgs e) {
+      if(e.Effect != DragDropEffects.None) {
+        if(e.Data.GetDataPresent("IOperator")) {
+          IOperator op = (IOperator)e.Data.GetData("IOperator");
+          ListViewItem item = new ListViewItem();
+          item.Tag = op;
+          item.Name = op.Name;
+          item.Text = op.Name;
+          listView.Items.Add(item);
+          constraint.AddOperator(op);
+          op.NameChanged += new EventHandler(op_NameChanged);
+          listView.SelectedIndices.Clear();
+        }
+      }
+    }
+
+    private void listView_DragEnter(object sender, DragEventArgs e) {
+      this.FindForm().BringToFront();
+      this.Focus();
+      e.Effect = DragDropEffects.None;
+      if(e.Data.GetDataPresent("IOperator")) {
+        IOperator op = (IOperator)e.Data.GetData("IOperator");
+        if(!ListContains(op)) {
+          e.Effect = DragDropEffects.Copy;
+        }
+      }
+    }
+
+    private void listView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if(e.Data.GetDataPresent("IOperator")) {
+        IOperator op = (IOperator)e.Data.GetData("IOperator");
+        if(!ListContains(op)) {
+          e.Effect = DragDropEffects.Copy;
+        }
+      }
+    }
+    #endregion
+
+    #region button events
+    private void removeButton_Click(object sender, EventArgs e) {
+      while(listView.SelectedIndices.Count > 0) {
+        constraint.RemoveOperator((IOperator)listView.SelectedItems[0].Tag);
+        listView.Items.RemoveAt(listView.SelectedIndices[0]);
+      }
+    }
+    #endregion
+
+    private bool ListContains(IOperator op) {
+      foreach(ListViewItem item in listView.Items) {
+        if(item.Tag == op) return true;
+      }
+      return false;
+    }
+
+    private void listView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(listView.SelectedItems.Count > 0) {
+        removeButton.Enabled = true;
+      } else {
+        removeButton.Enabled = false;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AllSubOperatorsTypeConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraint.cs	(revision 1270)
@@ -0,0 +1,132 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where all sub-constraints must be <c>true</c>.
+  /// </summary>
+  public class AndConstraint : ConstraintBase, IViewable {
+    private ItemList<IConstraint> clauses;
+    /// <summary>
+    /// Gets or sets the sub-constraints.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class 
+    /// <see cref="ConstraintBase"/> in the setter.</remarks>
+    public ItemList<IConstraint> Clauses {
+      get { return clauses; }
+      set {
+        clauses = value;
+        OnChanged();
+      }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return "To return true, all subconstraints have to be true";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AndConstraint"/>.
+    /// </summary>
+    public AndConstraint() {
+      clauses = new ItemList<IConstraint>();
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      bool result = true;
+      for (int i = 0 ; i < clauses.Count ; i++) {
+        result = clauses[i].Check(data);
+        if (!result) return false;
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="AndConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="AndConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new AndConstraintView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="AndConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      AndConstraint clone = new AndConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.Clauses = (ItemList<IConstraint>)Auxiliary.Clone(Clauses, clonedObjects);
+      return clone;
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The sub-constraints are saved as a child node with tag name 
+    /// <c>Clauses</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode clausesNode = PersistenceManager.Persist("Clauses", Clauses, document, persistedObjects);
+      node.AppendChild(clausesNode);
+
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      clauses = (ItemList<IConstraint>)PersistenceManager.Restore(node.SelectSingleNode("Clauses"), restoredObjects);
+    }
+    #endregion persistence
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class AndConstraintView {
+    /// <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();
+      }
+      if (AndConstraint != null) AndConstraint.Changed -= new System.EventHandler(AndConstraint_Changed);
+      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.clausesItemListView = new HeuristicLab.Data.ItemListView<HeuristicLab.Core.IConstraint>();
+      this.SuspendLayout();
+      // 
+      // clausesItemListView
+      // 
+      this.clausesItemListView.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.clausesItemListView.Caption = "View";
+      this.clausesItemListView.Location = new System.Drawing.Point(0, 0);
+      this.clausesItemListView.Name = "clausesItemListView";
+      this.clausesItemListView.Size = new System.Drawing.Size(338, 238);
+      this.clausesItemListView.TabIndex = 0;
+      // 
+      // AndConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.clausesItemListView);
+      this.Name = "AndConstraintView";
+      this.Size = new System.Drawing.Size(344, 244);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.ItemListView<HeuristicLab.Core.IConstraint> clausesItemListView;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.cs	(revision 1270)
@@ -0,0 +1,99 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// The visual representation of an <see cref="AndConstraint"/>.
+  /// </summary>
+  public partial class AndConstraintView : ViewBase {
+    /// <summary>
+    /// Gets or sets the AndConstraint to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.</remarks>
+    /// No own data storage present. 
+    public AndConstraint AndConstraint {
+      get { return (AndConstraint)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AndConstraintView"/>.
+    /// </summary>
+    public AndConstraintView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="AndConstraintView"/> with the given 
+    /// <paramref name="andConstraint"/> to display.
+    /// </summary>
+    /// <param name="andConstraint">The constraint to represent visually.</param>
+    public AndConstraintView(AndConstraint andConstraint)
+      : this() {
+      AndConstraint = andConstraint;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="AndConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      AndConstraint.Changed -= new EventHandler(AndConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="AndConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      AndConstraint.Changed += new EventHandler(AndConstraint_Changed);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>
+    protected override void UpdateControls() {
+      if (AndConstraint == null) {
+        clausesItemListView.Enabled = false;
+        clausesItemListView.ItemList = null;
+      } else {
+        clausesItemListView.ItemList = AndConstraint.Clauses;
+        clausesItemListView.Enabled = true;
+      }
+    }
+
+    void AndConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/AndConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ConstraintBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ConstraintBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ConstraintBase.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Base class for all constraints.
+  /// </summary>
+  public abstract class ConstraintBase : ItemBase, IConstraint {
+    /// <inheritdoc select="summary"/>
+    public virtual string Description {
+      get { return "No constraint description available."; }
+    }
+
+    /// <summary>
+    /// Checks whether the given data fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public abstract bool Check(IItem data);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraint.cs	(revision 1270)
@@ -0,0 +1,263 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Globalization;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where a double value is limited by a one or two sided boundary.
+  /// </summary>
+  public class DoubleBoundedConstraint : ConstraintBase {
+    private double lowerBound;
+    /// <summary>
+    /// Gets or sets the lower bound of the limit.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public double LowerBound {
+      get { return lowerBound; }
+      set {
+        lowerBound = value;
+        OnChanged();
+      }
+    }
+    private bool lowerBoundIncluded;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the lower bound should be included.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool LowerBoundIncluded {
+      get { return lowerBoundIncluded; }
+      set {
+        lowerBoundIncluded = value;
+        OnChanged();
+      }
+    }
+    private bool lowerBoundEnabled;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the lower bound should be enabled.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool LowerBoundEnabled {
+      get { return lowerBoundEnabled; }
+      set {
+        lowerBoundEnabled = value;
+        OnChanged();
+      }
+    }
+    private double upperBound;
+    /// <summary>
+    /// Gets or sets the upper bound of the limit.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public double UpperBound {
+      get { return upperBound; }
+      set {
+        upperBound = value;
+        OnChanged();
+      }
+    }
+    private bool upperBoundIncluded;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the upper bound should be included.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool UpperBoundIncluded {
+      get { return upperBoundIncluded; }
+      set {
+        upperBoundIncluded = value;
+        OnChanged();
+      }
+    }
+    private bool upperBoundEnabled;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the upper bound should be enabled.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool UpperBoundEnabled {
+      get { return upperBoundEnabled; }
+      set {
+        upperBoundEnabled = value;
+        OnChanged();
+      }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "The double is limited one or two sided by a lower and/or upper boundary"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleBoundedConstraint"/>.
+    /// </summary>
+    public DoubleBoundedConstraint()
+      : this(double.MinValue, double.MaxValue) {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleBoundedConstraint"/> with the two given boundaries.
+    /// </summary>
+    /// <param name="lowerBound">The lower bound of the constraint.</param>
+    /// <param name="upperBound">The upper bound of the constraint.</param>
+    public DoubleBoundedConstraint(double lowerBound, double upperBound)
+      : this(lowerBound, true, upperBound, true) {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleBoundedConstraint"/> with the given parameters.
+    /// </summary>
+    /// <param name="lowerBound">The lower bound of the constraint.</param>
+    /// <param name="lowerBoundIncluded">Boolean flag whether the lower bound should be included.</param>
+    /// <param name="upperBound">The upper bound of the constraint.</param>
+    /// <param name="upperBoundIncluded">Boolean flag whether the upper bound should be included.</param>
+    public DoubleBoundedConstraint(double lowerBound, bool lowerBoundIncluded, double upperBound, bool upperBoundIncluded)
+      : base() {
+      this.lowerBound = lowerBound;
+      this.lowerBoundIncluded = lowerBoundIncluded;
+      this.lowerBoundEnabled = true;
+      this.upperBound = upperBound;
+      this.upperBoundIncluded = upperBoundIncluded;
+      this.upperBoundEnabled = true;
+    }
+
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      ConstrainedDoubleData d = (data as ConstrainedDoubleData);
+      if (d == null) return false;
+      if (LowerBoundEnabled && ((LowerBoundIncluded && d.CompareTo(LowerBound) < 0)
+        || (!LowerBoundIncluded && d.CompareTo(LowerBound) <= 0))) return false;
+      if (UpperBoundEnabled && ((UpperBoundIncluded && d.CompareTo(UpperBound) > 0)
+        || (!UpperBoundIncluded && d.CompareTo(UpperBound) >= 0))) return false;
+      return true;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="DoubleBoundedConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="DoubleBoundedConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new DoubleBoundedConstraintView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="DoubleBoundedConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      DoubleBoundedConstraint clone = new DoubleBoundedConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.upperBound = UpperBound;
+      clone.upperBoundIncluded = UpperBoundIncluded;
+      clone.upperBoundEnabled = UpperBoundEnabled;
+      clone.lowerBound = LowerBound;
+      clone.lowerBoundIncluded = LowerBoundIncluded;
+      clone.lowerBoundEnabled = LowerBoundEnabled;
+      return clone;
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The properties of the current instance are saved as attributes with special tag names.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute lb = document.CreateAttribute("LowerBound");
+      lb.Value = LowerBound.ToString("r", CultureInfo.InvariantCulture);
+      XmlAttribute lbi = document.CreateAttribute("LowerBoundIncluded");
+      lbi.Value = lowerBoundIncluded.ToString();
+      XmlAttribute lbe = document.CreateAttribute("LowerBoundEnabled");
+      lbe.Value = lowerBoundEnabled.ToString();
+      XmlAttribute ub = document.CreateAttribute("UpperBound");
+      ub.Value = upperBound.ToString("r", CultureInfo.InvariantCulture);
+      XmlAttribute ubi = document.CreateAttribute("UpperBoundIncluded");
+      ubi.Value = upperBoundIncluded.ToString();
+      XmlAttribute ube = document.CreateAttribute("UpperBoundEnabled");
+      ube.Value = upperBoundEnabled.ToString();
+      node.Attributes.Append(lb);
+      if (!lowerBoundIncluded) node.Attributes.Append(lbi);
+      if (!lowerBoundEnabled) node.Attributes.Append(lbe);
+      node.Attributes.Append(ub);
+      if (!upperBoundIncluded) node.Attributes.Append(ubi);
+      if (!upperBoundEnabled) node.Attributes.Append(ube);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      lowerBound = double.Parse(node.Attributes["LowerBound"].Value, CultureInfo.InvariantCulture);
+      if (node.Attributes["LowerBoundIncluded"] != null) {
+        lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+      } else {
+        lowerBoundIncluded = true;
+      }
+      if (node.Attributes["LowerBoundEnabled"] != null) {
+        lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+      } else {
+        lowerBoundEnabled = true;
+      }
+
+      upperBound = double.Parse(node.Attributes["UpperBound"].Value, CultureInfo.InvariantCulture);
+      if (node.Attributes["UpperBoundIncluded"] != null) {
+        upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+      } else {
+        upperBoundIncluded = true;
+      }
+      if (node.Attributes["UpperBoundEnabled"] != null) {
+        upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+      } else {
+        upperBoundEnabled = true;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,148 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class DoubleBoundedConstraintView {
+    /// <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();
+      }
+      if (DoubleBoundedConstraint != null) DoubleBoundedConstraint.Changed -= new System.EventHandler(DoubleBoundedConstraint_Changed);
+      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.lbEnabledCheckBox = new System.Windows.Forms.CheckBox();
+      this.ubEnabledCheckBox = new System.Windows.Forms.CheckBox();
+      this.lbIncludedCheckBox = new System.Windows.Forms.CheckBox();
+      this.ubIncludedCheckBox = new System.Windows.Forms.CheckBox();
+      this.lbTextBox = new System.Windows.Forms.TextBox();
+      this.ubTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // lbEnabledCheckBox
+      // 
+      this.lbEnabledCheckBox.AutoSize = true;
+      this.lbEnabledCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.lbEnabledCheckBox.Location = new System.Drawing.Point(3, 6);
+      this.lbEnabledCheckBox.Name = "lbEnabledCheckBox";
+      this.lbEnabledCheckBox.Size = new System.Drawing.Size(91, 17);
+      this.lbEnabledCheckBox.TabIndex = 20;
+      this.lbEnabledCheckBox.Text = "Lower bound:";
+      this.lbEnabledCheckBox.UseVisualStyleBackColor = true;
+      this.lbEnabledCheckBox.CheckedChanged += new System.EventHandler(this.lbEnabledCheckBox_CheckedChanged);
+      // 
+      // ubEnabledCheckBox
+      // 
+      this.ubEnabledCheckBox.AutoSize = true;
+      this.ubEnabledCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.ubEnabledCheckBox.Location = new System.Drawing.Point(3, 29);
+      this.ubEnabledCheckBox.Name = "ubEnabledCheckBox";
+      this.ubEnabledCheckBox.Size = new System.Drawing.Size(91, 17);
+      this.ubEnabledCheckBox.TabIndex = 21;
+      this.ubEnabledCheckBox.Text = "Upper bound:";
+      this.ubEnabledCheckBox.UseVisualStyleBackColor = true;
+      this.ubEnabledCheckBox.CheckedChanged += new System.EventHandler(this.ubEnabledCheckBox_CheckedChanged);
+      // 
+      // lbIncludedCheckBox
+      // 
+      this.lbIncludedCheckBox.AutoSize = true;
+      this.lbIncludedCheckBox.Location = new System.Drawing.Point(189, 6);
+      this.lbIncludedCheckBox.Name = "lbIncludedCheckBox";
+      this.lbIncludedCheckBox.Size = new System.Drawing.Size(73, 17);
+      this.lbIncludedCheckBox.TabIndex = 22;
+      this.lbIncludedCheckBox.Text = "Included?";
+      this.lbIncludedCheckBox.UseVisualStyleBackColor = true;
+      this.lbIncludedCheckBox.CheckedChanged += new System.EventHandler(this.lbIncludedCheckBox_CheckedChanged);
+      // 
+      // ubIncludedCheckBox
+      // 
+      this.ubIncludedCheckBox.AutoSize = true;
+      this.ubIncludedCheckBox.Location = new System.Drawing.Point(189, 29);
+      this.ubIncludedCheckBox.Name = "ubIncludedCheckBox";
+      this.ubIncludedCheckBox.Size = new System.Drawing.Size(73, 17);
+      this.ubIncludedCheckBox.TabIndex = 23;
+      this.ubIncludedCheckBox.Text = "Included?";
+      this.ubIncludedCheckBox.UseVisualStyleBackColor = true;
+      this.ubIncludedCheckBox.CheckedChanged += new System.EventHandler(this.ubIncludedCheckBox_CheckedChanged);
+      // 
+      // lbTextBox
+      // 
+      this.lbTextBox.Location = new System.Drawing.Point(100, 4);
+      this.lbTextBox.Name = "lbTextBox";
+      this.lbTextBox.Size = new System.Drawing.Size(83, 20);
+      this.lbTextBox.TabIndex = 24;
+      this.lbTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      this.lbTextBox.Validated += new System.EventHandler(this.lbTextBox_Validated);
+      this.lbTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.lbTextBox_Validating);
+      // 
+      // ubTextBox
+      // 
+      this.ubTextBox.Location = new System.Drawing.Point(100, 27);
+      this.ubTextBox.Name = "ubTextBox";
+      this.ubTextBox.Size = new System.Drawing.Size(83, 20);
+      this.ubTextBox.TabIndex = 25;
+      this.ubTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      this.ubTextBox.Validated += new System.EventHandler(this.ubTextBox_Validated);
+      this.ubTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.ubTextBox_Validating);
+      // 
+      // DoubleBoundedConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.ubTextBox);
+      this.Controls.Add(this.lbTextBox);
+      this.Controls.Add(this.ubIncludedCheckBox);
+      this.Controls.Add(this.lbIncludedCheckBox);
+      this.Controls.Add(this.ubEnabledCheckBox);
+      this.Controls.Add(this.lbEnabledCheckBox);
+      this.Name = "DoubleBoundedConstraintView";
+      this.Size = new System.Drawing.Size(263, 51);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox lbEnabledCheckBox;
+    private System.Windows.Forms.CheckBox ubEnabledCheckBox;
+    private System.Windows.Forms.CheckBox lbIncludedCheckBox;
+    private System.Windows.Forms.CheckBox ubIncludedCheckBox;
+    private System.Windows.Forms.TextBox lbTextBox;
+    private System.Windows.Forms.TextBox ubTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.cs	(revision 1270)
@@ -0,0 +1,163 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// The visual representation of a <see cref="DoubleBoundedConstraint"/>.
+  /// </summary>
+  public partial class DoubleBoundedConstraintView : ViewBase {
+    /// <summary>
+    /// Gets or sets the DoubleBoundedConstraint to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public DoubleBoundedConstraint DoubleBoundedConstraint {
+      get { return (DoubleBoundedConstraint)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleBoundedConstraintView"/>.
+    /// </summary>
+    public DoubleBoundedConstraintView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleBoundedConstraintView"/> with the given
+    /// <paramref name="doubleBoundedConstraint"/> to display.
+    /// </summary>
+    /// <param name="doubleBoundedConstraint">The constraint to represent visually.</param>
+    public DoubleBoundedConstraintView(DoubleBoundedConstraint doubleBoundedConstraint)
+      : this() {
+      DoubleBoundedConstraint = doubleBoundedConstraint;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="DoubleBoundedConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      DoubleBoundedConstraint.Changed -= new EventHandler(DoubleBoundedConstraint_Changed); 
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="DoubleBoundedConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      DoubleBoundedConstraint.Changed += new EventHandler(DoubleBoundedConstraint_Changed);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (DoubleBoundedConstraint == null) {
+        lbTextBox.Enabled = false;
+        lbTextBox.Text = "";
+        lbIncludedCheckBox.Enabled = false;
+        lbEnabledCheckBox.Checked = false;
+
+        ubTextBox.Enabled = false;
+        ubTextBox.Text = "";
+        ubIncludedCheckBox.Checked = false;
+        ubEnabledCheckBox.Enabled = false;
+      } else {
+        lbTextBox.Text = DoubleBoundedConstraint.LowerBound.ToString("r");
+        lbTextBox.Enabled = DoubleBoundedConstraint.LowerBoundEnabled;
+        lbIncludedCheckBox.Checked = DoubleBoundedConstraint.LowerBoundIncluded;
+        lbIncludedCheckBox.Enabled = true;
+        lbEnabledCheckBox.Checked = DoubleBoundedConstraint.LowerBoundEnabled;
+        lbEnabledCheckBox.Enabled = true;
+
+        ubTextBox.Text = DoubleBoundedConstraint.UpperBound.ToString("r");
+        ubTextBox.Enabled = DoubleBoundedConstraint.UpperBoundEnabled;
+        ubIncludedCheckBox.Checked = DoubleBoundedConstraint.UpperBoundIncluded;
+        ubIncludedCheckBox.Enabled = true;
+        ubEnabledCheckBox.Checked = DoubleBoundedConstraint.UpperBoundEnabled;
+        ubEnabledCheckBox.Enabled = true;
+      }
+    }
+
+    void DoubleBoundedConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void lbEnabledCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleBoundedConstraint.LowerBoundEnabled = lbEnabledCheckBox.Checked;
+      lbTextBox.Enabled = lbEnabledCheckBox.Checked;
+      lbIncludedCheckBox.Enabled = lbEnabledCheckBox.Checked;
+    }
+
+    private void ubEnabledCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleBoundedConstraint.UpperBoundEnabled = ubEnabledCheckBox.Checked;
+      ubTextBox.Enabled = ubEnabledCheckBox.Checked;
+      ubIncludedCheckBox.Enabled = ubEnabledCheckBox.Checked;
+    }
+
+    private void lbIncludedCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleBoundedConstraint.LowerBoundIncluded = lbIncludedCheckBox.Checked;
+    }
+
+    private void ubIncludedCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleBoundedConstraint.UpperBoundIncluded = ubIncludedCheckBox.Checked;
+    }
+
+    private void lbTextBox_Validating(object sender, CancelEventArgs e) {
+      double result;
+      if (!double.TryParse(lbTextBox.Text, out result)) {
+        e.Cancel = true;
+      } 
+    }
+
+    private void ubTextBox_Validating(object sender, CancelEventArgs e) {
+      double result;
+      if (!double.TryParse(ubTextBox.Text, out result)) {
+        e.Cancel = true;
+      } 
+    }
+
+    private void lbTextBox_Validated(object sender, EventArgs e) {
+      DoubleBoundedConstraint.LowerBound = double.Parse(lbTextBox.Text);
+    }
+
+    private void ubTextBox_Validated(object sender, EventArgs e) {
+      DoubleBoundedConstraint.UpperBound = double.Parse(ubTextBox.Text);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/DoubleBoundedConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/HeuristicLab.Constraints.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/HeuristicLab.Constraints.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/HeuristicLab.Constraints.csproj	(revision 1270)
@@ -0,0 +1,215 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Constraints</RootNamespace>
+    <AssemblyName>HeuristicLab.Constraints-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Constraints-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Constraints-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AllSubOperatorsTypeConstraint.cs" />
+    <Compile Include="AllSubOperatorsTypeConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AllSubOperatorsTypeConstraintView.designer.cs">
+      <DependentUpon>AllSubOperatorsTypeConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AndConstraint.cs" />
+    <Compile Include="AndConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="AndConstraintView.Designer.cs">
+      <DependentUpon>AndConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ConstraintBase.cs" />
+    <Compile Include="DoubleBoundedConstraint.cs" />
+    <Compile Include="DoubleBoundedConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DoubleBoundedConstraintView.Designer.cs">
+      <DependentUpon>DoubleBoundedConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IntBoundedConstraint.cs" />
+    <Compile Include="IntBoundedConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IntBoundedConstraintView.Designer.cs">
+      <DependentUpon>IntBoundedConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IsIntegerConstraint.cs" />
+    <Compile Include="ItemTypeConstraint.cs" />
+    <Compile Include="ItemTypeConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemTypeConstraintView.Designer.cs">
+      <DependentUpon>ItemTypeConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NotConstraint.cs" />
+    <Compile Include="NotConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NotConstraintView.Designer.cs">
+      <DependentUpon>NotConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="NumberOfSubOperatorsConstraint.cs" />
+    <Compile Include="NumberOfSubOperatorsConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="NumberOfSubOperatorsConstraintView.Designer.cs">
+      <DependentUpon>NumberOfSubOperatorsConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OrConstraint.cs" />
+    <Compile Include="OrConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OrConstraintView.Designer.cs">
+      <DependentUpon>OrConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SubOperatorsConstraintAnalyser.cs" />
+    <Compile Include="SubOperatorsTypeConstraint.cs" />
+    <Compile Include="SubOperatorsTypeConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SubOperatorsTypeConstraintView.designer.cs">
+      <DependentUpon>SubOperatorsTypeConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabConstraintsPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="VariableComparisonConstraint.cs" />
+    <Compile Include="VariableComparisonConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableComparisonConstraintView.Designer.cs">
+      <DependentUpon>VariableComparisonConstraintView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AllSubOperatorsTypeConstraintView.resx">
+      <DependentUpon>AllSubOperatorsTypeConstraintView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AndConstraintView.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>AndConstraintView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DoubleBoundedConstraintView.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>DoubleBoundedConstraintView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="IntBoundedConstraintView.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>IntBoundedConstraintView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ItemTypeConstraintView.resx">
+      <DependentUpon>ItemTypeConstraintView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="NotConstraintView.resx">
+      <DependentUpon>NotConstraintView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="NumberOfSubOperatorsConstraintView.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>NumberOfSubOperatorsConstraintView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OrConstraintView.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>OrConstraintView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SubOperatorsTypeConstraintView.resx">
+      <DependentUpon>SubOperatorsTypeConstraintView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="VariableComparisonConstraintView.resx">
+      <DependentUpon>VariableComparisonConstraintView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/HeuristicLabConstraintsPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/HeuristicLabConstraintsPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/HeuristicLabConstraintsPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Constraints plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Constraints-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Constraints-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabConstraintsPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraint.cs	(revision 1270)
@@ -0,0 +1,249 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where an integer value is limited by a one or two sided boundary.
+  /// </summary>
+  public class IntBoundedConstraint : ConstraintBase {
+    private int lowerBound;
+    /// <summary>
+    /// Gets or sets the lower bound of the limit.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public int LowerBound {
+      get { return lowerBound; }
+      set {
+        lowerBound = value;
+        OnChanged();
+      }
+    }
+    private bool lowerBoundIncluded;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the lower bound should be included.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool LowerBoundIncluded {
+      get { return lowerBoundIncluded; }
+      set {
+        lowerBoundIncluded = value;
+        OnChanged();
+      }
+    }
+    private bool lowerBoundEnabled;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the lower bound should be enabled.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool LowerBoundEnabled {
+      get { return lowerBoundEnabled; }
+      set {
+        lowerBoundEnabled = value;
+        OnChanged();
+      }
+    }
+    private int upperBound;
+    /// <summary>
+    /// Gets or sets the upper bound of the limit.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public int UpperBound {
+      get { return upperBound; }
+      set {
+        upperBound = value;
+        OnChanged();
+      }
+    }
+    private bool upperBoundIncluded;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the upper bound should be included.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool UpperBoundIncluded {
+      get { return upperBoundIncluded; }
+      set {
+        upperBoundIncluded = value;
+        OnChanged();
+      }
+    }
+    private bool upperBoundEnabled;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the upper bound should be enabled.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public bool UpperBoundEnabled {
+      get { return upperBoundEnabled; }
+      set {
+        upperBoundEnabled = value;
+        OnChanged();
+      }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "The integer is limited one or two sided by a lower and/or upper boundary"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntBoundedConstraint"/>.
+    /// </summary>
+    public IntBoundedConstraint()
+      : this(int.MinValue, int.MaxValue) {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntBoundedConstraint"/> with the two given boundaries.
+    /// </summary>
+    /// <param name="low">The lower bound of the constraint.</param>
+    /// <param name="high">The upper bound of the constraint.</param>
+    public IntBoundedConstraint(int low, int high) : base() {
+      lowerBound = low;
+      lowerBoundIncluded = false;
+      lowerBoundEnabled = true;
+      upperBound = high;
+      upperBoundIncluded = false;
+      upperBoundEnabled = true;
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      ConstrainedIntData d = (data as ConstrainedIntData);
+      if (d == null) return false;
+      if (LowerBoundEnabled && ((LowerBoundIncluded && d.CompareTo(LowerBound) < 0)
+        || (!LowerBoundIncluded && d.CompareTo(LowerBound) <= 0))) return false;
+      if (UpperBoundEnabled && ((UpperBoundIncluded && d.CompareTo(UpperBound) > 0)
+        || (!UpperBoundIncluded && d.CompareTo(UpperBound) >= 0))) return false;
+      return true;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="IntBoundedConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="IntBoundedConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new IntBoundedConstraintView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="IntBoundedConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      IntBoundedConstraint clone = new IntBoundedConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.upperBound = UpperBound;
+      clone.upperBoundIncluded = UpperBoundIncluded;
+      clone.upperBoundEnabled = UpperBoundEnabled;
+      clone.lowerBound = LowerBound;
+      clone.lowerBoundIncluded = LowerBoundIncluded;
+      clone.lowerBoundEnabled = LowerBoundEnabled;
+      return clone;
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The properties of the current instance are saved as attributes with special tag names.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute lb = document.CreateAttribute("LowerBound");
+      lb.Value = LowerBound + "";
+      XmlAttribute lbi = document.CreateAttribute("LowerBoundIncluded");
+      lbi.Value = lowerBoundIncluded + "";
+      XmlAttribute lbe = document.CreateAttribute("LowerBoundEnabled");
+      lbe.Value = lowerBoundEnabled + "";
+      XmlAttribute ub = document.CreateAttribute("UpperBound");
+      ub.Value = upperBound + "";
+      XmlAttribute ubi = document.CreateAttribute("UpperBoundIncluded");
+      ubi.Value = upperBoundIncluded + "";
+      XmlAttribute ube = document.CreateAttribute("UpperBoundEnabled");
+      ube.Value = upperBoundEnabled + "";
+      node.Attributes.Append(lb);
+      if (!lowerBoundIncluded) node.Attributes.Append(lbi);
+      if (!lowerBoundEnabled) node.Attributes.Append(lbe);
+      node.Attributes.Append(ub);
+      if (!upperBoundIncluded) node.Attributes.Append(ubi);
+      if (!upperBoundEnabled) node.Attributes.Append(ube);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      lowerBound = int.Parse(node.Attributes["LowerBound"].Value);
+      if (node.Attributes["LowerBoundIncluded"] != null) {
+        lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+      } else {
+        lowerBoundIncluded = true;
+      }
+      if (node.Attributes["LowerBoundEnabled"] != null) {
+        lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+      } else {
+        lowerBoundEnabled = true;
+      }
+
+      upperBound = int.Parse(node.Attributes["UpperBound"].Value);
+      if (node.Attributes["UpperBoundIncluded"] != null) {
+        upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+      } else {
+        upperBoundIncluded = true;
+      }
+      if (node.Attributes["UpperBoundEnabled"] != null) {
+        upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+      } else {
+        upperBoundEnabled = true;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,149 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class IntBoundedConstraintView {
+    /// <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();
+      }
+      if (IntBoundedConstraint != null) IntBoundedConstraint.Changed -= new System.EventHandler(IntBoundedConstraint_Changed);
+      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.lbEnabledCheckBox = new System.Windows.Forms.CheckBox();
+      this.ubEnabledCheckBox = new System.Windows.Forms.CheckBox();
+      this.lbIncludedCheckBox = new System.Windows.Forms.CheckBox();
+      this.ubIncludedCheckBox = new System.Windows.Forms.CheckBox();
+      this.lbTextBox = new System.Windows.Forms.TextBox();
+      this.ubTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // lbEnabledCheckBox
+      // 
+      this.lbEnabledCheckBox.AutoSize = true;
+      this.lbEnabledCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.lbEnabledCheckBox.Location = new System.Drawing.Point(4, 4);
+      this.lbEnabledCheckBox.Name = "lbEnabledCheckBox";
+      this.lbEnabledCheckBox.Size = new System.Drawing.Size(91, 17);
+      this.lbEnabledCheckBox.TabIndex = 0;
+      this.lbEnabledCheckBox.Text = "Lower bound:";
+      this.lbEnabledCheckBox.UseVisualStyleBackColor = true;
+      this.lbEnabledCheckBox.CheckedChanged += new System.EventHandler(this.lbEnabledCheckBox_CheckedChanged);
+      // 
+      // ubEnabledCheckBox
+      // 
+      this.ubEnabledCheckBox.AutoSize = true;
+      this.ubEnabledCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.ubEnabledCheckBox.Location = new System.Drawing.Point(4, 27);
+      this.ubEnabledCheckBox.Name = "ubEnabledCheckBox";
+      this.ubEnabledCheckBox.Size = new System.Drawing.Size(91, 17);
+      this.ubEnabledCheckBox.TabIndex = 1;
+      this.ubEnabledCheckBox.Text = "Upper bound:";
+      this.ubEnabledCheckBox.UseVisualStyleBackColor = true;
+      this.ubEnabledCheckBox.CheckedChanged += new System.EventHandler(this.ubEnabledCheckBox_CheckedChanged);
+      // 
+      // lbIncludedCheckBox
+      // 
+      this.lbIncludedCheckBox.AutoSize = true;
+      this.lbIncludedCheckBox.Location = new System.Drawing.Point(207, 4);
+      this.lbIncludedCheckBox.Name = "lbIncludedCheckBox";
+      this.lbIncludedCheckBox.Size = new System.Drawing.Size(73, 17);
+      this.lbIncludedCheckBox.TabIndex = 2;
+      this.lbIncludedCheckBox.Text = "Included?";
+      this.lbIncludedCheckBox.UseVisualStyleBackColor = true;
+      this.lbIncludedCheckBox.CheckedChanged += new System.EventHandler(this.lbIncludedCheckBox_CheckedChanged);
+      // 
+      // ubIncludedCheckBox
+      // 
+      this.ubIncludedCheckBox.AutoSize = true;
+      this.ubIncludedCheckBox.Location = new System.Drawing.Point(207, 27);
+      this.ubIncludedCheckBox.Name = "ubIncludedCheckBox";
+      this.ubIncludedCheckBox.Size = new System.Drawing.Size(73, 17);
+      this.ubIncludedCheckBox.TabIndex = 3;
+      this.ubIncludedCheckBox.Text = "Included?";
+      this.ubIncludedCheckBox.UseVisualStyleBackColor = true;
+      this.ubIncludedCheckBox.CheckedChanged += new System.EventHandler(this.ubIncludedCheckBox_CheckedChanged);
+      // 
+      // lbTextBox
+      // 
+      this.lbTextBox.Location = new System.Drawing.Point(101, 2);
+      this.lbTextBox.Name = "lbTextBox";
+      this.lbTextBox.Size = new System.Drawing.Size(100, 20);
+      this.lbTextBox.TabIndex = 4;
+      this.lbTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      this.lbTextBox.Validated += new System.EventHandler(this.lbTextBox_Validated);
+      this.lbTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.lbTextBox_Validating);
+      // 
+      // ubTextBox
+      // 
+      this.ubTextBox.Location = new System.Drawing.Point(101, 25);
+      this.ubTextBox.Name = "ubTextBox";
+      this.ubTextBox.Size = new System.Drawing.Size(100, 20);
+      this.ubTextBox.TabIndex = 5;
+      this.ubTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      this.ubTextBox.Validated += new System.EventHandler(this.ubTextBox_Validated);
+      this.ubTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.ubTextBox_Validating);
+      // 
+      // IntBoundedConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.ubTextBox);
+      this.Controls.Add(this.lbTextBox);
+      this.Controls.Add(this.ubIncludedCheckBox);
+      this.Controls.Add(this.lbIncludedCheckBox);
+      this.Controls.Add(this.ubEnabledCheckBox);
+      this.Controls.Add(this.lbEnabledCheckBox);
+      this.Name = "IntBoundedConstraintView";
+      this.Size = new System.Drawing.Size(280, 52);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox lbEnabledCheckBox;
+    private System.Windows.Forms.CheckBox ubEnabledCheckBox;
+    private System.Windows.Forms.CheckBox lbIncludedCheckBox;
+    private System.Windows.Forms.CheckBox ubIncludedCheckBox;
+    private System.Windows.Forms.TextBox lbTextBox;
+    private System.Windows.Forms.TextBox ubTextBox;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.cs	(revision 1270)
@@ -0,0 +1,163 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// The visual representation of an <see cref="IntBoundedConstraint"/>.
+  /// </summary>
+  public partial class IntBoundedConstraintView : ViewBase {
+    /// <summary>
+    /// Gets or sets the the IntBoundedConstraint to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IntBoundedConstraint IntBoundedConstraint {
+      get { return (IntBoundedConstraint)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntBoundedConstraintView"/>.
+    /// </summary>
+    public IntBoundedConstraintView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntBoundedConstraintView"/> with the given
+    /// <paramref name="intBoundedConstraint"/> to display.
+    /// </summary>
+    /// <param name="intBoundedConstraint">The constraint to represent visually.</param>
+    public IntBoundedConstraintView(IntBoundedConstraint intBoundedConstraint)
+      : this() {
+      IntBoundedConstraint = intBoundedConstraint;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="IntBoundedConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      IntBoundedConstraint.Changed -= new EventHandler(IntBoundedConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="IntBoundedConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      IntBoundedConstraint.Changed += new EventHandler(IntBoundedConstraint_Changed);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (IntBoundedConstraint == null) {
+        lbTextBox.Enabled = false;
+        lbTextBox.Text = "";
+        lbIncludedCheckBox.Enabled = false;
+        lbEnabledCheckBox.Checked = false;
+
+        ubTextBox.Enabled = false;
+        ubTextBox.Text = "";
+        ubIncludedCheckBox.Enabled = false;
+        ubEnabledCheckBox.Checked = false;
+      } else {
+        lbTextBox.Text = IntBoundedConstraint.LowerBound + "";
+        lbTextBox.Enabled = IntBoundedConstraint.LowerBoundEnabled;
+        lbIncludedCheckBox.Checked = IntBoundedConstraint.LowerBoundIncluded;
+        lbIncludedCheckBox.Enabled = true;
+        lbEnabledCheckBox.Checked = IntBoundedConstraint.LowerBoundEnabled;
+        lbEnabledCheckBox.Enabled = true;
+
+        ubTextBox.Text = IntBoundedConstraint.UpperBound + "";
+        ubTextBox.Enabled = IntBoundedConstraint.UpperBoundEnabled;
+        ubIncludedCheckBox.Checked = IntBoundedConstraint.UpperBoundIncluded;
+        ubIncludedCheckBox.Enabled = true;
+        ubEnabledCheckBox.Checked = IntBoundedConstraint.UpperBoundEnabled;
+        ubEnabledCheckBox.Enabled = true;
+      }
+    }
+
+    void IntBoundedConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void lbEnabledCheckBox_CheckedChanged(object sender, EventArgs e) {
+      IntBoundedConstraint.LowerBoundEnabled = lbEnabledCheckBox.Checked;
+      lbTextBox.Enabled = lbEnabledCheckBox.Checked;
+      lbIncludedCheckBox.Enabled = lbEnabledCheckBox.Checked;
+    }
+
+    private void ubEnabledCheckBox_CheckedChanged(object sender, EventArgs e) {
+      IntBoundedConstraint.UpperBoundEnabled = ubEnabledCheckBox.Checked;
+      ubTextBox.Enabled = ubEnabledCheckBox.Checked;
+      ubIncludedCheckBox.Enabled = ubEnabledCheckBox.Checked;
+    }
+
+    private void lbIncludedCheckBox_CheckedChanged(object sender, EventArgs e) {
+      IntBoundedConstraint.LowerBoundIncluded = lbIncludedCheckBox.Checked;
+    }
+
+    private void ubIncludedCheckBox_CheckedChanged(object sender, EventArgs e) {
+      IntBoundedConstraint.UpperBoundIncluded = ubIncludedCheckBox.Checked;
+    }
+
+    private void lbTextBox_Validating(object sender, CancelEventArgs e) {
+      int result;
+      if (!int.TryParse(lbTextBox.Text, out result)) {
+        e.Cancel = true;
+      }
+    }
+
+    private void lbTextBox_Validated(object sender, EventArgs e) {
+      IntBoundedConstraint.LowerBound = int.Parse(lbTextBox.Text);
+    }
+
+    private void ubTextBox_Validating(object sender, CancelEventArgs e) {
+      int result;
+      if (!int.TryParse(ubTextBox.Text, out result)) {
+        e.Cancel = true;
+      }
+    }
+
+    private void ubTextBox_Validated(object sender, EventArgs e) {
+      IntBoundedConstraint.UpperBound = int.Parse(ubTextBox.Text);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IntBoundedConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IsIntegerConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IsIntegerConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/IsIntegerConstraint.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint that allows only integer values.
+  /// </summary>
+  public class IsIntegerConstraint : ConstraintBase{
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Allows only integer values."; }
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="item">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem item) {
+      // ConstrainedIntData is always integer => just return true
+      if(item is ConstrainedIntData)
+        return true;
+
+      // if we have an item of ConstrainedDoubleData then we check if it is integer or not
+      if(item is ConstrainedDoubleData) {
+        ConstrainedDoubleData d = (ConstrainedDoubleData)item;
+        if(d.Data == Math.Truncate(d.Data)) {
+          return true;
+        } else {
+          return false;
+        }
+      }
+
+      // assume that all other data types are never integer
+      return false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraint.cs	(revision 1270)
@@ -0,0 +1,142 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint that limits the type of a given item.
+  /// </summary>
+  /// <remarks>If the item is a <see cref="ConstrainedItemList"/>, any containing elements are limited to 
+  /// the type and not the <see cref="ConstrainedItemList"/> itself.</remarks>
+  public class ItemTypeConstraint : ConstraintBase {
+    private Type type;
+    /// <summary>
+    /// Gets or sets the type to which the items should be limited.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ConstraintBase"/>
+    /// in the setter.</remarks>
+    public Type Type {
+      get { return type; }
+      set {
+        type = value;
+        OnChanged();
+      }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"The ItemTypeConstraint limits the type of a given item.
+If the item is a ConstrainedItemList, any containing elements are limited to the type and not the ConstrainedItemList itself.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemTypeConstraint"/> with the <c>Type</c> property
+    /// set to <see cref="ItemBase"/> as default.
+    /// </summary>
+    public ItemTypeConstraint() {
+      type = typeof(ItemBase);
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemTypeConstraint"/> with the given <paramref name="type"/>.
+    /// </summary>
+    /// <param name="type">The type the items should be limited to.</param>
+    public ItemTypeConstraint(Type type) {
+      this.type = type;
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      ConstrainedItemList list = (data as ConstrainedItemList);
+      if (list != null) {
+        for (int i = 0; i < list.Count; i++)
+          if (!list[i].GetType().Equals(type)) return false;
+        return true;
+      }
+      return data.GetType().Equals(type);
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ItemTypeConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="ItemTypeConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new ItemTypeConstraintView(this);
+    }
+
+    #region clone & persistence
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="ItemTypeConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ItemTypeConstraint clone = new ItemTypeConstraint(type);
+      clonedObjects.Add(Guid, clone);
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The type of the current instance is saved as attribute with tag name <c>ItemType</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute itemTypeAttribute = document.CreateAttribute("ItemType");
+      itemTypeAttribute.Value = PersistenceManager.BuildTypeString(Type);
+      node.Attributes.Append(itemTypeAttribute);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlAttribute itemTypeAttribute = node.Attributes["ItemType"];
+      type = Type.GetType(itemTypeAttribute.Value);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,98 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class ItemTypeConstraintView {
+    /// <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.typeTextBox = new System.Windows.Forms.TextBox();
+      this.setButton = new System.Windows.Forms.Button();
+      this.typeLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // typeTextBox
+      // 
+      this.typeTextBox.Location = new System.Drawing.Point(45, 3);
+      this.typeTextBox.Name = "typeTextBox";
+      this.typeTextBox.Size = new System.Drawing.Size(189, 20);
+      this.typeTextBox.TabIndex = 0;
+      // 
+      // setButton
+      // 
+      this.setButton.Location = new System.Drawing.Point(240, 1);
+      this.setButton.Name = "setButton";
+      this.setButton.Size = new System.Drawing.Size(44, 23);
+      this.setButton.TabIndex = 1;
+      this.setButton.Text = "Set";
+      this.setButton.UseVisualStyleBackColor = true;
+      this.setButton.Click += new System.EventHandler(this.setButton_Click);
+      // 
+      // typeLabel
+      // 
+      this.typeLabel.AutoSize = true;
+      this.typeLabel.Location = new System.Drawing.Point(5, 6);
+      this.typeLabel.Name = "typeLabel";
+      this.typeLabel.Size = new System.Drawing.Size(34, 13);
+      this.typeLabel.TabIndex = 2;
+      this.typeLabel.Text = "Type:";
+      // 
+      // ItemTypeConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.typeLabel);
+      this.Controls.Add(this.setButton);
+      this.Controls.Add(this.typeTextBox);
+      this.Name = "ItemTypeConstraintView";
+      this.Size = new System.Drawing.Size(287, 26);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox typeTextBox;
+    private System.Windows.Forms.Button setButton;
+    private System.Windows.Forms.Label typeLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.cs	(revision 1270)
@@ -0,0 +1,112 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// The visual representation of an <see cref="ItemTypeConstraint"/>.
+  /// </summary>
+  public partial class ItemTypeConstraintView : ViewBase {
+    /// <summary>
+    /// Gets or sets the ItemTypeConstraint to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    private ItemTypeConstraint ItemTypeConstraint {
+      get { return (ItemTypeConstraint)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemTypeConstraintView"/>.
+    /// </summary>
+    public ItemTypeConstraintView() {
+      InitializeComponent();
+      typeTextBox.Enabled = false;
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemTypeConstraintView"/> with the given 
+    /// <paramref name="itemTypeConstraint"/> to display.
+    /// </summary>
+    /// <param name="itemTypeConstraint">The constraint to represent visually.</param>
+    public ItemTypeConstraintView(ItemTypeConstraint itemTypeConstraint)
+      : this() {
+      ItemTypeConstraint = itemTypeConstraint;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="ItemTypeConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ItemTypeConstraint.Changed -= new EventHandler(ItemTypeConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="ItemTypeConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ItemTypeConstraint.Changed += new EventHandler(ItemTypeConstraint_Changed);
+    }
+
+    void ItemTypeConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ItemTypeConstraint == null) {
+        setButton.Enabled = false;
+      } else {
+        typeTextBox.Text = ItemTypeConstraint.Type.ToString();
+        setButton.Enabled = true;
+      }
+    }
+
+    private void setButton_Click(object sender, EventArgs e) {
+      using (ChooseTypeDialog dialog = new ChooseTypeDialog()) {
+        dialog.Caption = "Set Item Type";
+        if (dialog.ShowDialog(this) == DialogResult.OK) {
+          ItemTypeConstraint.Type = dialog.Type;
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/ItemTypeConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraint.cs	(revision 1270)
@@ -0,0 +1,127 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where its sub-constraint must be false to be true.
+  /// </summary>
+  public class NotConstraint : ConstraintBase {
+    private ConstraintBase subConstraint;
+    /// <summary>
+    /// Gets or sets the sub-constraint.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class 
+    /// <see cref="ConstraintBase"/> in the setter.</remarks>
+    public ConstraintBase SubConstraint {
+      get { return subConstraint; }
+      set {
+        subConstraint = value;
+        OnChanged();
+      }
+    }
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return "Requires that a constraint must be false to be true";
+      }
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="NotConstraint"/>.
+    /// </summary>
+    public NotConstraint()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      return (subConstraint == null) || (!subConstraint.Check(data));
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="NotConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="NotConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new NotConstraintView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="NotConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      NotConstraint clone = new NotConstraint();
+      clonedObjects.Add(Guid, clone);
+      if (subConstraint != null)
+        clone.SubConstraint = (ConstraintBase)SubConstraint.Clone();
+      return clone;
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The sub-constraint is saved as a child node with tag name 
+    /// <c>SubConstraint</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      if (subConstraint != null) {
+        XmlNode sub = PersistenceManager.Persist("SubConstraint", SubConstraint, document, persistedObjects);
+        node.AppendChild(sub);
+      }
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode subNode =  node.SelectSingleNode("SubConstraint");
+      if(subNode!=null) 
+        subConstraint = (ConstraintBase)PersistenceManager.Restore(subNode, restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class NotConstraintView {
+    /// <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.subConstraintViewBase = new HeuristicLab.Core.ViewBase();
+      this.subConstraintComboBox = new System.Windows.Forms.ComboBox();
+      this.SuspendLayout();
+      // 
+      // subConstraintViewBase
+      // 
+      this.subConstraintViewBase.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.subConstraintViewBase.Caption = "View";
+      this.subConstraintViewBase.Location = new System.Drawing.Point(0, 30);
+      this.subConstraintViewBase.Name = "subConstraintViewBase";
+      this.subConstraintViewBase.Size = new System.Drawing.Size(260, 206);
+      this.subConstraintViewBase.TabIndex = 0;
+      // 
+      // subConstraintComboBox
+      // 
+      this.subConstraintComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.subConstraintComboBox.FormattingEnabled = true;
+      this.subConstraintComboBox.Location = new System.Drawing.Point(0, 3);
+      this.subConstraintComboBox.Name = "subConstraintComboBox";
+      this.subConstraintComboBox.Size = new System.Drawing.Size(260, 21);
+      this.subConstraintComboBox.TabIndex = 1;
+      this.subConstraintComboBox.SelectedIndexChanged += new System.EventHandler(this.subConstraintComboBox_SelectedIndexChanged);
+      // 
+      // NotConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.subConstraintComboBox);
+      this.Controls.Add(this.subConstraintViewBase);
+      this.Name = "NotConstraintView";
+      this.Size = new System.Drawing.Size(263, 239);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Core.ViewBase subConstraintViewBase;
+    private System.Windows.Forms.ComboBox subConstraintComboBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.cs	(revision 1270)
@@ -0,0 +1,152 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Visual representation of a <see cref="NotConstraint"/>.
+  /// </summary>
+  public partial class NotConstraintView : ViewBase {
+    private Type[] itemTypes;
+
+    /// <summary>
+    /// Gets or sets the NotConstraint to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.<br/>
+    /// Calls <see cref="ViewBase.Refresh"/> in the setter.</remarks>
+    public NotConstraint NotConstraint {
+      get { return (NotConstraint)Item; }
+      set {
+        base.Item = value;
+        UpdateSubConstraintComboBox();
+        Refresh();
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NotConstraintView"/>.
+    /// </summary>
+    public NotConstraintView() {
+      InitializeComponent();
+      DiscoveryService discoveryService = new DiscoveryService();
+      itemTypes = discoveryService.GetTypes(typeof(ConstraintBase));
+      for (int i = 0; i < itemTypes.Length; i++) {
+        subConstraintComboBox.Items.Add(itemTypes[i].Name);
+      }
+      subConstraintComboBox.SelectedIndex = 0;
+      subConstraintComboBox.Enabled = false;
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NotConstraintView"/> with the given
+    /// <paramref name="notConstraint"/> to display.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.Refresh"/> in the setter.</remarks>
+    /// <param name="notConstraint">The constraint to represent visually.</param>
+    public NotConstraintView(NotConstraint notConstraint)
+      : this() {
+      NotConstraint = notConstraint;
+      UpdateSubConstraintComboBox();
+      Refresh();
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="NotConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      NotConstraint.Changed -= new EventHandler(NotConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="NotConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      NotConstraint.Changed += new EventHandler(NotConstraint_Changed);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (NotConstraint == null) {
+        subConstraintComboBox.Enabled = false;
+        subConstraintViewBase.Enabled = false;
+      } else {
+        if (subConstraintViewBase != null && Controls.Contains(subConstraintViewBase)) {
+          Controls.Remove(subConstraintViewBase);
+          subConstraintViewBase.Dispose();
+        }
+        subConstraintViewBase = (ViewBase)NotConstraint.SubConstraint.CreateView();
+        if (subConstraintViewBase != null) {
+          subConstraintViewBase.Anchor = (AnchorStyles)(AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right);
+          subConstraintViewBase.Location = new Point(0, 30);
+          subConstraintViewBase.Name = "subConstraintViewBase";
+          subConstraintViewBase.Size = new Size(Width, Height - 30);
+          Controls.Add(subConstraintViewBase);
+        }
+        subConstraintComboBox.Enabled = true;
+        subConstraintViewBase.Enabled = true;
+      }
+    }
+
+    private void subConstraintComboBox_SelectedIndexChanged(object sender, EventArgs e) {
+      if (NotConstraint != null) {
+        try {
+          NotConstraint.SubConstraint = (ConstraintBase)Activator.CreateInstance(itemTypes[subConstraintComboBox.SelectedIndex]);
+        } catch (Exception) {
+          NotConstraint.SubConstraint = null;
+        }
+      }
+    }
+
+    private void NotConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+      UpdateSubConstraintComboBox();
+    }
+
+
+    private void UpdateSubConstraintComboBox() {
+      subConstraintComboBox.SelectedIndexChanged -= new EventHandler(subConstraintComboBox_SelectedIndexChanged);
+      for (int i = 0 ; i < itemTypes.Length ; i++)
+        if (itemTypes[i].Name.Equals(NotConstraint.SubConstraint.GetType().Name))
+          subConstraintComboBox.SelectedIndex = i;
+      subConstraintComboBox.SelectedIndexChanged += new EventHandler(subConstraintComboBox_SelectedIndexChanged);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NotConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraint.cs	(revision 1270)
@@ -0,0 +1,145 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Data;
+using System.Xml;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where the number of sub-operators must be within a specific range.
+  /// </summary>
+  public class NumberOfSubOperatorsConstraint : ConstraintBase {
+    private IntData minOperators;
+    private IntData maxOperators;
+
+    /// <summary>
+    /// Gets the maximum number of sub-operators.
+    /// </summary>
+    public IntData MaxOperators {
+      get { return maxOperators; }
+    }
+
+    /// <summary>
+    /// Gets the minimum number of sub-operators.
+    /// </summary>
+    public IntData MinOperators {
+      get { return minOperators; }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Number of sub-operators has to be between " + MinOperators.ToString() + " and " + MaxOperators.ToString() + "."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NumberOfSubOperatorsConstraint"/>.
+    /// </summary>
+    public NumberOfSubOperatorsConstraint()
+      : this(0,0) {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NumberOfSubOperatorsConstraint"/> with the minimum and 
+    /// the maximum number of sub-operators.
+    /// </summary>
+    /// <param name="min">The minimum number of sub-operators.</param>
+    /// <param name="max">The maximum number of sub-operators.</param>
+    public NumberOfSubOperatorsConstraint(int min, int max) : base() {
+      minOperators = new IntData(min);
+      maxOperators = new IntData(max);
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      IOperator op = data as IOperator;
+      if (data == null) return false;
+
+      return (op.SubOperators.Count >= minOperators.Data && op.SubOperators.Count <= maxOperators.Data);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="AndConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      NumberOfSubOperatorsConstraint clone = new NumberOfSubOperatorsConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.maxOperators.Data = maxOperators.Data;
+      clone.minOperators.Data = minOperators.Data;
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="NumberOfSubOperatorsConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="NumberOfSubOperatorsConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new NumberOfSubOperatorsConstraintView(this);
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The minimum and the maximum number of sub-operators are saved as child nodes with tag
+    /// names <c>min</c> and <c>max</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode minNode = PersistenceManager.Persist("min", minOperators, document, persistedObjects);
+      XmlNode maxNode = PersistenceManager.Persist("max", maxOperators, document, persistedObjects);
+      node.AppendChild(minNode);
+      node.AppendChild(maxNode);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      minOperators = (IntData)PersistenceManager.Restore(node.SelectSingleNode("min"), restoredObjects);
+      maxOperators = (IntData)PersistenceManager.Restore(node.SelectSingleNode("max"), restoredObjects);
+    }
+    #endregion persistence
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,111 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class NumberOfSubOperatorsConstraintView {
+    /// <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.minDataView = new HeuristicLab.Data.IntDataView();
+      this.maxDataView = new HeuristicLab.Data.IntDataView();
+      this.minLabel = new System.Windows.Forms.Label();
+      this.maxLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // minDataView
+      // 
+      this.minDataView.Caption = "View";
+      this.minDataView.IntData = null;
+      this.minDataView.Location = new System.Drawing.Point(36, 3);
+      this.minDataView.Name = "minDataView";
+      this.minDataView.Size = new System.Drawing.Size(265, 26);
+      this.minDataView.TabIndex = 0;
+      // 
+      // maxDataView
+      // 
+      this.maxDataView.Caption = "View";
+      this.maxDataView.IntData = null;
+      this.maxDataView.Location = new System.Drawing.Point(36, 32);
+      this.maxDataView.Name = "maxDataView";
+      this.maxDataView.Size = new System.Drawing.Size(265, 26);
+      this.maxDataView.TabIndex = 1;
+      // 
+      // minLabel
+      // 
+      this.minLabel.AutoSize = true;
+      this.minLabel.Location = new System.Drawing.Point(3, 3);
+      this.minLabel.Name = "minLabel";
+      this.minLabel.Size = new System.Drawing.Size(27, 13);
+      this.minLabel.TabIndex = 2;
+      this.minLabel.Text = "Min:";
+      // 
+      // maxLabel
+      // 
+      this.maxLabel.AutoSize = true;
+      this.maxLabel.Location = new System.Drawing.Point(3, 32);
+      this.maxLabel.Name = "maxLabel";
+      this.maxLabel.Size = new System.Drawing.Size(30, 13);
+      this.maxLabel.TabIndex = 3;
+      this.maxLabel.Text = "Max:";
+      // 
+      // NumberOfSubOperatorsConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.maxLabel);
+      this.Controls.Add(this.minLabel);
+      this.Controls.Add(this.maxDataView);
+      this.Controls.Add(this.minDataView);
+      this.Name = "NumberOfSubOperatorsConstraintView";
+      this.Size = new System.Drawing.Size(306, 61);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.IntDataView minDataView;
+    private HeuristicLab.Data.IntDataView maxDataView;
+    private System.Windows.Forms.Label minLabel;
+    private System.Windows.Forms.Label maxLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.cs	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Visual representation of a <see cref="NumberOfSubOperatorsConstraint"/>.
+  /// </summary>
+  public partial class NumberOfSubOperatorsConstraintView : ViewBase {
+    private NumberOfSubOperatorsConstraint constraint;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NumberOfSubOperatorsConstraintView"/>.
+    /// </summary>
+    public NumberOfSubOperatorsConstraintView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NumberOfSubOperatorsConstraintView"/>
+    /// with the given <paramref name="constraint"/> to display.
+    /// </summary>
+    /// <param name="constraint">The constraint to represent visually.</param>
+    public NumberOfSubOperatorsConstraintView(NumberOfSubOperatorsConstraint constraint) {
+      InitializeComponent();
+      this.constraint = constraint;
+
+      minDataView.IntData = constraint.MinOperators;
+      maxDataView.IntData = constraint.MaxOperators;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/NumberOfSubOperatorsConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraint.cs	(revision 1270)
@@ -0,0 +1,132 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where at least one sub-constraint must be true.
+  /// </summary>
+  public class OrConstraint : ConstraintBase, IViewable {
+    private ItemList<IConstraint> clauses;
+    /// <summary>
+    /// Gets or sets the sub-constraints.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class 
+    /// <see cref="ConstraintBase"/> in the setter.</remarks>
+    public ItemList<IConstraint> Clauses {
+      get { return clauses; }
+      set {
+        clauses = value;
+        OnChanged();
+      }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return "To return true, at least one subconstraint has to be true";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OrConstraint"/>.
+    /// </summary>
+    public OrConstraint() {
+      clauses = new ItemList<IConstraint>();
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      bool result = false;
+      for (int i = 0 ; i < clauses.Count ; i++) {
+        result = clauses[i].Check(data);
+        if (result) return true;
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="OrConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="OrConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new OrConstraintView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="OrConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OrConstraint clone = new OrConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.Clauses = (ItemList<IConstraint>)Auxiliary.Clone(Clauses, clonedObjects);
+      return clone;
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The sub-constraints are saved as a child node with tag name 
+    /// <c>Clauses</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode clausesNode = PersistenceManager.Persist("Clauses", Clauses, document, persistedObjects);
+      node.AppendChild(clausesNode);
+
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      clauses = (ItemList<IConstraint>)PersistenceManager.Restore(node.SelectSingleNode("Clauses"), restoredObjects);
+    }
+    #endregion persistence
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class OrConstraintView {
+    /// <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();
+      }
+      if (OrConstraint != null) OrConstraint.Changed -= new System.EventHandler(OrConstraint_Changed);
+      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.clausesItemListView = new HeuristicLab.Data.ItemListView<HeuristicLab.Core.IConstraint>();
+      this.SuspendLayout();
+      // 
+      // clausesItemListView
+      // 
+      this.clausesItemListView.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.clausesItemListView.Caption = "View";
+      this.clausesItemListView.Location = new System.Drawing.Point(0, 0);
+      this.clausesItemListView.Name = "clausesItemListView";
+      this.clausesItemListView.Size = new System.Drawing.Size(475, 284);
+      this.clausesItemListView.TabIndex = 0;
+      // 
+      // OrConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.clausesItemListView);
+      this.Name = "OrConstraintView";
+      this.Size = new System.Drawing.Size(478, 292);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.ItemListView<HeuristicLab.Core.IConstraint> clausesItemListView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.cs	(revision 1270)
@@ -0,0 +1,94 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Visual representation of an <see cref="OrConstraint"/>.
+  /// </summary>
+  public partial class OrConstraintView : ViewBase {
+    private OrConstraint OrConstraint {
+      get { return (OrConstraint)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OrConstraintView"/>.
+    /// </summary>
+    public OrConstraintView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OrConstraintView"/> with the given
+    /// <paramref name="orConstraint"/> to display.
+    /// </summary>
+    /// <param name="orConstraint">The constraint to represent visually.</param>
+    public OrConstraintView(OrConstraint orConstraint)
+      : this() {
+      OrConstraint = orConstraint;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="OrConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      OrConstraint.Changed -= new EventHandler(OrConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="OrConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      OrConstraint.Changed += new EventHandler(OrConstraint_Changed);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>    
+    protected override void UpdateControls() {
+      if (OrConstraint == null) {
+        clausesItemListView.Enabled = false;
+        clausesItemListView.ItemList = null;
+      } else {
+        clausesItemListView.ItemList = OrConstraint.Clauses;
+        clausesItemListView.Enabled = true;
+      }
+    }
+
+    private void OrConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/OrConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Constraints")]
+[assembly: AssemblyDescription("Classes of the HeuristicLab constraints framework")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("97a3c082-71d3-429a-8cb0-91d85949b240")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsConstraintAnalyser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsConstraintAnalyser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsConstraintAnalyser.cs	(revision 1270)
@@ -0,0 +1,186 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Constraints;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Analyzes the sub-operators for specific constraints.
+  /// </summary>
+  public class SubOperatorsConstraintAnalyser {
+    private ICollection<IOperator> allPossibleOperators;
+
+    /// <summary>
+    /// Gets or sets all possible operators. 
+    /// </summary>
+    public ICollection<IOperator> AllPossibleOperators {
+      get { return allPossibleOperators; }
+      set { allPossibleOperators = value; }
+    }
+    
+    /// <summary>
+    /// Gets all operators that fulfill the expression of the constraints of the given operator. 
+    /// </summary>
+    /// <param name="op">The operator whose constraints to check.</param>
+    /// <param name="childIndex">The index of the child.</param>
+    /// <returns>All allowed operators.</returns>
+    public IList<IOperator> GetAllowedOperators(IOperator op, int childIndex) {
+      AndConstraint andConstraint = new AndConstraint();
+      foreach (IConstraint constraint in op.Constraints) {
+        andConstraint.Clauses.Add(constraint);
+      }
+
+      return GetAllowedOperators(andConstraint, childIndex);
+    }
+
+    private IList<IOperator> GetAllowedOperators(IConstraint constraint, int childIndex) {
+      // manual dispatch on dynamic type
+      if (constraint is AndConstraint)
+        return GetAllowedOperators((AndConstraint)constraint, childIndex);
+      else if (constraint is OrConstraint)
+        return GetAllowedOperators((OrConstraint)constraint, childIndex);
+      else if (constraint is NotConstraint)
+        return GetAllowedOperators((NotConstraint)constraint, childIndex);
+      else if (constraint is AllSubOperatorsTypeConstraint)
+        return GetAllowedOperators((AllSubOperatorsTypeConstraint)constraint, childIndex);
+      else if (constraint is SubOperatorTypeConstraint)
+        return GetAllowedOperators((SubOperatorTypeConstraint)constraint, childIndex);
+      else return new List<IOperator>(allPossibleOperators); // ignore all other constraints
+    }
+
+    #region static set management methods
+    // better to use HashSets from .NET 3.5
+    // however we would need to switch the whole Constraints project to .NET 3.5 for that
+    private static IList<IOperator> Intersect(ICollection<IOperator> a, ICollection<IOperator> b) {
+      if (a.Count > b.Count) {
+        return Intersect(b, a);
+      }
+
+      List<IOperator> intersection = new List<IOperator>(a.Count);
+
+      foreach (IOperator element in a) {
+        if (InSet(element, b)) {
+          intersection.Add(element);
+        }
+      }
+      return intersection;
+    }
+
+    private static IList<IOperator> Union(ICollection<IOperator> a, ICollection<IOperator> b) {
+      List<IOperator> union = new List<IOperator>(a);
+      foreach (IOperator candidateElement in b) {
+        if (!InSet(candidateElement, union)) {
+          union.Add(candidateElement);
+        }
+      }
+
+      return union;
+    }
+
+    private static IList<IOperator> Substract(ICollection<IOperator> minuend, ICollection<IOperator> subtrahend) {
+      List<IOperator> difference = new List<IOperator>();
+      foreach (IOperator element in minuend) {
+        if (!InSet(element, subtrahend)) {
+          difference.Add(element);
+        }
+      }
+
+      return difference;
+    }
+
+    private static bool InSet(IOperator op, ICollection<IOperator> set) {
+      foreach (IOperator element in set) {
+        if (element == op)
+          return true;
+      }
+      return false;
+    }
+    #endregion
+
+    /// <summary>
+    /// Gets all allowed operators that fulfill the expression of the given <c>AndConstraint</c>.
+    /// </summary>
+    /// <param name="constraint">The constraint that must be fulfilled.</param>
+    /// <param name="childIndex">The index of the child.</param>
+    /// <returns>All allowed operators.</returns>
+    public IList<IOperator> GetAllowedOperators(AndConstraint constraint, int childIndex) {
+      IList<IOperator> allowedOperators = new List<IOperator>(allPossibleOperators);
+      // keep only the intersection of all subconstraints
+      foreach (ConstraintBase clause in constraint.Clauses) {
+        allowedOperators = Intersect(allowedOperators, GetAllowedOperators(clause, childIndex));
+      }
+      return allowedOperators;
+    }
+
+    /// <summary>
+    /// Gets all allowed operators that fulfill the expression of the given <c>OrConstraint</c>.
+    /// </summary>
+    /// <param name="constraint">The constraint that must be fulfilled.</param>
+    /// <param name="childIndex">The index of the child.</param>
+    /// <returns>All allowed operators.</returns>
+    public IList<IOperator> GetAllowedOperators(OrConstraint constraint, int childIndex) {
+      IList<IOperator> allowedOperators = new List<IOperator>();
+      foreach (ConstraintBase clause in constraint.Clauses) {
+        allowedOperators = Union(allowedOperators, GetAllowedOperators(clause, childIndex));
+      }
+      return allowedOperators;
+    }
+
+    /// <summary>
+    /// Gets all allowed operators that fulfill the expression of the given <c>NotConstraint</c>.
+    /// </summary>
+    /// <param name="constraint">The constraint that must be fulfilled.</param>
+    /// <param name="childIndex">The index of the child.</param>
+    /// <returns>All allowed operators.</returns>
+    public IList<IOperator> GetAllowedOperators(NotConstraint constraint, int childIndex) {
+      return Substract(allPossibleOperators, GetAllowedOperators(constraint.SubConstraint, childIndex));
+    }
+
+    /// <summary>
+    /// Gets all allowed operators that fulfill the expression of the given <c>AllSubOperatorsTypeConstraint</c>.
+    /// </summary>
+    /// <param name="constraint">The constraint that must be fulfilled.</param>
+    /// <param name="childIndex">The index of the child.</param>
+    /// <returns>All allowed operators.</returns>
+    public IList<IOperator> GetAllowedOperators(AllSubOperatorsTypeConstraint constraint, int childIndex) {
+      return Intersect(allPossibleOperators, constraint.AllowedSubOperators);
+    }
+
+    /// <summary>
+    /// Gets all allowed operators that fulfill the expression of the given <c>SubOperatorTypeConstraint</c>.
+    /// </summary>
+    /// <param name="constraint">The constraint that must be fulfilled.</param>
+    /// <param name="childIndex">The index of the child.</param>
+    /// <returns>All allowed operators.</returns>
+    public IList<IOperator> GetAllowedOperators(SubOperatorTypeConstraint constraint, int childIndex) {
+      if (childIndex != constraint.SubOperatorIndex.Data) {
+        return new List<IOperator>(allPossibleOperators);
+      } else {
+        return Intersect(allPossibleOperators, constraint.AllowedSubOperators);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraint.cs	(revision 1270)
@@ -0,0 +1,191 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Diagnostics;
+using System.Xml;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint where the sub-operator at a specific index has to be an element of a pre-defined group.
+  /// </summary>
+  public class SubOperatorTypeConstraint : ConstraintBase {
+    private IntData subOperatorIndex;
+    /// <summary>
+    /// Gets the index of the sub-operator.
+    /// </summary>
+    public IntData SubOperatorIndex {
+      get { return subOperatorIndex; }
+    }
+
+    private List<IOperator> subOperators;
+    /// <summary>
+    /// Gets all allowed sub-operators.
+    /// </summary>
+    public IList<IOperator> AllowedSubOperators {
+      get {
+        return subOperators.AsReadOnly();
+      }
+    }
+
+    ///<inheritdoc select="summary"/>
+    public override string Description {
+      get { return "The sub-operator at a specific index has to be an element of a pre-defined group."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubOperatorTypeConstraint"/>.
+    /// </summary>
+    public SubOperatorTypeConstraint()
+      : base() {
+      subOperatorIndex = new IntData(0);
+      subOperators = new List<IOperator>();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubOperatorTypeConstraint"/> with the given
+    /// <paramref name="index"/>.
+    /// </summary>
+    /// <param name="index">The index of the sub-operator.</param>
+    public SubOperatorTypeConstraint(int index) : base() {
+      subOperatorIndex = new IntData(index);
+      subOperators = new List<IOperator>();
+    }
+
+    /// <summary>
+    /// Adds the given operator to the list of sub-operators.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.FireChanged"/> of base class <see cref="ConstraintBase"/>.</remarks>
+    /// <param name="op">The operator to add.</param>
+    public void AddOperator(IOperator op) {
+      if(!subOperators.Contains(op)) {
+        subOperators.Add(op);
+        FireChanged();
+      }
+    }
+
+    /// <summary>
+    /// Removes the given operator from the list of sub-operators.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.FireChanged"/> of base class <see cref="ConstraintBase"/>.</remarks>
+    /// <param name="op">The operator to remove.</param>
+    public void RemoveOperator(IOperator op) {
+      if(subOperators.Contains(op)) {
+        subOperators.Remove(op);
+        FireChanged();
+      }
+    }
+
+    /// <summary>
+    /// Empties the list of sub-operators.
+    /// </summary>
+    public void Clear() {
+      subOperators.Clear();
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      IOperator op = data as IOperator;
+      if(data == null) return false;
+
+      if(op.SubOperators.Count <= subOperatorIndex.Data) {
+        return false;
+      }
+      return subOperators.Contains(op.SubOperators[subOperatorIndex.Data]);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="SubOperatorTypeConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SubOperatorTypeConstraint clone = new SubOperatorTypeConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.subOperatorIndex.Data = subOperatorIndex.Data;
+      foreach(IOperator op in subOperators) {
+        clone.AddOperator((IOperator)Auxiliary.Clone(op, clonedObjects));
+      }
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="SubOperatorsTypeConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="SubOperatorsTypeConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new SubOperatorsTypeConstraintView(this);
+    }
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The index and the list of sub-operators are saved as child nodes with tag names 
+    /// <c>SubOperatorIndex</c> and <c>AllowedSubOperators</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode indexNode = PersistenceManager.Persist("SubOperatorIndex", subOperatorIndex, document, persistedObjects);
+      node.AppendChild(indexNode);
+      XmlNode listNode = document.CreateNode(XmlNodeType.Element, "AllowedSubOperators", document.NamespaceURI);
+      foreach(IOperator op in subOperators) {
+        XmlNode opNode = PersistenceManager.Persist(op, document, persistedObjects);
+        listNode.AppendChild(opNode);
+      }
+      node.AppendChild(listNode);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      subOperatorIndex = (IntData)PersistenceManager.Restore(node.SelectSingleNode("SubOperatorIndex"), restoredObjects);
+      subOperators = new List<IOperator>();
+      foreach(XmlNode childNode in node.SelectSingleNode("AllowedSubOperators").ChildNodes) {
+        subOperators.Add((IOperator)PersistenceManager.Restore(childNode, restoredObjects));
+      }
+    }
+    #endregion persistence
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,101 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class SubOperatorsTypeConstraintView {
+    /// <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.indexDataView = new HeuristicLab.Data.IntDataView();
+      this.indexLabel = new System.Windows.Forms.Label();
+      this.allSubOperatorsTypeConstraintView = new HeuristicLab.Constraints.AllSubOperatorsTypeConstraintView();
+      this.SuspendLayout();
+      // 
+      // indexDataView
+      // 
+      this.indexDataView.Caption = "View";
+      this.indexDataView.IntData = null;
+      this.indexDataView.Location = new System.Drawing.Point(109, 3);
+      this.indexDataView.Name = "indexDataView";
+      this.indexDataView.Size = new System.Drawing.Size(265, 26);
+      this.indexDataView.TabIndex = 1;
+      // 
+      // indexLabel
+      // 
+      this.indexLabel.AutoSize = true;
+      this.indexLabel.Location = new System.Drawing.Point(4, 4);
+      this.indexLabel.Name = "indexLabel";
+      this.indexLabel.Size = new System.Drawing.Size(99, 13);
+      this.indexLabel.TabIndex = 2;
+      this.indexLabel.Text = "Sub-operator index:";
+      // 
+      // allSubOperatorsTypeConstraintView
+      // 
+      this.allSubOperatorsTypeConstraintView.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.allSubOperatorsTypeConstraintView.Caption = "View";
+      this.allSubOperatorsTypeConstraintView.Location = new System.Drawing.Point(0, 35);
+      this.allSubOperatorsTypeConstraintView.Name = "allSubOperatorsTypeConstraintView";
+      this.allSubOperatorsTypeConstraintView.Size = new System.Drawing.Size(492, 337);
+      this.allSubOperatorsTypeConstraintView.TabIndex = 3;
+      // 
+      // SubOperatorsTypeConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.allSubOperatorsTypeConstraintView);
+      this.Controls.Add(this.indexLabel);
+      this.Controls.Add(this.indexDataView);
+      this.Name = "SubOperatorsTypeConstraintView";
+      this.Size = new System.Drawing.Size(496, 377);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Data.IntDataView indexDataView;
+    private System.Windows.Forms.Label indexLabel;
+    private AllSubOperatorsTypeConstraintView allSubOperatorsTypeConstraintView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.cs	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// The visual representation of a <see cref="SubOperatorTypeConstraint"/>.
+  /// </summary>
+  public partial class SubOperatorsTypeConstraintView : ViewBase {
+    private SubOperatorTypeConstraint constraint;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubOperatorsTypeConstraintView"/>.
+    /// </summary>
+    public SubOperatorsTypeConstraintView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubOperatorTypeConstraint"/> with the given
+    /// <paramref name="constraint"/> to display.
+    /// </summary>
+    /// <param name="constraint">The constraint to represent visually.</param>
+    public SubOperatorsTypeConstraintView(SubOperatorTypeConstraint constraint) {
+      InitializeComponent();
+
+      this.constraint = constraint;
+      allSubOperatorsTypeConstraintView.Constraint = constraint;
+      indexDataView.IntData = constraint.SubOperatorIndex;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/SubOperatorsTypeConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraint.cs	(revision 1270)
@@ -0,0 +1,181 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Constraint that compares variables in a <see cref="ConstrainedItemList"/>.
+  /// </summary>
+  public class VariableComparisonConstraint : ConstraintBase {
+    private StringData leftVarName;
+    /// <summary>
+    /// Gets or sets the variable name of the left item to compare.
+    /// </summary>
+    public StringData LeftVarName {
+      get { return leftVarName; }
+      set { leftVarName = value; }
+    }
+
+    private StringData rightVarName;
+    /// <summary>
+    /// Gets or sets the variable name of the right item to compare.
+    /// </summary>
+    public StringData RightVarName {
+      get { return rightVarName; }
+      set { rightVarName = value; }
+    }
+
+    private IntData comparer;
+    /// <summary>
+    /// Gets or sets the comparer.
+    /// </summary>
+    public IntData Comparer {
+      get { return comparer; }
+      set { comparer = value; }
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Compares variables in a ConstrainedItemList";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableComparisonConstraint"/>.
+    /// </summary>
+    public VariableComparisonConstraint() {
+      leftVarName = new StringData();
+      rightVarName = new StringData();
+      comparer = new IntData(-1);
+    }
+
+    /// <summary>
+    /// Checks whether the given element fulfills the current constraint.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the data is no <c>ConstrainedItemList</c>.</exception>
+    /// <exception cref="InvalidCastException">Thrown when the left varible is not of type <c>IComparable</c>.</exception>
+    /// <exception cref="InvalidOperationException">Thrown when the comparer is undefined.</exception>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the constraint could be fulfilled, <c>false</c> otherwise.</returns>
+    public override bool Check(IItem data) {
+      ConstrainedItemList list = (data as ConstrainedItemList);
+      if (list == null) throw new InvalidOperationException("ERROR in VariableComparisonConstraint: Can only be applied on ConstrainedItemLists");
+      IComparable left = null;
+      IItem right = null;
+      foreach (IItem item in list) {
+        Variable tmp = (item as Variable);
+        if (tmp != null && tmp.Name.Equals(leftVarName.Data)) {
+          left = (tmp.Value as IComparable);
+          if (left == null) throw new InvalidCastException("ERROR in VariableComparisonConstraint: Value of the variable on the left side needs to be of type IComparable");
+        } else if (tmp != null && tmp.Name.Equals(rightVarName.Data)) {
+          right = tmp.Value;
+        }
+      }
+      if (left != null && right != null) {
+        switch (comparer.Data) {
+          case 0:
+            return left.CompareTo(right) < 0;
+          case 1:
+            return left.CompareTo(right) <= 0;
+          case 2:
+            return left.CompareTo(right) == 0;
+          case 3:
+            return left.CompareTo(right) >= 0;
+          case 4:
+            return left.CompareTo(right) > 0;
+          default:
+            throw new InvalidOperationException("ERROR in VariableComparisonConstraint: Comparer undefined");
+        }
+      }
+      return true;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="VariableComparisonConstraintView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="VariableComparisonConstraintView"/>.</returns>
+    public override IView CreateView() {
+      return new VariableComparisonConstraintView(this);
+    }
+
+    #region clone & persistence
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="VariableComparisonConstraint"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      VariableComparisonConstraint clone = new VariableComparisonConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.LeftVarName = (StringData)Auxiliary.Clone(LeftVarName, clonedObjects);
+      clone.RightVarName = (StringData)Auxiliary.Clone(RightVarName, clonedObjects);
+      clone.Comparer = (IntData)Auxiliary.Clone(Comparer, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The variable names and the comparer are saved as child nodes with tag names
+    /// <c>LeftVarName</c>, <c>RightVarName</c> and <c>Comparer</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode leftNode = PersistenceManager.Persist("LeftVarName", LeftVarName, document, persistedObjects);
+      node.AppendChild(leftNode);
+      XmlNode rightNode = PersistenceManager.Persist("RightVarName", RightVarName, document, persistedObjects);
+      node.AppendChild(rightNode);
+      XmlNode comparerNode = PersistenceManager.Persist("Comparer", Comparer, document, persistedObjects);
+      node.AppendChild(comparerNode);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted constraint from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The constraint must be saved in a specific way, see <see cref="GetXmlNode"/> for 
+    /// more information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      leftVarName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("LeftVarName"), restoredObjects);
+      rightVarName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("RightVarName"), restoredObjects);
+      comparer = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Comparer"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,196 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Constraints {
+  partial class VariableComparisonConstraintView {
+    /// <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.label1 = new System.Windows.Forms.Label();
+      this.comparerGroupBox = new System.Windows.Forms.GroupBox();
+      this.greaterRadioButton = new System.Windows.Forms.RadioButton();
+      this.greaterOrEqualRadioButton = new System.Windows.Forms.RadioButton();
+      this.equalRadioButton = new System.Windows.Forms.RadioButton();
+      this.lessOrEqualRadioButton = new System.Windows.Forms.RadioButton();
+      this.lessRadioButton = new System.Windows.Forms.RadioButton();
+      this.label2 = new System.Windows.Forms.Label();
+      this.rightVarNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.leftVarNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.comparerGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 5);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(25, 13);
+      this.label1.TabIndex = 0;
+      this.label1.Text = "Left";
+      // 
+      // comparerGroupBox
+      // 
+      this.comparerGroupBox.Controls.Add(this.greaterRadioButton);
+      this.comparerGroupBox.Controls.Add(this.greaterOrEqualRadioButton);
+      this.comparerGroupBox.Controls.Add(this.equalRadioButton);
+      this.comparerGroupBox.Controls.Add(this.lessOrEqualRadioButton);
+      this.comparerGroupBox.Controls.Add(this.lessRadioButton);
+      this.comparerGroupBox.Location = new System.Drawing.Point(3, 54);
+      this.comparerGroupBox.Name = "comparerGroupBox";
+      this.comparerGroupBox.Size = new System.Drawing.Size(141, 137);
+      this.comparerGroupBox.TabIndex = 4;
+      this.comparerGroupBox.TabStop = false;
+      this.comparerGroupBox.Text = "Comparer";
+      // 
+      // greaterRadioButton
+      // 
+      this.greaterRadioButton.AutoSize = true;
+      this.greaterRadioButton.Location = new System.Drawing.Point(9, 111);
+      this.greaterRadioButton.Name = "greaterRadioButton";
+      this.greaterRadioButton.Size = new System.Drawing.Size(31, 17);
+      this.greaterRadioButton.TabIndex = 4;
+      this.greaterRadioButton.Text = ">";
+      this.greaterRadioButton.UseVisualStyleBackColor = true;
+      this.greaterRadioButton.CheckedChanged += new System.EventHandler(this.anyRadioButton_CheckedChanged);
+      // 
+      // greaterOrEqualRadioButton
+      // 
+      this.greaterOrEqualRadioButton.AutoSize = true;
+      this.greaterOrEqualRadioButton.Location = new System.Drawing.Point(9, 88);
+      this.greaterOrEqualRadioButton.Name = "greaterOrEqualRadioButton";
+      this.greaterOrEqualRadioButton.Size = new System.Drawing.Size(37, 17);
+      this.greaterOrEqualRadioButton.TabIndex = 3;
+      this.greaterOrEqualRadioButton.Text = ">=";
+      this.greaterOrEqualRadioButton.UseVisualStyleBackColor = true;
+      this.greaterOrEqualRadioButton.CheckedChanged += new System.EventHandler(this.anyRadioButton_CheckedChanged);
+      // 
+      // equalRadioButton
+      // 
+      this.equalRadioButton.AutoSize = true;
+      this.equalRadioButton.Location = new System.Drawing.Point(9, 65);
+      this.equalRadioButton.Name = "equalRadioButton";
+      this.equalRadioButton.Size = new System.Drawing.Size(31, 17);
+      this.equalRadioButton.TabIndex = 2;
+      this.equalRadioButton.Text = "=";
+      this.equalRadioButton.UseVisualStyleBackColor = true;
+      this.equalRadioButton.CheckedChanged += new System.EventHandler(this.anyRadioButton_CheckedChanged);
+      // 
+      // lessOrEqualRadioButton
+      // 
+      this.lessOrEqualRadioButton.AutoSize = true;
+      this.lessOrEqualRadioButton.Location = new System.Drawing.Point(9, 42);
+      this.lessOrEqualRadioButton.Name = "lessOrEqualRadioButton";
+      this.lessOrEqualRadioButton.Size = new System.Drawing.Size(37, 17);
+      this.lessOrEqualRadioButton.TabIndex = 1;
+      this.lessOrEqualRadioButton.Text = "<=";
+      this.lessOrEqualRadioButton.UseVisualStyleBackColor = true;
+      this.lessOrEqualRadioButton.CheckedChanged += new System.EventHandler(this.anyRadioButton_CheckedChanged);
+      // 
+      // lessRadioButton
+      // 
+      this.lessRadioButton.AutoSize = true;
+      this.lessRadioButton.Location = new System.Drawing.Point(9, 19);
+      this.lessRadioButton.Name = "lessRadioButton";
+      this.lessRadioButton.Size = new System.Drawing.Size(31, 17);
+      this.lessRadioButton.TabIndex = 0;
+      this.lessRadioButton.Text = "<";
+      this.lessRadioButton.UseVisualStyleBackColor = true;
+      this.lessRadioButton.CheckedChanged += new System.EventHandler(this.anyRadioButton_CheckedChanged);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(3, 31);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(32, 13);
+      this.label2.TabIndex = 2;
+      this.label2.Text = "Right";
+      // 
+      // rightVarNameStringDataView
+      // 
+      this.rightVarNameStringDataView.Caption = "View";
+      this.rightVarNameStringDataView.Location = new System.Drawing.Point(44, 28);
+      this.rightVarNameStringDataView.Name = "rightVarNameStringDataView";
+      this.rightVarNameStringDataView.Size = new System.Drawing.Size(100, 20);
+      this.rightVarNameStringDataView.StringData = null;
+      this.rightVarNameStringDataView.TabIndex = 3;
+      // 
+      // leftVarNameStringDataView
+      // 
+      this.leftVarNameStringDataView.Caption = "View";
+      this.leftVarNameStringDataView.Location = new System.Drawing.Point(44, 2);
+      this.leftVarNameStringDataView.Name = "leftVarNameStringDataView";
+      this.leftVarNameStringDataView.Size = new System.Drawing.Size(100, 20);
+      this.leftVarNameStringDataView.StringData = null;
+      this.leftVarNameStringDataView.TabIndex = 1;
+      // 
+      // VariableComparisonConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.leftVarNameStringDataView);
+      this.Controls.Add(this.rightVarNameStringDataView);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.comparerGroupBox);
+      this.Controls.Add(this.label1);
+      this.Name = "VariableComparisonConstraintView";
+      this.Size = new System.Drawing.Size(147, 193);
+      this.comparerGroupBox.ResumeLayout(false);
+      this.comparerGroupBox.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.GroupBox comparerGroupBox;
+    private System.Windows.Forms.RadioButton greaterRadioButton;
+    private System.Windows.Forms.RadioButton greaterOrEqualRadioButton;
+    private System.Windows.Forms.RadioButton equalRadioButton;
+    private System.Windows.Forms.RadioButton lessOrEqualRadioButton;
+    private System.Windows.Forms.RadioButton lessRadioButton;
+    private System.Windows.Forms.Label label2;
+    private HeuristicLab.Data.StringDataView rightVarNameStringDataView;
+    private HeuristicLab.Data.StringDataView leftVarNameStringDataView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.cs	(revision 1270)
@@ -0,0 +1,145 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Constraints {
+  /// <summary>
+  /// Visual representation of a <see cref="VariableComparisonConstraint"/>.
+  /// </summary>
+  public partial class VariableComparisonConstraintView : ViewBase {
+    /// <summary>
+    /// Gets or sets the VariableComparisonConstraint to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public VariableComparisonConstraint VariableComparisonConstraint {
+      get { return (VariableComparisonConstraint)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableComparisonConstraintView"/>.
+    /// </summary>
+    public VariableComparisonConstraintView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableComparisonConstraintView"/> with the given
+    /// <paramref name="variableComparisonConstraint"/> to display.
+    /// </summary>
+    /// <param name="variableComparisonConstraint">The constraint to represent visually.</param>
+    public VariableComparisonConstraintView(VariableComparisonConstraint variableComparisonConstraint)
+      : this() {
+      VariableComparisonConstraint = variableComparisonConstraint;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="VariableComparisonConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      VariableComparisonConstraint.Changed -= new EventHandler(VariableComparisonConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="VariableComparisonConstraint"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      VariableComparisonConstraint.Changed += new EventHandler(VariableComparisonConstraint_Changed);
+    }
+
+    void VariableComparisonConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary> 
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (VariableComparisonConstraint == null) {
+        leftVarNameStringDataView.Enabled = false;
+        leftVarNameStringDataView.StringData = null;
+        rightVarNameStringDataView.Enabled = false;
+        rightVarNameStringDataView.StringData = null;
+        comparerGroupBox.Enabled = false;
+      } else {
+        leftVarNameStringDataView.StringData = VariableComparisonConstraint.LeftVarName;
+        leftVarNameStringDataView.Enabled = true;
+        rightVarNameStringDataView.StringData = VariableComparisonConstraint.RightVarName;
+        rightVarNameStringDataView.Enabled = true;
+        comparerGroupBox.Enabled = true;
+        switch (VariableComparisonConstraint.Comparer.Data) {
+          case 0:
+            lessRadioButton.Checked = true;
+            break;
+          case 1:
+            lessOrEqualRadioButton.Checked = true;
+            break;
+          case 2:
+            equalRadioButton.Checked = true;
+            break;
+          case 3:
+            greaterOrEqualRadioButton.Checked = true;
+            break;
+          case 4:
+            greaterRadioButton.Checked = true;
+            break;
+        }
+      }
+    }
+
+    private void anyRadioButton_CheckedChanged(object sender, EventArgs e) {
+      if (VariableComparisonConstraint != null) {
+        if (((RadioButton)sender).Checked && ((RadioButton)sender).Name.StartsWith("lessOrEqual")) {
+          VariableComparisonConstraint.Comparer.Data = 1;
+        } else if (((RadioButton)sender).Checked && ((RadioButton)sender).Name.StartsWith("less")) {
+          VariableComparisonConstraint.Comparer.Data = 0;
+        } else if (((RadioButton)sender).Checked && ((RadioButton)sender).Name.StartsWith("greaterOrEqual")) {
+          VariableComparisonConstraint.Comparer.Data = 3;
+        } else if (((RadioButton)sender).Checked && ((RadioButton)sender).Name.StartsWith("greater")) {
+          VariableComparisonConstraint.Comparer.Data = 4;
+        } else if (((RadioButton)sender).Checked && ((RadioButton)sender).Name.StartsWith("equal")) {
+          VariableComparisonConstraint.Comparer.Data = 2;
+        } else if (((RadioButton)sender).Checked) {
+          Auxiliary.ShowErrorMessageBox("Unknown radio button selected: " + ((RadioButton)sender).Name.ToString());
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Constraints/VariableComparisonConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/AliasEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/AliasEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/AliasEventArgs.cs	(revision 1270)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected alias. 
+  /// </summary>
+  public class AliasEventArgs : EventArgs {
+    private string myAlias;
+    /// <summary>
+    /// Gets the affected alias.
+    /// </summary>
+    public string Alias {
+      get { return myAlias; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AliasEventArgs"/> with the given <paramref name="alias"/>.
+    /// </summary>
+    /// <param name="alias">The affected alias.</param>
+    public AliasEventArgs(string alias) {
+      myAlias = alias;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/AtomicOperation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/AtomicOperation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/AtomicOperation.cs	(revision 1270)
@@ -0,0 +1,112 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents a single operation with one operator and one scope.
+  /// </summary>
+  public class AtomicOperation : ItemBase, IOperation {
+    private IOperator myOperator;
+    /// <summary>
+    /// Gets the current operator as <see cref="IOperator"/>.
+    /// </summary>
+    public IOperator Operator {
+      get { return myOperator; }
+    }
+    private IScope myScope;  
+    /// <summary>
+    /// Gets the current scope as <see cref="IScope"/>.
+    /// </summary>
+    public IScope Scope {
+      get { return myScope; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AtomicOperation"/>.
+    /// </summary>
+    public AtomicOperation() { }
+    /// <summary>
+    /// Initializes a new instance of <see cref="AtomicOperation"/> with the given <paramref name="op"/> 
+    /// and the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="op">The operator to assign.</param>
+    /// <param name="scope">The scope to assign.</param>
+    public AtomicOperation(IOperator op, IScope scope) {
+      myOperator = op;
+      myScope = scope;
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>The operator and the scope objects are cloned with the 
+    /// <see cref="HeuristicLab.Core.Auxiliary.Clone"/> method of the <see cref="Auxiliary"/> class.</remarks>
+    /// <param name="clonedObjects">All already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="AtomicOperation"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      AtomicOperation clone = new AtomicOperation();
+      clonedObjects.Add(Guid, clone);
+      clone.myOperator = (IOperator)Auxiliary.Clone(Operator, clonedObjects);
+      clone.myScope = (IScope)Auxiliary.Clone(Scope, clonedObjects);
+      return clone;
+    }
+
+    #region Persistence Methods
+
+    /// <summary>
+    ///  Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.StorableBase.GetXmlNode"/> of base 
+    /// class <see cref="ItemBase"/>. <br/>
+    /// The operator is saved as child node having the tag name <c>Operator</c>.<br/>
+    /// The scope is also saved as a child node having the tag name <c>Scope</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Operator", Operator, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Scope", Scope, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted operation from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.StorableBase.Populate"/> of base class 
+    /// <see cref="ItemBase"/>.<br/>
+    /// The operator must be saved as a child node with the tag name <c>Operator</c>, also the scope must 
+    /// be saved as a child node having the tag name <c>Scope</c> (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the operation is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myOperator = (IOperator)PersistenceManager.Restore(node.SelectSingleNode("Operator"), restoredObjects);
+      myScope = (IScope)PersistenceManager.Restore(node.SelectSingleNode("Scope"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Auxiliary.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Auxiliary.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Auxiliary.cs	(revision 1270)
@@ -0,0 +1,130 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Static helper class.
+  /// </summary>
+  public static class Auxiliary {
+    #region Cloning
+    /// <summary>
+    /// Clones the given <paramref name="obj"/> (deep clone).
+    /// </summary>
+    /// <remarks>Checks before clone if object has not already been cloned.</remarks>
+    /// <param name="obj">The object to clone.</param>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object.</returns>
+    public static object Clone(IStorable obj, IDictionary<Guid, object> clonedObjects) {
+      object clone;
+      if (clonedObjects.TryGetValue(obj.Guid, out clone))
+        return clone;
+      else
+        return obj.Clone(clonedObjects);
+    }
+    #endregion
+
+    #region Error Messages
+    /// <summary>
+    /// Shows an error message box with a given error <paramref name="message"/> and an OK-Button.
+    /// </summary>
+    /// <param name="message">The error message to display.</param>
+    public static void ShowErrorMessageBox(string message) {
+      MessageBox.Show(message,
+                      "Error",
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+    /// <summary>
+    /// Shows an error message box with a given exception <paramref name="ex"/> and an OK-Button.
+    /// </summary>
+    /// <param name="ex">The exception to display.</param>
+    public static void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(BuildErrorMessage(ex),
+                      "Error - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+    /// <summary>
+    /// Builds an error message out of an exception and formats it accordingly.
+    /// </summary>
+    /// <param name="ex">The exception to format.</param>
+    /// <returns>The formated message.</returns>
+    private static string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while (ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+    #endregion
+
+    #region Constraint Violation Messages
+    /// <summary>
+    /// Shows a warning message box with an OK-Button, indicating that the given constraints were violated and so 
+    /// the operation could not be completed. 
+    /// </summary>
+    /// <param name="violatedConstraints">The constraints that could not be fulfilled.</param>
+    public static void ShowConstraintViolationMessageBox(ICollection<IConstraint> violatedConstraints) {
+      string message = BuildConstraintViolationMessage(violatedConstraints);
+      MessageBox.Show("The following constraints are violated. The operation could not be completed.\n\n" + message,
+                      "Constraint Violation",
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Warning);
+    }
+    /// <summary>
+    /// Shows a question message box with a yes-no option, where to choose whether to ignore 
+    /// the given violated constraints and to complete the operation or not.
+    /// </summary>
+    /// <param name="violatedConstraints">The constraints that could not be fulfilled.</param>
+    /// <returns>The result of the choice ("Yes" = 6, "No" = 7).</returns>
+    public static DialogResult ShowIgnoreConstraintViolationMessageBox(ICollection<IConstraint> violatedConstraints) {
+      string message = BuildConstraintViolationMessage(violatedConstraints);
+      return MessageBox.Show("The following constraints are violated. Do you want to complete the operation anyhow?\n\n" + message,
+                             "Constraint Violation",
+                             MessageBoxButtons.YesNo,
+                             MessageBoxIcon.Question);
+    }
+    /// <summary>
+    /// Builds a message out of a given collection of violated constraints, 
+    /// including the constraints type and description.
+    /// </summary>
+    /// <param name="violatedConstraints">The constraints that could not be fulfilled.</param>
+    /// <returns>The message to display.</returns>
+    private static string BuildConstraintViolationMessage(ICollection<IConstraint> violatedConstraints) {
+      StringBuilder sb = new StringBuilder();
+      foreach (IConstraint constraint in violatedConstraints) {
+        sb.AppendLine(constraint.GetType().Name);
+        sb.AppendLine(constraint.Description);
+        sb.AppendLine();
+      }
+      return sb.ToString();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class ChooseItemDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.typesGroupBox = new System.Windows.Forms.GroupBox();
+      this.treeView = new System.Windows.Forms.TreeView();
+      this.typesGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.okButton.Location = new System.Drawing.Point(305, 368);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(386, 368);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // typesGroupBox
+      // 
+      this.typesGroupBox.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.typesGroupBox.Controls.Add(this.treeView);
+      this.typesGroupBox.Location = new System.Drawing.Point(12, 12);
+      this.typesGroupBox.Name = "typesGroupBox";
+      this.typesGroupBox.Size = new System.Drawing.Size(449, 350);
+      this.typesGroupBox.TabIndex = 0;
+      this.typesGroupBox.TabStop = false;
+      this.typesGroupBox.Text = "&Available Item Types";
+      // 
+      // treeView
+      // 
+      this.treeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.treeView.HideSelection = false;
+      this.treeView.Location = new System.Drawing.Point(3, 16);
+      this.treeView.Name = "treeView";
+      this.treeView.Size = new System.Drawing.Size(443, 331);
+      this.treeView.TabIndex = 0;
+      this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
+      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
+      // 
+      // ChooseItemDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(473, 403);
+      this.Controls.Add(this.typesGroupBox);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "ChooseItemDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Choose Item";
+      this.Load += new System.EventHandler(this.ChooseItemDialog_Load);
+      this.typesGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.GroupBox typesGroupBox;
+    private System.Windows.Forms.TreeView treeView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.cs	(revision 1270)
@@ -0,0 +1,191 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// A dialog to select an item. 
+  /// </summary>
+  public partial class ChooseItemDialog : Form {
+    #region Inner Class TreeNodeSorter
+    private class TreeNodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if (result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Gets or sets the caption of the dialog.
+    /// </summary>
+    /// <remarks>Uses property <see cref="Form.Text"/> of base class <see cref="System.Windows.Forms.Form"/>.
+    /// No own data storage present.</remarks>
+    public string Caption {
+      get { return Text; }
+      set { Text = value; }
+    }
+
+    private IItem myItem;
+    /// <summary>
+    /// Gets the selected item.
+    /// </summary>
+    public IItem Item {
+      get { return myItem; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChooseItemDialog"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ChooseItemDialog(System.Type)"/> with the type of <see cref="IItem"/>
+    /// as parameter.</remarks>
+    public ChooseItemDialog()
+      : this(typeof(IItem)) {
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChooseItemDialog"/> with 
+    /// the given <paramref name="itemType"/>.
+    /// </summary>
+    /// <param name="itemType">The type of the items to choose from.</param>
+    public ChooseItemDialog(Type itemType) {
+      InitializeComponent();
+
+      treeView.TreeViewNodeSorter = new TreeNodeSorter();
+
+      if (itemType == null) {
+        itemType = typeof(IItem);
+      }
+
+      DiscoveryService discoveryService = new DiscoveryService();
+      foreach (PluginInfo plugin in discoveryService.Plugins) {
+        TreeNode pluginNode = new TreeNode(plugin.Name);
+        pluginNode.Tag = null;
+
+        Type[] types = discoveryService.GetTypes(itemType, plugin);
+        foreach (Type type in types) {
+          if (!type.IsAbstract) {
+            TreeNode itemNode = new TreeNode();
+            itemNode.Text = type.Name;
+            itemNode.Tag = type;
+            pluginNode.Nodes.Add(itemNode);
+          }
+        }
+        if (pluginNode.Nodes.Count > 0) {
+          treeView.Nodes.Add(pluginNode);
+        }
+      }
+      if (treeView.Nodes.Count == 0) {
+        treeView.Enabled = false;
+        treeView.Nodes.Add(new TreeNode("No item types available"));
+      }
+      okButton.Enabled = false;
+
+      if (treeView.Nodes.Count == 1) {
+        TreeNodeCollection items = treeView.Nodes[0].Nodes;
+        treeView.Nodes.Clear();
+        foreach (TreeNode i in items) {
+          treeView.Nodes.Add(i);
+        }
+      }
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      Type type = (Type)treeView.SelectedNode.Tag;
+
+      if (type.ContainsGenericParameters) {
+        type = type.GetGenericTypeDefinition();
+        Type[] args = new Type[type.GetGenericArguments().Length];
+        ChooseTypeDialog dialog = new ChooseTypeDialog();
+        for (int i = 0; i < args.Length; i++) {
+          dialog.Caption = "Choose type of generic parameter " + (i + 1).ToString();
+          if (dialog.ShowDialog(this) == DialogResult.OK)
+            args[i] = dialog.Type;
+          else
+            args[i] = null;
+        }
+        dialog.Dispose();
+        type = type.MakeGenericType(args);
+      }
+
+      myItem = (IItem)Activator.CreateInstance(type);
+      this.DialogResult = DialogResult.OK;
+      this.Close();
+    }
+
+    private void treeView_DoubleClick(object sender, EventArgs e) {
+      // plugin groups have a null-tag
+      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null)) {
+        Type type = (Type)treeView.SelectedNode.Tag;
+
+        if (type.ContainsGenericParameters) {
+          type = type.GetGenericTypeDefinition();
+          Type[] args = new Type[type.GetGenericArguments().Length];
+          ChooseTypeDialog dialog = new ChooseTypeDialog();
+          for (int i = 0; i < args.Length; i++) {
+            dialog.Caption = "Choose type of generic parameter " + (i + 1).ToString();
+            if (dialog.ShowDialog(this) == DialogResult.OK)
+              args[i] = dialog.Type;
+            else
+              args[i] = null;
+          }
+          dialog.Dispose();
+          type = type.MakeGenericType(args);
+        }
+
+        myItem = (IItem)Activator.CreateInstance(type);
+        this.DialogResult = DialogResult.OK;
+        this.Close();
+      }
+    }
+
+    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      okButton.Enabled = false;
+      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null))
+        okButton.Enabled = true;
+    }
+
+    private void ChooseItemDialog_Load(object sender, EventArgs e) {
+      myItem = null;
+      if (treeView.Nodes.Count == 1) {
+        Type type = (Type)treeView.Nodes[0].Tag;
+        if (!type.ContainsGenericParameters) {
+          myItem = (IItem)Activator.CreateInstance(type);
+          this.DialogResult = DialogResult.OK;
+          this.Close();
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseItemDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,342 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class ChooseOperatorDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.builtinOperatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.builtinOperatorsTreeView = new System.Windows.Forms.TreeView();
+      this.builtinOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.operatorLibrariesTabPage = new System.Windows.Forms.TabPage();
+      this.operatorLibraryTextBox = new System.Windows.Forms.TextBox();
+      this.operatorLibraryLabel = new System.Windows.Forms.Label();
+      this.operatorLibraryOperatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.operatorLibraryOperatorsTreeView = new System.Windows.Forms.TreeView();
+      this.operatorLibraryOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
+      this.loadButton = new System.Windows.Forms.Button();
+      this.builtinTabPage = new System.Windows.Forms.TabPage();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.builtinOperatorsGroupBox.SuspendLayout();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.operatorLibrariesTabPage.SuspendLayout();
+      this.operatorLibraryOperatorsGroupBox.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.builtinTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Enabled = false;
+      this.okButton.Location = new System.Drawing.Point(305, 368);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(386, 368);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // builtinOperatorsGroupBox
+      // 
+      this.builtinOperatorsGroupBox.Controls.Add(this.splitContainer2);
+      this.builtinOperatorsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsGroupBox.Location = new System.Drawing.Point(3, 3);
+      this.builtinOperatorsGroupBox.Name = "builtinOperatorsGroupBox";
+      this.builtinOperatorsGroupBox.Size = new System.Drawing.Size(435, 318);
+      this.builtinOperatorsGroupBox.TabIndex = 0;
+      this.builtinOperatorsGroupBox.TabStop = false;
+      this.builtinOperatorsGroupBox.Text = "&Available Operators";
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.builtinOperatorsTreeView);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.builtinOperatorsDescriptionTextBox);
+      this.splitContainer2.Size = new System.Drawing.Size(429, 299);
+      this.splitContainer2.SplitterDistance = 220;
+      this.splitContainer2.TabIndex = 2;
+      // 
+      // builtinOperatorsTreeView
+      // 
+      this.builtinOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsTreeView.HideSelection = false;
+      this.builtinOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
+      this.builtinOperatorsTreeView.Name = "builtinOperatorsTreeView";
+      this.builtinOperatorsTreeView.Size = new System.Drawing.Size(429, 220);
+      this.builtinOperatorsTreeView.TabIndex = 0;
+      this.builtinOperatorsTreeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
+      this.builtinOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.builtinOperatorsTreeView_AfterSelect);
+      // 
+      // builtinOperatorsDescriptionTextBox
+      // 
+      this.builtinOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.builtinOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.builtinOperatorsDescriptionTextBox.Multiline = true;
+      this.builtinOperatorsDescriptionTextBox.Name = "builtinOperatorsDescriptionTextBox";
+      this.builtinOperatorsDescriptionTextBox.ReadOnly = true;
+      this.builtinOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.builtinOperatorsDescriptionTextBox.Size = new System.Drawing.Size(429, 75);
+      this.builtinOperatorsDescriptionTextBox.TabIndex = 0;
+      // 
+      // 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.operatorLibrariesTabPage);
+      this.tabControl.Controls.Add(this.builtinTabPage);
+      this.tabControl.Location = new System.Drawing.Point(12, 12);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(449, 350);
+      this.tabControl.TabIndex = 0;
+      // 
+      // operatorLibrariesTabPage
+      // 
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryTextBox);
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryLabel);
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryOperatorsGroupBox);
+      this.operatorLibrariesTabPage.Controls.Add(this.loadButton);
+      this.operatorLibrariesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorLibrariesTabPage.Name = "operatorLibrariesTabPage";
+      this.operatorLibrariesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorLibrariesTabPage.Size = new System.Drawing.Size(441, 324);
+      this.operatorLibrariesTabPage.TabIndex = 0;
+      this.operatorLibrariesTabPage.Text = "Operator Libraries";
+      this.operatorLibrariesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorLibraryTextBox
+      // 
+      this.operatorLibraryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.operatorLibraryTextBox.Location = new System.Drawing.Point(97, 8);
+      this.operatorLibraryTextBox.Name = "operatorLibraryTextBox";
+      this.operatorLibraryTextBox.ReadOnly = true;
+      this.operatorLibraryTextBox.Size = new System.Drawing.Size(257, 20);
+      this.operatorLibraryTextBox.TabIndex = 2;
+      // 
+      // operatorLibraryLabel
+      // 
+      this.operatorLibraryLabel.AutoSize = true;
+      this.operatorLibraryLabel.Location = new System.Drawing.Point(6, 11);
+      this.operatorLibraryLabel.Name = "operatorLibraryLabel";
+      this.operatorLibraryLabel.Size = new System.Drawing.Size(85, 13);
+      this.operatorLibraryLabel.TabIndex = 1;
+      this.operatorLibraryLabel.Text = "&Operator Library:";
+      // 
+      // operatorLibraryOperatorsGroupBox
+      // 
+      this.operatorLibraryOperatorsGroupBox.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.operatorLibraryOperatorsGroupBox.Controls.Add(this.splitContainer1);
+      this.operatorLibraryOperatorsGroupBox.Enabled = false;
+      this.operatorLibraryOperatorsGroupBox.Location = new System.Drawing.Point(6, 35);
+      this.operatorLibraryOperatorsGroupBox.Name = "operatorLibraryOperatorsGroupBox";
+      this.operatorLibraryOperatorsGroupBox.Size = new System.Drawing.Size(429, 283);
+      this.operatorLibraryOperatorsGroupBox.TabIndex = 3;
+      this.operatorLibraryOperatorsGroupBox.TabStop = false;
+      this.operatorLibraryOperatorsGroupBox.Text = "&Available Operators";
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.operatorLibraryOperatorsTreeView);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.operatorLibraryOperatorsDescriptionTextBox);
+      this.splitContainer1.Size = new System.Drawing.Size(423, 264);
+      this.splitContainer1.SplitterDistance = 187;
+      this.splitContainer1.TabIndex = 1;
+      // 
+      // operatorLibraryOperatorsTreeView
+      // 
+      this.operatorLibraryOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryOperatorsTreeView.HideSelection = false;
+      this.operatorLibraryOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
+      this.operatorLibraryOperatorsTreeView.Name = "operatorLibraryOperatorsTreeView";
+      this.operatorLibraryOperatorsTreeView.ShowNodeToolTips = true;
+      this.operatorLibraryOperatorsTreeView.Size = new System.Drawing.Size(423, 187);
+      this.operatorLibraryOperatorsTreeView.TabIndex = 0;
+      this.operatorLibraryOperatorsTreeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
+      this.operatorLibraryOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
+      // 
+      // operatorLibraryOperatorsDescriptionTextBox
+      // 
+      this.operatorLibraryOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.operatorLibraryOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorLibraryOperatorsDescriptionTextBox.Multiline = true;
+      this.operatorLibraryOperatorsDescriptionTextBox.Name = "operatorLibraryOperatorsDescriptionTextBox";
+      this.operatorLibraryOperatorsDescriptionTextBox.ReadOnly = true;
+      this.operatorLibraryOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.operatorLibraryOperatorsDescriptionTextBox.Size = new System.Drawing.Size(423, 73);
+      this.operatorLibraryOperatorsDescriptionTextBox.TabIndex = 0;
+      // 
+      // loadButton
+      // 
+      this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.loadButton.Location = new System.Drawing.Point(360, 6);
+      this.loadButton.Name = "loadButton";
+      this.loadButton.Size = new System.Drawing.Size(75, 23);
+      this.loadButton.TabIndex = 0;
+      this.loadButton.Text = "&Load...";
+      this.loadButton.UseVisualStyleBackColor = true;
+      this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
+      // 
+      // builtinTabPage
+      // 
+      this.builtinTabPage.Controls.Add(this.builtinOperatorsGroupBox);
+      this.builtinTabPage.Location = new System.Drawing.Point(4, 22);
+      this.builtinTabPage.Name = "builtinTabPage";
+      this.builtinTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.builtinTabPage.Size = new System.Drawing.Size(441, 324);
+      this.builtinTabPage.TabIndex = 1;
+      this.builtinTabPage.Text = "Built-In";
+      this.builtinTabPage.UseVisualStyleBackColor = true;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "library";
+      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.openFileDialog.Title = "Open file ...";
+      // 
+      // ChooseOperatorDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(473, 403);
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "ChooseOperatorDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Choose Operator";
+      this.Shown += new System.EventHandler(this.ChooseOperatorDialog_Shown);
+      this.builtinOperatorsGroupBox.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      this.splitContainer2.ResumeLayout(false);
+      this.tabControl.ResumeLayout(false);
+      this.operatorLibrariesTabPage.ResumeLayout(false);
+      this.operatorLibrariesTabPage.PerformLayout();
+      this.operatorLibraryOperatorsGroupBox.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.Panel2.PerformLayout();
+      this.splitContainer1.ResumeLayout(false);
+      this.builtinTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.GroupBox builtinOperatorsGroupBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage operatorLibrariesTabPage;
+    private System.Windows.Forms.TabPage builtinTabPage;
+    private System.Windows.Forms.TextBox operatorLibraryTextBox;
+    private System.Windows.Forms.Label operatorLibraryLabel;
+    private System.Windows.Forms.GroupBox operatorLibraryOperatorsGroupBox;
+    private System.Windows.Forms.TreeView operatorLibraryOperatorsTreeView;
+    private System.Windows.Forms.Button loadButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.TreeView builtinOperatorsTreeView;
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private System.Windows.Forms.TextBox builtinOperatorsDescriptionTextBox;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.TextBox operatorLibraryOperatorsDescriptionTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.cs	(revision 1270)
@@ -0,0 +1,185 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// A dialog to select an operator out of a library.
+  /// </summary>
+  public partial class ChooseOperatorDialog : Form {
+    #region Inner Class TreeNodeSorter
+    private class TreeNodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if (result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+    #endregion
+
+    private IOperatorLibrary operatorLibrary;
+
+    private IOperator myOperator;
+    /// <summary>
+    /// Gets the selected operator.
+    /// </summary>
+    public IOperator Operator {
+      get { return myOperator; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChooseOperatorDialog"/>.
+    /// </summary>
+    public ChooseOperatorDialog() {
+      InitializeComponent();
+      operatorLibrary = null;
+      myOperator = null;
+      TreeNodeSorter nodeSorter = new TreeNodeSorter();
+      operatorLibraryOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
+      builtinOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
+
+      DiscoveryService discoveryService = new DiscoveryService();
+      PluginInfo[] plugins = discoveryService.Plugins;
+      foreach(PluginInfo plugin in plugins) {
+        TreeNode pluginItem = new TreeNode();
+        pluginItem.Text = plugin.Name;
+        pluginItem.Tag = plugin;
+
+        Type[] operators = discoveryService.GetTypes(typeof(IOperator), plugin);
+        foreach(Type type in operators) {
+          if(!type.IsAbstract) {
+            TreeNode operatorItem = new TreeNode();
+            operatorItem.Text = type.Name;
+            operatorItem.Tag = type;
+            pluginItem.Nodes.Add(operatorItem);
+          }
+        }
+        // add plugin node only if it contains operators
+        if(pluginItem.Nodes.Count > 0) {
+          builtinOperatorsTreeView.Nodes.Add(pluginItem);
+        }
+      }
+      if (builtinOperatorsTreeView.Nodes.Count == 0) {
+        builtinOperatorsTreeView.Enabled = false;
+        builtinOperatorsTreeView.Nodes.Add("No operators available");
+      }
+      builtinOperatorsTreeView.Sort();
+    }
+
+    private void UpdateOperatorsTreeView() {
+      operatorLibraryOperatorsTreeView.Nodes.Clear();
+      operatorLibraryOperatorsTreeView.Nodes.Add(CreateTreeNode(operatorLibrary.Group));
+      operatorLibraryOperatorsTreeView.Sort();
+    }
+
+    private TreeNode CreateTreeNode(IOperatorGroup group) {
+      TreeNode node = new TreeNode();
+      node.Text = group.Name;
+      node.ForeColor = Color.LightGray;
+      node.Tag = group;
+
+      foreach (IOperator op in group.Operators)
+        node.Nodes.Add(CreateTreeNode(op));
+      foreach (IOperatorGroup subGroup in group.SubGroups)
+        node.Nodes.Add(CreateTreeNode(subGroup));
+      return node;
+    }
+    private TreeNode CreateTreeNode(IOperator op) {
+      TreeNode node = new TreeNode();
+      node.Text = op.Name;
+      node.ToolTipText = op.GetType().Name;
+      node.Tag = op;
+      return node;
+    }
+
+    #region Form Events
+    private void ChooseOperatorDialog_Shown(object sender, EventArgs e) {
+      operatorLibraryOperatorsTreeView.SelectedNode = null;
+      operatorLibraryOperatorsDescriptionTextBox.Text = "";
+      myOperator = null;
+      builtinOperatorsTreeView.SelectedNode = null;
+      builtinOperatorsDescriptionTextBox.Text = "";
+      okButton.Enabled = false;
+    }
+    #endregion
+
+    #region Selection Events
+    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      okButton.Enabled = false;
+      myOperator = null;
+      operatorLibraryOperatorsDescriptionTextBox.Text = "";
+      if ((operatorLibraryOperatorsTreeView.SelectedNode != null) && (operatorLibraryOperatorsTreeView.SelectedNode.Tag is IOperator)) {
+        myOperator = (IOperator)operatorLibraryOperatorsTreeView.SelectedNode.Tag;
+        myOperator = (IOperator)myOperator.Clone();
+        operatorLibraryOperatorsDescriptionTextBox.Text = myOperator.Description;
+        okButton.Enabled = true;
+      }
+    }
+    private void builtinOperatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      okButton.Enabled = false;
+      myOperator = null;
+      builtinOperatorsDescriptionTextBox.Text = "";
+      if ((builtinOperatorsTreeView.SelectedNode != null) && (builtinOperatorsTreeView.SelectedNode.Tag is Type)) {
+        okButton.Enabled = true;
+        myOperator = (IOperator)Activator.CreateInstance((Type)builtinOperatorsTreeView.SelectedNode.Tag);
+        builtinOperatorsDescriptionTextBox.Text = myOperator.Description;
+      }
+    }
+    #endregion
+
+    #region Click Events
+    private void loadButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        operatorLibrary = (IOperatorLibrary)PersistenceManager.Load(openFileDialog.FileName);
+        operatorLibraryTextBox.Text = openFileDialog.FileName;
+        toolTip.SetToolTip(operatorLibraryTextBox, openFileDialog.FileName);
+        operatorLibraryOperatorsGroupBox.Enabled = true;
+        UpdateOperatorsTreeView();
+      }
+    }
+    private void okButton_Click(object sender, EventArgs e) {
+      if (Operator != null) {
+        this.DialogResult = DialogResult.OK;
+        this.Close();
+      }
+    }
+    private void treeView_DoubleClick(object sender, EventArgs e) {
+      if (Operator != null) {
+        this.DialogResult = DialogResult.OK;
+        this.Close();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseOperatorDialog.resx	(revision 1270)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>141, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class ChooseTypeDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.typesGroupBox = new System.Windows.Forms.GroupBox();
+      this.treeView = new System.Windows.Forms.TreeView();
+      this.typesGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.okButton.Location = new System.Drawing.Point(305, 368);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(386, 368);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // typesGroupBox
+      // 
+      this.typesGroupBox.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.typesGroupBox.Controls.Add(this.treeView);
+      this.typesGroupBox.Location = new System.Drawing.Point(12, 12);
+      this.typesGroupBox.Name = "typesGroupBox";
+      this.typesGroupBox.Size = new System.Drawing.Size(449, 350);
+      this.typesGroupBox.TabIndex = 0;
+      this.typesGroupBox.TabStop = false;
+      this.typesGroupBox.Text = "&Available Types";
+      // 
+      // treeView
+      // 
+      this.treeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.treeView.HideSelection = false;
+      this.treeView.Location = new System.Drawing.Point(3, 16);
+      this.treeView.Name = "treeView";
+      this.treeView.Size = new System.Drawing.Size(443, 331);
+      this.treeView.TabIndex = 0;
+      this.treeView.DoubleClick += new System.EventHandler(this.treeView_DoubleClick);
+      this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect);
+      // 
+      // ChooseTypeDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(473, 403);
+      this.Controls.Add(this.typesGroupBox);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "ChooseTypeDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Choose Type";
+      this.Load += new System.EventHandler(this.ChooseTypeDialog_Load);
+      this.typesGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.GroupBox typesGroupBox;
+    private System.Windows.Forms.TreeView treeView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.cs	(revision 1270)
@@ -0,0 +1,153 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// A dialog to select a specific type.
+  /// </summary>
+  public partial class ChooseTypeDialog : Form {
+    #region Inner Class TreeNodeSorter
+    private class TreeNodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if (result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Gets or sets the caption of the dialog.
+    /// </summary>
+    /// <remarks>Uses property <see cref="Form.Text"/> of base class <see cref="Form"/>.
+    /// No own data storage present.</remarks>
+    public string Caption {
+      get { return Text; }
+      set { Text = value; }
+    }
+
+    private Type myType;
+    /// <summary>
+    /// Gets the selected type.
+    /// </summary>
+    public Type Type {
+      get { return myType; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChooseTypeDialog"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ChooseTypeDialog(Type)"/> with the type of <see cref="IItem"/> as
+    /// parameter.</remarks>
+    public ChooseTypeDialog()
+      : this(typeof(IItem)) {
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChooseTypeDialog"/> with the given 
+    /// <paramref name="baseType"/>.
+    /// </summary>
+    /// <param name="baseType">The base type of all chooseable types.</param>
+    public ChooseTypeDialog(Type baseType) {
+      InitializeComponent();
+
+      treeView.TreeViewNodeSorter = new TreeNodeSorter();
+
+      if (baseType == null) {
+        baseType = typeof(IItem);
+      }
+
+      DiscoveryService discoveryService = new DiscoveryService();
+      foreach (PluginInfo plugin in discoveryService.Plugins) {
+        TreeNode pluginNode = new TreeNode(plugin.Name);
+        pluginNode.Tag = null;
+
+        Type[] types = discoveryService.GetTypes(baseType, plugin);
+        foreach (Type type in types) {
+          TreeNode itemNode = new TreeNode();
+          itemNode.Text = type.Name;
+          itemNode.Tag = type;
+          pluginNode.Nodes.Add(itemNode);
+        }
+        if (pluginNode.Nodes.Count > 0) {
+          treeView.Nodes.Add(pluginNode);
+        }
+      }
+      if (treeView.Nodes.Count == 0) {
+        treeView.Enabled = false;
+        treeView.Nodes.Add(new TreeNode("No item types available"));
+      }
+      okButton.Enabled = false;
+
+      if (treeView.Nodes.Count == 1) {
+        TreeNodeCollection items = treeView.Nodes[0].Nodes;
+        treeView.Nodes.Clear();
+        foreach (TreeNode i in items) {
+          treeView.Nodes.Add(i);
+        }
+      }
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      myType = (Type)treeView.SelectedNode.Tag;
+      this.DialogResult = DialogResult.OK;
+      this.Close();
+    }
+
+    private void treeView_DoubleClick(object sender, EventArgs e) {
+      // plugin groups have a null-tag
+      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null)) {
+        myType = (Type)treeView.SelectedNode.Tag;
+        this.DialogResult = DialogResult.OK;
+        this.Close();
+      }
+    }
+
+    private void treeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      okButton.Enabled = false;
+      if ((treeView.SelectedNode != null) && (treeView.SelectedNode.Tag != null))
+        okButton.Enabled = true;
+    }
+
+    private void ChooseTypeDialog_Load(object sender, EventArgs e) {
+      myType = null;
+      if (treeView.Nodes.Count == 1) {
+        myType = (Type)treeView.Nodes[0].Tag;
+        this.DialogResult = DialogResult.OK;
+        this.Close();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ChooseTypeDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/CompositeOperation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/CompositeOperation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/CompositeOperation.cs	(revision 1270)
@@ -0,0 +1,137 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents a class for operations consisting themselves of several operations. 
+  /// Can also be executed in parallel.
+  /// </summary>
+  public class CompositeOperation : ItemBase, IOperation {
+    private bool myExecuteInParallel;
+
+    /// <summary>
+    /// Gets or sets the bool value, whether the operation should be executed in parallel or not.  
+    /// </summary>
+    public bool ExecuteInParallel {
+      get { return myExecuteInParallel; }
+      set { myExecuteInParallel = value; }
+    }
+    private List<IOperation> myOperations;
+    /// <summary>
+    /// Gets all current operations.
+    /// <note type="caution"> Operations are read-only!</note>
+    /// </summary>
+    public IList<IOperation> Operations {
+      get { return myOperations.AsReadOnly(); }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="CompositeOperation"/>, the <see cref="ExecuteInParallel"/>
+    /// property set to <c>false</c>.
+    /// </summary>
+    public CompositeOperation() {
+      myOperations = new List<IOperation>();
+      myExecuteInParallel = false;
+    }
+
+    /// <summary>
+    /// Adds an operation to the current list of operations.
+    /// </summary>
+    /// <param name="operation">The operation to add.</param>
+    public void AddOperation(IOperation operation) {
+      myOperations.Add(operation);
+    }
+    /// <summary>
+    /// Removes an operation from the current list.
+    /// </summary>
+    /// <param name="operation">The operation to remove.</param>
+    public void RemoveOperation(IOperation operation) {
+      myOperations.Remove(operation);
+    }
+
+    /// <summary>
+    /// Clones the current instance of <see cref="CompositeOperation"/> (deep clone).
+    /// </summary>
+    /// <remarks>All operations of the current instance are cloned, too (deep clone), with the 
+    /// <see cref="HeuristicLab.Core.Auxiliary.Clone"/> method of the class <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned operation as <see cref="CompositeOperation"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      CompositeOperation clone = new CompositeOperation();
+      clonedObjects.Add(Guid, clone);
+      clone.myExecuteInParallel = ExecuteInParallel;
+      for (int i = 0; i < Operations.Count; i++)
+        clone.AddOperation((IOperation)Auxiliary.Clone(Operations[i], clonedObjects));
+      return clone;
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.StorableBase.GetXmlNode"/> of base 
+    /// class <see cref="ItemBase"/>.<br/>
+    /// The <see cref="ExecuteInParallel"/> property is saved as <see cref="XmlAttribute"/> with the
+    /// tag name <c>ExecuteInParallel</c>. A child node with tag name <c>Operations</c> is created where
+    /// all operations are saved as child nodes.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute parallelAttribute = document.CreateAttribute("ExecuteInParallel");
+      parallelAttribute.Value = ExecuteInParallel.ToString();
+      node.Attributes.Append(parallelAttribute);
+
+      XmlNode operationsNode = document.CreateNode(XmlNodeType.Element, "Operations", null);
+      for (int i = 0; i < Operations.Count; i++)
+        operationsNode.AppendChild(PersistenceManager.Persist(Operations[i], document, persistedObjects));
+      node.AppendChild(operationsNode);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted operation from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The <see cref="ExecuteInParallel"/> property must be saved as <see cref="XmlAttribute"/>
+    /// with the tag name <c>ExecuteInParallel</c>. <br/>
+    /// The single operations must be saved as child nodes of a node with tag name <c>Operations</c>, 
+    /// being a child node of the current instance. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the operation is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      myExecuteInParallel = bool.Parse(node.Attributes["ExecuteInParallel"].Value);
+
+      XmlNode operationsNode = node.SelectSingleNode("Operations");
+      for (int i = 0; i < operationsNode.ChildNodes.Count; i++)
+        AddOperation((IOperation)PersistenceManager.Restore(operationsNode.ChildNodes[i], restoredObjects));
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBase.cs	(revision 1270)
@@ -0,0 +1,189 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Base class for all items that are subjects to restrictions.
+  /// </summary>
+  public abstract class ConstrainedItemBase : ItemBase, IConstrainedItem {
+    private List<IConstraint> myConstraints;
+    /// <summary>
+    /// Gets all current constraints.
+    /// <note type="caution"> The constraints are returned read-only.</note>
+    /// </summary>
+    public virtual ICollection<IConstraint> Constraints {
+      get { return myConstraints.AsReadOnly(); }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedItemBase"/>.
+    /// </summary>
+    protected ConstrainedItemBase() {
+      myConstraints = new List<IConstraint>();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.Clone
+    /// (System.Collections.Generic.IDictionary&lt;System.Guid, object&gt;)"/> 
+    /// of base class <see cref="ItemBase"/>.<br/>
+    /// Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="ConstrainedItemBase"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ConstrainedItemBase clone = (ConstrainedItemBase)base.Clone(clonedObjects);
+      clone.myConstraints.Clear();
+      foreach (IConstraint constraint in Constraints)
+        clone.AddConstraint((IConstraint)Auxiliary.Clone(constraint, clonedObjects));
+      return clone;
+    }
+
+    /// <summary>
+    /// Adds the given <paramref name="constraint"/> to the current list.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnConstraintAdded"/>.</remarks>
+    /// <param name="constraint">The constraint to add.</param>
+    public virtual void AddConstraint(IConstraint constraint) {
+      myConstraints.Add(constraint);
+      OnConstraintAdded(constraint);
+    }
+    /// <summary>
+    /// Removes the given <paramref name="constraint"/> from the current list.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnConstraintRemoved"/> if the constraint can be successfully removed.</remarks>
+    /// <param name="constraint">The constraint to remove.</param>
+    public virtual void RemoveConstraint(IConstraint constraint) {
+      if (myConstraints.Remove(constraint))
+        OnConstraintRemoved(constraint);
+    }
+
+    /// <summary>
+    /// Checks all constraints of the current instance.
+    /// </summary>
+    /// <returns><c>true</c> if all constraints could be fulfilled, <c>false</c> otherwise.</returns>
+    public bool IsValid() {
+      bool result = true;
+      foreach (IConstraint constraint in Constraints)
+        result = result && constraint.Check(this);
+      return result;
+    }
+    /// <summary>
+    /// Checks all constraints of the current instance.
+    /// </summary>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
+    /// fulfilled.</param>
+    /// <returns><c>true</c> if all constraints could be fulfilled, <c>false</c> otherwise.</returns>
+    public bool IsValid(out ICollection<IConstraint> violatedConstraints) {
+      bool result = true;
+      violatedConstraints = new List<IConstraint>();
+      foreach (IConstraint constraint in Constraints) {
+        if (!constraint.Check(this)) {
+          result = false;
+          violatedConstraints.Add(constraint);
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Creates an instance of <see cref="ConstrainedItemBaseView"/> 
+    /// to represent the current instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="ConstrainedItemBaseView"/>.</returns>
+    public override IView CreateView() {
+      return new ConstrainedItemBaseView(this);
+    }
+
+    /// <summary>
+    /// Occurs when a constraint is added.
+    /// </summary>
+    public event EventHandler<ConstraintEventArgs> ConstraintAdded;
+    /// <summary>
+    /// Fires a new <c>ConstraintAdded</c> event.
+    /// </summary>
+    /// <param name="constraint">The constraint that was added.</param>
+    protected virtual void OnConstraintAdded(IConstraint constraint) {
+      if (ConstraintAdded != null)
+        ConstraintAdded(this, new ConstraintEventArgs(constraint));
+    }
+    /// <summary>
+    /// Occurs when a constraint is removed.
+    /// </summary>
+    public event EventHandler<ConstraintEventArgs> ConstraintRemoved;
+    /// <summary>
+    /// Fires a new <c>ConstraintRemoved</c> event.
+    /// </summary>
+    /// <param name="constraint">The constraint that was removed.</param>
+    protected virtual void OnConstraintRemoved(IConstraint constraint) {
+      if (ConstraintRemoved != null)
+        ConstraintRemoved(this, new ConstraintEventArgs(constraint));
+    }
+
+    #region Persistence Methods  
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>. <br/>
+    /// For saving the constraints a child node is created having the tag name <c>Constraints</c>. Beyond this
+    /// child node all constraints are saved as child nodes themselves.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      if (Constraints.Count > 0) {
+        XmlNode constraintsNode = document.CreateNode(XmlNodeType.Element, "Constraints", null);
+        foreach (IConstraint constraint in Constraints)
+          constraintsNode.AppendChild(PersistenceManager.Persist(constraint, document, persistedObjects));
+        node.AppendChild(constraintsNode);
+      }
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted item from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> to get information about how the constrained item must
+    /// be saved. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the constrained item is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode constraintsNode = node.SelectSingleNode("Constraints");
+      if (constraintsNode != null) {
+        myConstraints.Clear();
+        foreach (XmlNode constraintNode in constraintsNode.ChildNodes)
+          AddConstraint((IConstraint)PersistenceManager.Restore(constraintNode, restoredObjects));
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.Designer.cs	(revision 1270)
@@ -0,0 +1,174 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  partial class ConstrainedItemBaseView {
+    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
+      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.removeConstraintButton = new System.Windows.Forms.Button();
+      this.addConstraintButton = new System.Windows.Forms.Button();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.constraintsGroupBox = new System.Windows.Forms.GroupBox();
+      this.constraintsListView = new System.Windows.Forms.ListView();
+      this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
+      this.constraintDetailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.constraintsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // removeConstraintButton
+      // 
+      this.removeConstraintButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeConstraintButton.Enabled = false;
+      this.removeConstraintButton.Location = new System.Drawing.Point(81, 310);
+      this.removeConstraintButton.Name = "removeConstraintButton";
+      this.removeConstraintButton.Size = new System.Drawing.Size(75, 23);
+      this.removeConstraintButton.TabIndex = 2;
+      this.removeConstraintButton.Text = "&Remove";
+      this.removeConstraintButton.UseVisualStyleBackColor = true;
+      this.removeConstraintButton.Click += new System.EventHandler(this.removeConstraintButton_Click);
+      // 
+      // addConstraintButton
+      // 
+      this.addConstraintButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addConstraintButton.Location = new System.Drawing.Point(0, 310);
+      this.addConstraintButton.Name = "addConstraintButton";
+      this.addConstraintButton.Size = new System.Drawing.Size(75, 23);
+      this.addConstraintButton.TabIndex = 1;
+      this.addConstraintButton.Text = "&Add...";
+      this.addConstraintButton.UseVisualStyleBackColor = true;
+      this.addConstraintButton.Click += new System.EventHandler(this.addConstraintButton_Click);
+      // 
+      // 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";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.constraintsGroupBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.constraintDetailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(423, 304);
+      this.splitContainer.SplitterDistance = 149;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // constraintsGroupBox
+      // 
+      this.constraintsGroupBox.Controls.Add(this.constraintsListView);
+      this.constraintsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constraintsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.constraintsGroupBox.Name = "constraintsGroupBox";
+      this.constraintsGroupBox.Size = new System.Drawing.Size(149, 304);
+      this.constraintsGroupBox.TabIndex = 0;
+      this.constraintsGroupBox.TabStop = false;
+      this.constraintsGroupBox.Text = "&Constraints";
+      // 
+      // constraintsListView
+      // 
+      this.constraintsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader3});
+      this.constraintsListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constraintsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.constraintsListView.HideSelection = false;
+      this.constraintsListView.Location = new System.Drawing.Point(3, 16);
+      this.constraintsListView.Name = "constraintsListView";
+      this.constraintsListView.ShowItemToolTips = true;
+      this.constraintsListView.Size = new System.Drawing.Size(143, 285);
+      this.constraintsListView.TabIndex = 0;
+      this.constraintsListView.UseCompatibleStateImageBehavior = false;
+      this.constraintsListView.View = System.Windows.Forms.View.Details;
+      this.constraintsListView.SelectedIndexChanged += new System.EventHandler(this.constraintsListView_SelectedIndexChanged);
+      this.constraintsListView.SizeChanged += new System.EventHandler(this.constraintsListView_SizeChanged);
+      this.constraintsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.constraintsListView_KeyDown);
+      // 
+      // constraintDetailsGroupBox
+      // 
+      this.constraintDetailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constraintDetailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.constraintDetailsGroupBox.Name = "constraintDetailsGroupBox";
+      this.constraintDetailsGroupBox.Size = new System.Drawing.Size(270, 304);
+      this.constraintDetailsGroupBox.TabIndex = 0;
+      this.constraintDetailsGroupBox.TabStop = false;
+      this.constraintDetailsGroupBox.Text = "&Details";
+      // 
+      // ConstrainedItemBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.addConstraintButton);
+      this.Controls.Add(this.removeConstraintButton);
+      this.Controls.Add(this.splitContainer);
+      this.Name = "ConstrainedItemBaseView";
+      this.Size = new System.Drawing.Size(423, 333);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.constraintsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private ColumnHeader columnHeader3;
+    protected Button removeConstraintButton;
+    protected Button addConstraintButton;
+    protected SplitContainer splitContainer;
+    protected GroupBox constraintsGroupBox;
+    protected ListView constraintsListView;
+    protected GroupBox constraintDetailsGroupBox;
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.cs	(revision 1270)
@@ -0,0 +1,182 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of an <see cref="IConstrainedItem"/>.
+  /// </summary>
+  public partial class ConstrainedItemBaseView : ViewBase {
+    private ChooseItemDialog chooseItemDialog;
+
+    /// <summary>
+    /// Gets or sets the current item to represent visually.
+    /// </summary>
+    public IConstrainedItem ConstrainedItem {
+      get { return (IConstrainedItem)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedItemBaseView"/> 
+    /// with the caption "Constrained Item".
+    /// </summary>
+    public ConstrainedItemBaseView() {
+      InitializeComponent();
+      constraintsListView.Columns[0].Width = Math.Max(0, constraintsListView.Width - 25);
+      Caption = "Constrained Item";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedItemBaseView"/> with the given 
+    /// <paramref name="constraintItem"/>.
+    /// </summary>
+    /// <param name="constraintItem">The item to represent visually.</param>
+    public ConstrainedItemBaseView(IConstrainedItem constraintItem)
+      : this() {
+      ConstrainedItem = constraintItem;
+    }
+
+    /// <summary>
+    /// Removes the event handlers from the underlying <see cref="IConstrainedItem"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      ConstrainedItem.ConstraintAdded -= new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintAdded);
+      ConstrainedItem.ConstraintRemoved -= new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintRemoved);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="IConstrainedItem"/>. 
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ConstrainedItem.ConstraintAdded += new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintAdded);
+      ConstrainedItem.ConstraintRemoved += new EventHandler<ConstraintEventArgs>(ConstrainedItemBase_ConstraintRemoved);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      constraintDetailsGroupBox.Controls.Clear();
+      if (ConstrainedItem == null) {
+        Caption = "Constrained Item";
+        constraintsListView.Enabled = false;
+        constraintDetailsGroupBox.Enabled = false;
+        removeConstraintButton.Enabled = false;
+      } else {
+        Caption = "Constrained Item (" + ConstrainedItem.GetType().Name + ")";
+        constraintsListView.Enabled = true;
+        constraintsListView.Items.Clear();
+        foreach (IConstraint constraint in ConstrainedItem.Constraints) {
+          ListViewItem item = new ListViewItem();
+          item.Text = constraint.GetType().Name;
+          item.Tag = constraint;
+          constraintsListView.Items.Add(item);
+        }
+        if (constraintsListView.Items.Count > 0)
+          constraintsListView.SelectedIndices.Add(0);
+      }
+    }
+
+    private void constraintsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if (constraintDetailsGroupBox.Controls.Count > 0)
+        constraintDetailsGroupBox.Controls[0].Dispose();
+      constraintDetailsGroupBox.Controls.Clear();
+      constraintDetailsGroupBox.Enabled = false;
+      removeConstraintButton.Enabled = false;
+      if (constraintsListView.SelectedItems.Count > 0) {
+        removeConstraintButton.Enabled = true;
+      }
+      if (constraintsListView.SelectedItems.Count == 1) {
+        IConstraint constraint = (IConstraint)constraintsListView.SelectedItems[0].Tag;
+        Control view = (Control)constraint.CreateView();
+        if (view != null) {
+          constraintDetailsGroupBox.Controls.Add(view);
+          view.Dock = DockStyle.Fill;
+          constraintDetailsGroupBox.Enabled = true;
+        }
+      }
+    }
+
+    #region Size Changed Events
+    private void constraintsListView_SizeChanged(object sender, EventArgs e) {
+      if (constraintsListView.Columns.Count > 0)
+        constraintsListView.Columns[0].Width = Math.Max(0, constraintsListView.Width - 25);
+    }
+    #endregion
+
+    #region Key Events
+    private void constraintsListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if (constraintsListView.SelectedItems.Count > 0) {
+          foreach (ListViewItem item in constraintsListView.SelectedItems)
+            ConstrainedItem.RemoveConstraint((IConstraint)item.Tag);
+        }
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addConstraintButton_Click(object sender, EventArgs e) {
+      if (chooseItemDialog == null) {
+        chooseItemDialog = new ChooseItemDialog(typeof(IConstraint));
+        chooseItemDialog.Caption = "Add Constraint";
+      }
+      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK)
+        ConstrainedItem.AddConstraint((IConstraint)chooseItemDialog.Item);
+    }
+    private void removeConstraintButton_Click(object sender, EventArgs e) {
+      if (constraintsListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in constraintsListView.SelectedItems)
+          ConstrainedItem.RemoveConstraint((IConstraint)item.Tag);
+      }
+    }
+    #endregion
+
+    #region ConstrainedItemBase Events
+    private void ConstrainedItemBase_ConstraintAdded(object sender, ConstraintEventArgs e) {
+      ListViewItem item = new ListViewItem();
+      item.Text = e.Constraint.GetType().Name;
+      item.Tag = e.Constraint;
+      constraintsListView.Items.Add(item);
+    }
+    private void ConstrainedItemBase_ConstraintRemoved(object sender, ConstraintEventArgs e) {
+      ListViewItem itemToDelete = null;
+      foreach (ListViewItem item in constraintsListView.Items) {
+        if (item.Tag == e.Constraint)
+          itemToDelete = item;
+      }
+      constraintsListView.Items.Remove(itemToDelete);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstrainedItemBaseView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstraintEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstraintEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ConstraintEventArgs.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected constraint.
+  /// </summary>
+  public class ConstraintEventArgs : ItemEventArgs {
+    /// <summary>
+    /// Gets the affected constraint.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class <see cref="ItemEventArgs"/>.
+    /// No own data storage present.</remarks>
+    public IConstraint Constraint {
+      get { return (IConstraint)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstraintEventArgs"/> with the given
+    /// <paramref name="constraint"/>.
+    /// </summary>
+    /// <remarks>Only calls the constructor of base class <see cref="ItemEventArgs"/>.</remarks>
+    /// <param name="constraint">The affected constraint.</param>
+    public ConstraintEventArgs(IConstraint constraint)
+      : base(constraint) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.Designer.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class EditorBase {
+    /// <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.SuspendLayout();
+      // 
+      // EditorBase
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "EditorBase";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.cs	(revision 1270)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Base class for views that can load and save data.
+  /// </summary>
+  public partial class EditorBase : ViewBase, IEditor {
+    private string myFilename;
+    /// <summary>
+    /// Gets or sets the filename of the current editor.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnFilenameChanged"/> in the setter if the filename is new.</remarks>
+    public string Filename {
+      get { return myFilename; }
+      set {
+        if (value != myFilename) {
+          myFilename = value;
+          OnFilenameChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EditorBase"/> with the caption "Editor".
+    /// </summary>
+    public EditorBase() {
+      InitializeComponent();
+      Caption = "Editor";
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (Item == null)
+        Caption = "Editor";
+      else
+        Caption = "Editor (" + Item.GetType().Name + ")";
+    }
+
+    /// <summary>
+    /// Occurs when the filename is changed.
+    /// </summary>
+    public event EventHandler FilenameChanged;
+    /// <summary>
+    /// Fires a new <c>FilenameChanged</c> event.
+    /// </summary>
+    protected virtual void OnFilenameChanged() {
+      if (FilenameChanged != null)
+        FilenameChanged(this, new EventArgs());
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EditorBase.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBase.cs	(revision 1270)
@@ -0,0 +1,349 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.Threading;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Base class to represent an engine, which is an interpreter, holding the code, the data and 
+  /// the actual state, which is the runtime stack and a pointer onto the next operation. It represents
+  /// one execution and can handle parallel executions.
+  /// </summary>
+  public abstract class EngineBase : ItemBase, IEngine {
+    /// <summary>
+    /// Field of the current instance that represent the operator graph.
+    /// </summary>
+    protected IOperatorGraph myOperatorGraph;
+    /// <summary>
+    /// Gets the current operator graph.
+    /// </summary>
+    public IOperatorGraph OperatorGraph {
+      get { return myOperatorGraph; }
+    }
+    /// <summary>
+    /// Field of the current instance that represent the global scope.
+    /// </summary>
+    protected IScope myGlobalScope;
+    /// <summary>
+    /// Gets the current global scope.
+    /// </summary>
+    public IScope GlobalScope {
+      get { return myGlobalScope; }
+    }
+
+    private TimeSpan myExecutionTime;
+    /// <summary>
+    /// Gets or sets the execution time.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnExecutionTimeChanged"/> in the setter.</remarks>
+    public TimeSpan ExecutionTime {
+      get { return myExecutionTime; }
+      protected set {
+        myExecutionTime = value;
+        OnExecutionTimeChanged();
+      }
+    }
+
+    /// <summary>
+    /// Field of the current instance that represent the execution stack.
+    /// </summary>
+    protected Stack<IOperation> myExecutionStack;
+    /// <summary>
+    /// Gets the current execution stack.
+    /// </summary>
+    public Stack<IOperation> ExecutionStack {
+      get { return myExecutionStack; }
+    }
+    
+    /// <summary>
+    /// Flag of the current instance whether it is currently running.
+    /// </summary>
+    protected bool myRunning;
+    /// <summary>
+    /// Gets information whether the instance is currently running.
+    /// </summary>
+    public bool Running {
+      get { return myRunning; }
+    }
+
+    /// <summary>
+    /// Flag of the current instance whether it is canceled.
+    /// </summary>
+    protected bool myCanceled;
+    /// <summary>
+    /// Gets information whether the instance is currently canceled.
+    /// </summary>
+    public bool Canceled {
+      get { return myCanceled; }
+    }
+    /// <summary>
+    /// Gets information whether the instance has already terminated.
+    /// </summary>
+    public virtual bool Terminated {
+      get { return ExecutionStack.Count == 0; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EngineBase"/> with a new global scope.
+    /// </summary>
+    /// <remarks>Calls <see cref="Reset"/>.</remarks>
+    protected EngineBase() {
+      myOperatorGraph = new OperatorGraph();
+      myGlobalScope = new Scope("Global");
+      myExecutionStack = new Stack<IOperation>();
+      Reset();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="EngineBase"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      EngineBase clone = (EngineBase)base.Clone(clonedObjects);
+      clone.myOperatorGraph = (IOperatorGraph)Auxiliary.Clone(OperatorGraph, clonedObjects);
+      clone.myGlobalScope = (IScope)Auxiliary.Clone(GlobalScope, clonedObjects);
+      clone.myExecutionTime = ExecutionTime;
+      IOperation[] operations = new IOperation[ExecutionStack.Count];
+      ExecutionStack.CopyTo(operations, 0);
+      for (int i = operations.Length - 1; i >= 0; i--)
+        clone.myExecutionStack.Push((IOperation)Auxiliary.Clone(operations[i], clonedObjects));
+      clone.myRunning = Running;
+      clone.myCanceled = Canceled;
+      return clone;
+      
+    }
+
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
+    /// of class <see cref="ThreadPool"/>.</remarks>
+    public virtual void Execute() {
+      myRunning = true;
+      myCanceled = false;
+      ThreadPool.QueueUserWorkItem(new WaitCallback(Run), null);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
+    /// of class <see cref="ThreadPool"/>.</remarks>
+    public virtual void ExecuteSteps(int steps) {
+      myRunning = true;
+      myCanceled = false;
+      ThreadPool.QueueUserWorkItem(new WaitCallback(Run), steps);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="ThreadPool.QueueUserWorkItem(System.Threading.WaitCallback, object)"/> 
+    /// of class <see cref="ThreadPool"/>.</remarks>
+    public void ExecuteStep() {
+      ExecuteSteps(1);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Sets the protected flag <c>myCanceled</c> to <c>true</c>.</remarks>
+    public virtual void Abort() {
+      myCanceled = true;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Sets <c>myCanceled</c> and <c>myRunning</c> to <c>false</c>. The global scope is cleared,
+    /// the execution time is reseted, the execution stack is cleared and a new <see cref="AtomicOperation"/>
+    /// with the initial operator is added. <br/>
+    /// Calls <see cref="OnInitialized"/>.</remarks>
+    public virtual void Reset() {
+      myCanceled = false;
+      myRunning = false;
+      GlobalScope.Clear();
+      ExecutionTime = new TimeSpan();
+      myExecutionStack.Clear();
+      if (OperatorGraph.InitialOperator != null)
+        myExecutionStack.Push(new AtomicOperation(OperatorGraph.InitialOperator, GlobalScope));
+      OnInitialized();
+    }
+
+    private void Run(object state) {
+      if (state == null) Run();
+      else RunSteps((int)state);
+      myRunning = false;
+      OnFinished();
+    }
+    private void Run() {
+      DateTime start = DateTime.Now;
+      DateTime end;
+      while ((!Canceled) && (!Terminated)) {
+        ProcessNextOperation();
+        end = DateTime.Now;
+        ExecutionTime += end - start;
+        start = end;
+      }
+      ExecutionTime += DateTime.Now - start;
+    }
+    private void RunSteps(int steps) {
+      DateTime start = DateTime.Now;
+      DateTime end;
+      int step = 0;
+      while ((!Canceled) && (!Terminated) && (step < steps)) {
+        ProcessNextOperation();
+        step++;
+        end = DateTime.Now;
+        ExecutionTime += end - start;
+        start = end;
+      }
+      ExecutionTime += DateTime.Now - start;
+    }
+
+    /// <summary>
+    /// Performs the next operation.
+    /// </summary>
+    protected abstract void ProcessNextOperation();
+
+    /// <summary>
+    /// Occurs when the current instance is initialized.
+    /// </summary>
+    public event EventHandler Initialized;
+    /// <summary>
+    /// Fires a new <c>Initialized</c> event.
+    /// </summary>
+    protected virtual void OnInitialized() {
+      if (Initialized != null)
+        Initialized(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when an operation is executed.
+    /// </summary>
+    public event EventHandler<OperationEventArgs> OperationExecuted;
+    /// <summary>
+    /// Fires a new <c>OperationExecuted</c> event.
+    /// </summary>
+    /// <param name="operation">The operation that has been executed.</param>
+    protected virtual void OnOperationExecuted(IOperation operation) {
+      if (OperationExecuted != null)
+        OperationExecuted(this, new OperationEventArgs(operation));
+    }
+    /// <summary>
+    /// Occurs when an exception occured during the execution.
+    /// </summary>
+    public event EventHandler<ExceptionEventArgs> ExceptionOccurred;
+    /// <summary>
+    /// Aborts the execution and fires a new <c>ExceptionOccurred</c> event.
+    /// </summary>
+    /// <param name="exception">The exception that was thrown.</param>
+    protected virtual void OnExceptionOccurred(Exception exception) {
+      Abort();
+      if (ExceptionOccurred != null)
+        ExceptionOccurred(this, new ExceptionEventArgs(exception));
+    }
+    /// <summary>
+    /// Occurs when the execution time changed.
+    /// </summary>
+    public event EventHandler ExecutionTimeChanged;
+    /// <summary>
+    /// Fires a new <c>ExecutionTimeChanged</c> event.
+    /// </summary>
+    protected virtual void OnExecutionTimeChanged() {
+      if (ExecutionTimeChanged != null)
+        ExecutionTimeChanged(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the execution is finished.
+    /// </summary>
+    public event EventHandler Finished;
+    /// <summary>
+    /// Fires a new <c>Finished</c> event.
+    /// </summary>
+    protected virtual void OnFinished() {
+      if (Finished != null)
+        Finished(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>.<br/>
+    /// A quick overview how the single elements of the current instance are saved:
+    /// <list type="bullet">
+    /// <item>
+    /// <term>Operator graph: </term>
+    /// <description>Saved as a child node with the tag name <c>OperatorGraph</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Global scope: </term>
+    /// <description>Saved as a child node with the tag name <c>GlobalScope</c>.</description> 
+    /// </item>
+    /// <item>
+    /// <term>Execution stack: </term>
+    /// <description>A child node is created with the tag name <c>ExecutionStack</c>. Beyond this child node
+    /// all operations of the execution stack are saved as child nodes.</description>
+    /// </item>
+    /// <item>
+    /// <term>Execution time: </term>
+    /// <description>Saved as a child node with the tag name <c>ExecutionTime</c>, where the execution
+    /// time is saved as string in the node's inner text.</description>
+    /// </item>
+    /// </list></remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+      node.AppendChild(PersistenceManager.Persist("OperatorGraph", OperatorGraph, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("GlobalScope", GlobalScope, document, persistedObjects));
+
+      XmlNode stackNode = document.CreateNode(XmlNodeType.Element, "ExecutionStack", null);
+      IOperation[] operations = new IOperation[ExecutionStack.Count];
+      ExecutionStack.CopyTo(operations, 0);
+      for (int i = 0; i < operations.Length; i++)
+        stackNode.AppendChild(PersistenceManager.Persist(operations[i], document, persistedObjects));
+      node.AppendChild(stackNode);
+
+      XmlNode timeNode = document.CreateNode(XmlNodeType.Element, "ExecutionTime", null);
+      timeNode.InnerText = ExecutionTime.ToString();
+      node.AppendChild(timeNode);
+      return node;
+    }
+    /// <summary>
+    ///  Loads the persisted instance from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> to get information on how the instance must be saved. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the engine is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myOperatorGraph = (IOperatorGraph)PersistenceManager.Restore(node.SelectSingleNode("OperatorGraph"), restoredObjects);
+      myGlobalScope = (IScope)PersistenceManager.Restore(node.SelectSingleNode("GlobalScope"), restoredObjects);
+
+      XmlNode stackNode = node.SelectSingleNode("ExecutionStack");
+      for (int i = stackNode.ChildNodes.Count - 1; i >= 0; i--)
+        myExecutionStack.Push((IOperation)PersistenceManager.Restore(stackNode.ChildNodes[i], restoredObjects));
+
+      XmlNode timeNode = node.SelectSingleNode("ExecutionTime");
+      myExecutionTime = TimeSpan.Parse(timeNode.InnerText);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,214 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class EngineBaseEditor {
+    /// <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.executionTimeTextBox = new System.Windows.Forms.TextBox();
+      this.executionTimeLabel = new System.Windows.Forms.Label();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.operatorGraphGroupBox = new System.Windows.Forms.GroupBox();
+      this.operatorGraphView = new HeuristicLab.Core.OperatorGraphView();
+      this.globalScopeGroupBox = new System.Windows.Forms.GroupBox();
+      this.scopeView = new HeuristicLab.Core.ScopeView();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.abortButton = new System.Windows.Forms.Button();
+      this.executeButton = new System.Windows.Forms.Button();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.operatorGraphGroupBox.SuspendLayout();
+      this.globalScopeGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // 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(499, 460);
+      this.executionTimeTextBox.Name = "executionTimeTextBox";
+      this.executionTimeTextBox.ReadOnly = true;
+      this.executionTimeTextBox.Size = new System.Drawing.Size(141, 20);
+      this.executionTimeTextBox.TabIndex = 5;
+      // 
+      // 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(496, 444);
+      this.executionTimeLabel.Name = "executionTimeLabel";
+      this.executionTimeLabel.Size = new System.Drawing.Size(83, 13);
+      this.executionTimeLabel.TabIndex = 4;
+      this.executionTimeLabel.Text = "&Execution Time:";
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.operatorGraphGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.globalScopeGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(640, 441);
+      this.splitContainer1.SplitterDistance = 320;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // operatorGraphGroupBox
+      // 
+      this.operatorGraphGroupBox.Controls.Add(this.operatorGraphView);
+      this.operatorGraphGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorGraphGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorGraphGroupBox.Name = "operatorGraphGroupBox";
+      this.operatorGraphGroupBox.Size = new System.Drawing.Size(320, 441);
+      this.operatorGraphGroupBox.TabIndex = 0;
+      this.operatorGraphGroupBox.TabStop = false;
+      this.operatorGraphGroupBox.Text = "Operator &Graph";
+      // 
+      // operatorGraphView
+      // 
+      this.operatorGraphView.Caption = "Operator Graph";
+      this.operatorGraphView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorGraphView.Location = new System.Drawing.Point(3, 16);
+      this.operatorGraphView.Name = "operatorGraphView";
+      this.operatorGraphView.OperatorGraph = null;
+      this.operatorGraphView.Size = new System.Drawing.Size(314, 422);
+      this.operatorGraphView.TabIndex = 0;
+      // 
+      // globalScopeGroupBox
+      // 
+      this.globalScopeGroupBox.Controls.Add(this.scopeView);
+      this.globalScopeGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.globalScopeGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.globalScopeGroupBox.Name = "globalScopeGroupBox";
+      this.globalScopeGroupBox.Size = new System.Drawing.Size(316, 441);
+      this.globalScopeGroupBox.TabIndex = 0;
+      this.globalScopeGroupBox.TabStop = false;
+      this.globalScopeGroupBox.Text = "Global &Scope";
+      // 
+      // scopeView
+      // 
+      this.scopeView.Caption = "Scope";
+      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeView.Location = new System.Drawing.Point(3, 16);
+      this.scopeView.Name = "scopeView";
+      this.scopeView.Scope = null;
+      this.scopeView.Size = new System.Drawing.Size(310, 422);
+      this.scopeView.TabIndex = 0;
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Location = new System.Drawing.Point(196, 457);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(92, 23);
+      this.resetButton.TabIndex = 3;
+      this.resetButton.Text = "&Reset";
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // abortButton
+      // 
+      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.abortButton.Enabled = false;
+      this.abortButton.Location = new System.Drawing.Point(98, 457);
+      this.abortButton.Name = "abortButton";
+      this.abortButton.Size = new System.Drawing.Size(92, 23);
+      this.abortButton.TabIndex = 2;
+      this.abortButton.Text = "&Abort";
+      this.abortButton.UseVisualStyleBackColor = true;
+      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      // 
+      // executeButton
+      // 
+      this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.executeButton.Location = new System.Drawing.Point(0, 457);
+      this.executeButton.Name = "executeButton";
+      this.executeButton.Size = new System.Drawing.Size(92, 23);
+      this.executeButton.TabIndex = 1;
+      this.executeButton.Text = "&Execute";
+      this.executeButton.UseVisualStyleBackColor = true;
+      this.executeButton.Click += new System.EventHandler(this.executeButton_Click);
+      // 
+      // EngineBaseEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.executionTimeTextBox);
+      this.Controls.Add(this.executionTimeLabel);
+      this.Controls.Add(this.splitContainer1);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.abortButton);
+      this.Controls.Add(this.executeButton);
+      this.Name = "EngineBaseEditor";
+      this.Size = new System.Drawing.Size(640, 480);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.operatorGraphGroupBox.ResumeLayout(false);
+      this.globalScopeGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    protected System.Windows.Forms.TextBox executionTimeTextBox;
+    protected System.Windows.Forms.Label executionTimeLabel;
+    protected System.Windows.Forms.SplitContainer splitContainer1;
+    protected System.Windows.Forms.GroupBox operatorGraphGroupBox;
+    protected System.Windows.Forms.GroupBox globalScopeGroupBox;
+    protected System.Windows.Forms.Button resetButton;
+    protected System.Windows.Forms.Button abortButton;
+    protected System.Windows.Forms.Button executeButton;
+    protected HeuristicLab.Core.OperatorGraphView operatorGraphView;
+    protected HeuristicLab.Core.ScopeView scopeView;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.cs	(revision 1270)
@@ -0,0 +1,170 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Base class for editors of engines.
+  /// </summary>
+  public partial class EngineBaseEditor : EditorBase {
+    private int executionTimeCounter;
+
+    /// <summary>
+    /// Gets or sets the current engine.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
+    public IEngine Engine {
+      get { return (IEngine)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EngineBaseEditor"/>.
+    /// </summary>
+    public EngineBaseEditor() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Removes the event handlers from the underlying <see cref="IEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      Engine.Initialized -= new EventHandler(Engine_Initialized);
+      Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      Engine.ExecutionTimeChanged -= new EventHandler(Engine_ExecutionTimeChanged);
+      Engine.Finished -= new EventHandler(Engine_Finished);
+      operatorGraphView.OperatorGraph = null;
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="IEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Engine.Initialized += new EventHandler(Engine_Initialized);
+      Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      Engine.ExecutionTimeChanged += new EventHandler(Engine_ExecutionTimeChanged);
+      Engine.Finished += new EventHandler(Engine_Finished);
+      operatorGraphView.OperatorGraph = Engine.OperatorGraph;
+      scopeView.Scope = Engine.GlobalScope;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      abortButton.Enabled = false;
+      if (Engine == null) {
+        executeButton.Enabled = false;
+        resetButton.Enabled = false;
+        executionTimeTextBox.Enabled = false;
+      } else {
+        executeButton.Enabled = true;
+        resetButton.Enabled = true;
+        executionTimeCounter = 0;
+        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+        executionTimeTextBox.Enabled = true;
+      }
+    }
+
+    #region Engine Events
+    private void Engine_Initialized(object sender, EventArgs e) {
+      Refresh();
+    }
+    private delegate void OnExceptionEventDelegate(object sender, ExceptionEventArgs e);
+    private void Engine_ExceptionOccurred(object sender, ExceptionEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Exception);
+    }
+    private void Engine_ExecutionTimeChanged(object sender, EventArgs e) {
+      executionTimeCounter++;
+      if (executionTimeCounter == 1000)
+        UpdateExecutionTimeTextBox();
+    }
+    private void Engine_Finished(object sender, EventArgs e) {
+      UpdateExecutionTimeTextBox();
+      if (globalScopeGroupBox.Controls.Count > 0) {
+        ScopeView scopeEditor = (ScopeView)globalScopeGroupBox.Controls[0];
+        if (!scopeEditor.AutomaticUpdating)
+          scopeEditor.Refresh();
+      }
+      EnableDisableControls();
+    }
+    private void UpdateExecutionTimeTextBox() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateExecutionTimeTextBox));
+      else {
+        executionTimeCounter = 0;
+        executionTimeTextBox.Text = Engine.ExecutionTime.ToString();
+      }
+    }
+    private void EnableDisableControls() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(EnableDisableControls));
+      else {
+        executeButton.Enabled = true;
+        abortButton.Enabled = false;
+        resetButton.Enabled = true;
+        operatorGraphGroupBox.Enabled = true;
+        globalScopeGroupBox.Enabled = true;
+      }
+    }
+    #endregion
+
+    #region Button events
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      resetButton.Enabled = false;
+      operatorGraphGroupBox.Enabled = false;
+      globalScopeGroupBox.Enabled = false;
+      Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      Engine.Reset();
+      UpdateExecutionTimeTextBox();
+      if (globalScopeGroupBox.Controls.Count > 0) {
+        ScopeView scopeEditor = (ScopeView)globalScopeGroupBox.Controls[0];
+        if (!scopeEditor.AutomaticUpdating)
+          scopeEditor.Refresh();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/EngineBaseEditor.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ExceptionEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ExceptionEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ExceptionEventArgs.cs	(revision 1270)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected exception.
+  /// </summary>
+  public class ExceptionEventArgs : EventArgs {
+    private Exception myException;
+    /// <summary>
+    /// Gets the affected exception.
+    /// </summary>
+    public Exception Exception {
+      get { return myException; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ExceptionEventArgs"/> 
+    /// with the given <paramref name="exception"/>.
+    /// </summary>
+    /// <param name="exception">The affected exception.</param>
+    public ExceptionEventArgs(Exception exception) {
+      myException = exception;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/HeuristicLab.Core.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/HeuristicLab.Core.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/HeuristicLab.Core.csproj	(revision 1270)
@@ -0,0 +1,372 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F43B59AB-2B8C-4570-BC1E-15592086517C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.Core-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <PublishUrl>http://localhost/HeuristicLab.Core/</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Web</InstallFrom>
+    <UpdateEnabled>true</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>true</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Core-3.2.XML</DocumentationFile>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Core-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Auxiliary.cs" />
+    <Compile Include="ChooseItemDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ChooseItemDialog.Designer.cs">
+      <DependentUpon>ChooseItemDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ChooseOperatorDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ChooseOperatorDialog.Designer.cs">
+      <DependentUpon>ChooseOperatorDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ConstrainedItemBase.cs" />
+    <Compile Include="ConstrainedItemBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ConstrainedItemBaseView.Designer.cs">
+      <DependentUpon>ConstrainedItemBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ConstraintEventArgs.cs" />
+    <Compile Include="AtomicOperation.cs" />
+    <Compile Include="CompositeOperation.cs" />
+    <Compile Include="ChooseTypeDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ChooseTypeDialog.Designer.cs">
+      <DependentUpon>ChooseTypeDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AliasEventArgs.cs" />
+    <Compile Include="KeyValueEventArgs.cs" />
+    <Compile Include="OperatorBaseDescriptionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorBaseDescriptionView.Designer.cs">
+      <DependentUpon>OperatorBaseDescriptionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Interfaces\IOperation.cs" />
+    <Compile Include="Interfaces\IOperatorLibrary.cs" />
+    <Compile Include="Interfaces\IVisualizationItem.cs" />
+    <Compile Include="NameChangingEventArgs.cs" />
+    <Compile Include="OperationEventArgs.cs" />
+    <Compile Include="OperatorBaseVariablesView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorBaseVariablesView.Designer.cs">
+      <DependentUpon>OperatorBaseVariablesView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorBaseVariableInfosView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorBaseVariableInfosView.Designer.cs">
+      <DependentUpon>OperatorBaseVariableInfosView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ExceptionEventArgs.cs" />
+    <Compile Include="Interfaces\IConstrainedItem.cs" />
+    <Compile Include="Interfaces\IConstraint.cs" />
+    <Compile Include="Interfaces\IItem.cs" />
+    <Compile Include="ItemBase.cs" />
+    <Compile Include="ItemBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemBaseView.Designer.cs">
+      <DependentUpon>ItemBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemEventArgs.cs" />
+    <Compile Include="ItemIndexEventArgs.cs" />
+    <Compile Include="OperatorLibrary.cs" />
+    <Compile Include="OperatorLibraryEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorLibraryEditor.Designer.cs">
+      <DependentUpon>OperatorLibraryEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="ScopeIndexEventArgs.cs" />
+    <Compile Include="EngineBaseEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EngineBaseEditor.Designer.cs">
+      <DependentUpon>EngineBaseEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="VariableInfoEventArgs.cs" />
+    <Compile Include="VariableEventArgs.cs" />
+    <Compile Include="Interfaces\IOperatorGroup.cs" />
+    <Compile Include="Interfaces\IOperatorGraph.cs" />
+    <Compile Include="Interfaces\IScope.cs" />
+    <Compile Include="Interfaces\IVariable.cs" />
+    <Compile Include="Interfaces\IVariableInfo.cs" />
+    <Compile Include="OperatorEventArgs.cs" />
+    <Compile Include="OperatorGroup.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="OperatorIndexEventArgs.cs" />
+    <Compile Include="ScopeEventArgs.cs" />
+    <Compile Include="OperatorBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorBaseView.Designer.cs">
+      <DependentUpon>OperatorBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="OperatorGraphView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperatorGraphView.Designer.cs">
+      <DependentUpon>OperatorGraphView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ScopeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ScopeView.Designer.cs">
+      <DependentUpon>ScopeView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="VariableInfoView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableInfoView.Designer.cs">
+      <DependentUpon>VariableInfoView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="VariableView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableView.Designer.cs">
+      <DependentUpon>VariableView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ViewBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ViewBase.Designer.cs">
+      <DependentUpon>ViewBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Interfaces\IViewable.cs" />
+    <Compile Include="Interfaces\IView.cs" />
+    <Compile Include="EditorBase.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="EditorBase.Designer.cs">
+      <DependentUpon>EditorBase.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Interfaces\IEditable.cs" />
+    <Compile Include="Interfaces\IEditor.cs" />
+    <Compile Include="OperatorBase.cs" />
+    <Compile Include="Interfaces\IRandom.cs" />
+    <Compile Include="OperatorGraph.cs" />
+    <Compile Include="StorableBase.cs" />
+    <Compile Include="Scope.cs" />
+    <Compile Include="EngineBase.cs" />
+    <Compile Include="Interfaces\IEngine.cs" />
+    <Compile Include="Interfaces\IOperator.cs" />
+    <Compile Include="Interfaces\IStorable.cs" />
+    <Compile Include="PersistenceManager.cs" />
+    <Compile Include="HeuristicLabCorePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Variable.cs" />
+    <Compile Include="VariableInfo.cs" />
+    <Compile Include="VariableKind.cs" />
+    <Compile Include="VariablesScopeView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariablesScopeView.Designer.cs">
+      <DependentUpon>VariablesScopeView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ChooseItemDialog.resx">
+      <DependentUpon>ChooseItemDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ChooseOperatorDialog.resx">
+      <DependentUpon>ChooseOperatorDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConstrainedItemBaseView.resx">
+      <DependentUpon>ConstrainedItemBaseView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ChooseTypeDialog.resx">
+      <DependentUpon>ChooseTypeDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperatorBaseDescriptionView.resx">
+      <DependentUpon>OperatorBaseDescriptionView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperatorBaseVariablesView.resx">
+      <DependentUpon>OperatorBaseVariablesView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperatorBaseVariableInfosView.resx">
+      <DependentUpon>OperatorBaseVariableInfosView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EditorBase.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>EditorBase.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ItemBaseView.resx">
+      <DependentUpon>ItemBaseView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperatorBaseView.resx">
+      <DependentUpon>OperatorBaseView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperatorGraphView.resx">
+      <DependentUpon>OperatorGraphView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperatorLibraryEditor.resx">
+      <DependentUpon>OperatorLibraryEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <SubType>Designer</SubType>
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ScopeView.resx">
+      <DependentUpon>ScopeView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EngineBaseEditor.resx">
+      <DependentUpon>EngineBaseEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="VariableInfoView.resx">
+      <DependentUpon>VariableInfoView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="VariablesScopeView.resx">
+      <DependentUpon>VariablesScopeView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="VariableView.resx">
+      <DependentUpon>VariableView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Resources\CombinedOperator.bmp" />
+    <Content Include="Resources\HeuristicLab.ico" />
+    <Content Include="Resources\Operator.bmp" />
+    <Content Include="Resources\ProgrammableOperator.bmp" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/HeuristicLabCorePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/HeuristicLabCorePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/HeuristicLabCorePlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Core plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Core-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Core-3.2.dll", Filetype = PluginFileType.Assembly)]
+  public class HeuristicLabCorePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IConstrainedItem.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IConstrainedItem.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IConstrainedItem.cs	(revision 1270)
@@ -0,0 +1,68 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent items that are subjects to restrictions. 
+  /// </summary>
+  public interface IConstrainedItem : IItem {
+    /// <summary>
+    /// All constraints of the current instance. 
+    /// </summary>
+    ICollection<IConstraint> Constraints { get; }
+
+    /// <summary>
+    /// Adds a constraint to the current instance.
+    /// </summary>
+    /// <param name="constraint">The constraint to add.</param>
+    void AddConstraint(IConstraint constraint);
+    /// <summary>
+    /// Removes a constraint from the current instance.
+    /// </summary>
+    /// <param name="constraint">The constraint to remove.</param>
+    void RemoveConstraint(IConstraint constraint);
+
+    /// <summary>
+    /// Checks whether the current instance fullfills all constraints.
+    /// </summary>
+    /// <returns><c>true</c> if all constraints are fullfilled, <c>false</c> otherwise.</returns>
+    bool IsValid();
+    /// <summary>
+    /// Checks whether the current instance fullfills all constraints.
+    /// </summary>
+    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fullfilled.</param>
+    /// <returns><c>true</c> if all constraints are fullfilled, <c>false</c> otherwise.</returns>
+    bool IsValid(out ICollection<IConstraint> violatedConstraints);
+
+    /// <summary>
+    /// An <see cref="EventHandler"/> for events when a new constraint is added.
+    /// </summary>
+    event EventHandler<ConstraintEventArgs> ConstraintAdded;
+    /// <summary>
+    /// An <see cref="EventHandler"/> for events when a constraint is deleted.
+    /// </summary>
+    event EventHandler<ConstraintEventArgs> ConstraintRemoved;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IConstraint.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent restrictions.
+  /// </summary>
+  public interface IConstraint : IItem {
+    /// <summary>
+    /// Gets the description of the current instance.
+    /// </summary>
+    string Description { get; }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="data"/> fulfills the current constraint.
+    /// </summary>
+    /// <param name="data">The item to check.</param>
+    /// <returns><c>true</c> if the current instance could be fulfilled, <c>false</c> otherwise.</returns>
+    bool Check(IItem data);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEditable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEditable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEditable.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent editable items.
+  /// </summary>
+  public interface IEditable : IViewable {
+    /// <summary>
+    /// Creates an editor.
+    /// </summary>
+    /// <returns>The created editor as <see cref="IEditor"/>.</returns>
+    IEditor CreateEditor();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEditor.cs	(revision 1270)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent an editor.
+  /// </summary>
+  public interface IEditor : IView {
+
+    /// <summary>
+    /// Gets or sets the filename.
+    /// </summary>
+    string Filename { get; set; }
+
+    /// <summary>
+    /// Occurs when the filename was changed.
+    /// </summary>
+    event EventHandler FilenameChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEngine.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEngine.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IEngine.cs	(revision 1270)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent one run. (An engine is an interpreter, holding the code, 
+  /// the data and the actual state, which is the runtime stack and a pointer onto the next operation.).
+  /// It is responsible for operator execution and able to deal with parallelism.
+  /// </summary>
+  public interface IEngine : IItem {
+    /// <summary>
+    /// Gets the operator graph of the current instance.
+    /// </summary>
+    IOperatorGraph OperatorGraph { get; }
+    /// <summary>
+    /// Gets the global scope of the current instance.
+    /// </summary>
+    IScope GlobalScope { get; }
+
+    /// <summary>
+    /// Gets the execution time of the current instance.
+    /// </summary>
+    TimeSpan ExecutionTime { get; }
+
+    /// <summary>
+    /// Gets information whether the engine is currently running.
+    /// </summary>
+    bool Running { get; }
+    /// <summary>
+    /// Gets information whether the engine is canceled.
+    /// </summary>
+    bool Canceled { get; }
+    /// <summary>
+    /// Gets information whether the engine has already terminated.
+    /// </summary>
+    bool Terminated { get; }
+
+    /// <summary>
+    /// Executes the whole run.
+    /// </summary>
+    void Execute();
+    /// <summary>
+    /// Executes one step (one operation).
+    /// </summary>
+    void ExecuteStep();
+    /// <summary>
+    /// Executes the given number of steps.
+    /// </summary>
+    /// <param name="steps">The number of steps to execute.</param>
+    void ExecuteSteps(int steps);
+    /// <summary>
+    /// Aborts the engine run.
+    /// </summary>
+    void Abort();
+    /// <summary>
+    /// Resets the current instance.
+    /// </summary>
+    void Reset();
+
+    /// <summary>
+    /// Occurs when the current instance is initialized.
+    /// </summary>
+    event EventHandler Initialized;
+    /// <summary>
+    /// Occurs when an operation is executed.
+    /// </summary>
+    event EventHandler<OperationEventArgs> OperationExecuted;
+    /// <summary>
+    /// Occurs when an exception was thrown.
+    /// </summary>
+    event EventHandler<ExceptionEventArgs> ExceptionOccurred;
+    /// <summary>
+    /// Occurs when the execution time was changed.
+    /// </summary>
+    event EventHandler ExecutionTimeChanged;
+    /// <summary>
+    /// Occurs when the engine is finished.
+    /// </summary>
+    event EventHandler Finished;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IItem.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IItem.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IItem.cs	(revision 1270)
@@ -0,0 +1,41 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent (almost) every HeuristicLab object (an object, an operator,...).
+  /// </summary>
+  public interface IItem : IStorable, IViewable {
+    /// <summary>
+    /// Fires a new <c>Changed</c> event.
+    /// </summary>
+    void FireChanged();
+
+    /// <summary>
+    /// Occurs when the current instance has changed.
+    /// </summary>
+    event EventHandler Changed;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperation.cs	(revision 1270)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent an operation (Executes a defined number of operators on a defined scope). 
+  /// </summary>
+  public interface IOperation : IItem {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperator.cs	(revision 1270)
@@ -0,0 +1,313 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent an operator (e.g. GreaterThanComparator,...), 
+  /// a basic instruction of an algorithm.
+  /// </summary>
+  public interface IOperator : IConstrainedItem {
+    /// <summary>
+    /// Gets or sets the name of the current instance.
+    /// </summary>
+    string Name { get; set; }
+    /// <summary>
+    /// Gets or sets the description of the current instance.
+    /// </summary>
+    string Description { get; }
+
+    /// <summary>
+    /// Gets information whether the current operator has been canceled.
+    /// </summary>
+    bool Canceled { get; }
+    /// <summary>
+    /// Gets or sets a boolean value whether the engine should stop here during the run.
+    /// </summary>
+    bool Breakpoint { get; set; }
+
+    /// <summary>
+    /// Gets a list of all sub operators.
+    /// </summary>
+    IList<IOperator> SubOperators { get; }
+    /// <summary>
+    /// Gets a collection of all variable (parameter) infos.
+    /// </summary>
+    ICollection<IVariableInfo> VariableInfos { get; }
+    /// <summary>
+    /// Gets a collection of all variables of the current operator.
+    /// </summary>
+    ICollection<IVariable> Variables { get; }
+
+    /// <summary>
+    /// Adds the given sub operator to the current instance.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    void AddSubOperator(IOperator op);
+    /// <summary>
+    /// Adds the given sub operator to the current instance if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    /// <returns><c>true</c> if the operator could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddSubOperator(IOperator op);
+    /// <summary>
+    /// Adds the given sub operator to the current instance if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
+    /// fulfilled.</param>
+    /// <returns><c>true</c> if the operator could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddSubOperator(IOperator op, out ICollection<IConstraint> violatedConstraints);
+    /// <summary>
+    /// Adds the given sub operator at a the specified <paramref name="index"/>.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    /// <param name="index">The position where to add the operator.</param>
+    void AddSubOperator(IOperator op, int index);
+    /// <summary>
+    /// Adds the given operator at the specified <paramref name="index"/> to the current instance 
+    /// if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    /// <param name="index">The position where to add the operator.</param>
+    /// <returns><c>true</c> if the operator could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddSubOperator(IOperator op, int index);
+    /// <summary>
+    /// Adds the given operator at the specified <paramref name="index"/> to the current instance 
+    /// if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    /// <param name="index">The position where to add the operator.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
+    /// fulfilled.</param>
+    /// <returns><c>true</c> if the operator could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddSubOperator(IOperator op, int index, out ICollection<IConstraint> violatedConstraints);
+    /// <summary>
+    /// Removes a sub operator at the specified <paramref name="index"/>.
+    /// </summary>
+    /// <param name="index">The position where to delete the operator.</param>
+    void RemoveSubOperator(int index);
+    /// <summary>
+    /// Removes a sub operator at the specified <paramref name="index"/> if all constraint can be fulfilled.
+    /// </summary>
+    /// <param name="index">The position where to delete the operator.</param>
+    /// <returns><c>true</c> if the operator could be deleted without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryRemoveSubOperator(int index);
+    /// <summary>
+    /// Deletes the operator at the specified <paramref name="index"/>  
+    /// if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="index">The position where to delete the operator.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
+    /// fulfilled.</param>
+    /// <returns><c>true</c> if the operator could be deleted without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryRemoveSubOperator(int index, out ICollection<IConstraint> violatedConstraints);
+
+    /// <summary>
+    /// Gets the variable info with the given <paramref name="formalName"/>.
+    /// </summary>
+    /// <param name="formalName">The formal name of the variable info.</param>
+    /// <returns>The variable info with the specified formal name.</returns>
+    IVariableInfo GetVariableInfo(string formalName);
+    /// <summary>
+    /// Adds the specified variable info to the current instance.
+    /// </summary>
+    /// <param name="variableInfo">The variable info to add.</param>
+    void AddVariableInfo(IVariableInfo variableInfo);
+    /// <summary>
+    /// Adds the specified variable info to the current instance, if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="variableInfo">The variable info to add.</param>
+    /// <returns><c>true</c> if the variable info could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddVariableInfo(IVariableInfo variableInfo);
+    /// <summary>
+    /// Adds the specified variable info to the current instance, if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="variableInfo">The variable info to add.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
+    /// fulfilled.</param>
+    /// <returns><c>true</c> if the variable info could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddVariableInfo(IVariableInfo variableInfo, out ICollection<IConstraint> violatedConstraints);
+    /// <summary>
+    /// Removes the variable info with the given formal name.
+    /// </summary>
+    /// <param name="formalName">The formal name of the variable info to remove.</param>
+    void RemoveVariableInfo(string formalName);
+    /// <summary>
+    /// Deletes the variable info with the given formal name, 
+    /// if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="formalName">The formal name of the variable info to remove.</param>
+    /// <returns><c>true</c> if the variable info could be deleted without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryRemoveVariableInfo(string formalName);
+    /// <summary>
+    /// Deletes the variable info with the given formal name, 
+    /// if all constraints can be fulfilled.
+    /// </summary>
+    /// <param name="formalName">The formal name of the variable info to remove.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could not be
+    /// fulfilled.</param>
+    /// <returns><c>true</c> if the variable info could be deleted without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryRemoveVariableInfo(string formalName, out ICollection<IConstraint> violatedConstraints);
+
+    /// <summary>
+    /// Gets a variable with the given <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The name of the variable.</param>
+    /// <returns>The variable with the specified name.</returns>
+    IVariable GetVariable(string name);
+    /// <summary>
+    /// Adds the specified <paramref name="variable"/> to the current instance.
+    /// </summary>
+    /// <param name="variable">The variable to add.</param>
+    void AddVariable(IVariable variable);
+    /// <summary>
+    /// Adds the specified <paramref name="variable"/> to the current instance if all constraints can
+    /// be fulfilled.
+    /// </summary>
+    /// <param name="variable">The variable to add.</param>
+    /// <returns><c>true</c> if the variable could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddVariable(IVariable variable);
+    /// <summary>
+    /// Adds the specified <paramref name="variable"/> to the current instance if all constraints can
+    /// be fulfilled.
+    /// </summary>
+    /// <param name="variable">The variable to add.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could 
+    /// not be fulfillled.</param>
+    /// <returns><c>true</c> if the variable could be added without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryAddVariable(IVariable variable, out ICollection<IConstraint> violatedConstraints);
+    /// <summary>
+    /// Deletes the variable with the specified <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The name of the variable to delete.</param>
+    void RemoveVariable(string name);
+    /// <summary>
+    /// Deletes the variable with the specified <paramref name="name"/> if all constraints can be 
+    /// fulfilled.
+    /// </summary>
+    /// <param name="name">The name of the variable to remove.</param>
+    /// <returns><c>true</c> if the variable could be deleted without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryRemoveVariable(string name);
+    /// <summary>
+    /// Deletes the variable with the specified <paramref name="name"/> if all constraints can be 
+    /// fulfilled.
+    /// </summary>
+    /// <param name="name">The name of the variable to remove.</param>
+    /// <param name="violatedConstraints">Output parameter; contains all constraints that could 
+    /// not be fulfilled.</param>
+    /// <returns><c>true</c> if the variable could be deleted without violating constraints,
+    /// <c>false</c> otherwise.</returns>
+    bool TryRemoveVariable(string name, out ICollection<IConstraint> violatedConstraints);
+    
+    /// <inheritdoc cref="GetVariableValue(string, HeuristicLab.Core.IScope, bool)"/>
+    /// <typeparam name="T">The type of the value that is searched.</typeparam>       
+    T GetVariableValue<T>(string formalName, IScope scope, bool recursiveLookup) where T : class, IItem;
+    /// <inheritdoc cref="GetVariableValue(string, HeuristicLab.Core.IScope, bool, bool)"/>
+    /// <typeparam name="T">The type of the value that is searched.</typeparam>
+    T GetVariableValue<T>(string formalName, IScope scope, bool recursiveLookup, bool throwOnError) where T : class, IItem;
+    /// <inheritdoc cref="GetVariableValue(System.String, IScope, bool, bool)" 
+    /// select="summary"/>
+    /// <param name="formalName">The formal name of the variable info whose variable value is searched.</param>
+    /// <param name="scope">The scope where to look for the variable.</param>
+    /// <param name="recursiveLookup">Boolean value, whether also the parent scopes shall be searched if
+    /// the variable is not found in the specified <paramref name="scope"/>.</param>
+    /// <returns>The value of the searched variable or null if it is not found.</returns>
+    IItem GetVariableValue(string formalName, IScope scope, bool recursiveLookup);
+    /// <summary>
+    /// Gets the value of the variable in the specified <paramref name="scope"/>
+    /// whose variable(parameter) info has the specified <paramref name="formalName"/>.
+    /// </summary>
+    /// <param name="formalName">The formal name of the variable info whose variable value is searched.</param>
+    /// <param name="scope">The scope where to look for the variable.</param>
+    /// <param name="recursiveLookup">Boolean value, whether also the parent scopes shall be searched if
+    /// the variable is not found in the specified <paramref name="scope"/>.</param>
+    /// <param name="throwOnError">Boolean value, whether an exception shall be thrown, if the variable 
+    /// cannot be found or just <c>null</c> shall be returned.</param>
+    /// <returns>The value of the searched variable (or null if the variable is not 
+    /// found and <paramref name="throwOnError"/> is set to false).</returns>
+    IItem GetVariableValue(string formalName, IScope scope, bool recursiveLookup, bool throwOnError);
+
+    /// <summary>
+    /// Executes the current instance on the specified <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to execute the current instance.</param>
+    /// <returns>The next operation.</returns>
+    IOperation Execute(IScope scope);
+    /// <summary>
+    /// Aborts the current operator.
+    /// </summary>
+    void Abort();
+
+    /// <summary>
+    /// Occurs when the name of the operator was changed.
+    /// </summary>
+    event EventHandler NameChanged;
+    /// <summary>
+    /// Occurs when the breakpoint flag of the current instance was changed.
+    /// </summary>
+    event EventHandler BreakpointChanged; 
+    /// <summary>
+    /// Occurs when a sub operator has been added.
+    /// </summary>
+    event EventHandler<OperatorIndexEventArgs> SubOperatorAdded;
+    /// <summary>
+    /// Occurs when a sub operator has been deleted.
+    /// </summary>
+    event EventHandler<OperatorIndexEventArgs> SubOperatorRemoved;
+    /// <summary>
+    /// Occurs when a variable info has been added.
+    /// </summary>
+    event EventHandler<VariableInfoEventArgs> VariableInfoAdded;
+    /// <summary>
+    /// Occurs when a variable info has been deleted.
+    /// </summary>
+    event EventHandler<VariableInfoEventArgs> VariableInfoRemoved;
+    /// <summary>
+    /// Occurs when a variable has been added.
+    /// </summary>
+    event EventHandler<VariableEventArgs> VariableAdded;
+    /// <summary>
+    /// Occurs when a variable has been deleted.
+    /// </summary>
+    event EventHandler<VariableEventArgs> VariableRemoved;
+    /// <summary>
+    /// Occurs when the current instance is executed.
+    /// </summary>
+    event EventHandler Executed;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorGraph.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorGraph.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorGraph.cs	(revision 1270)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent an operator graph.
+  /// </summary>
+  public interface IOperatorGraph : IItem {
+    /// <summary>
+    /// Gets all operators of the current instance.
+    /// </summary>
+    ICollection<IOperator> Operators { get; }
+    /// <summary>
+    /// Gets or sets the initial operator (the starting one) of the current instance.
+    /// </summary>
+    IOperator InitialOperator { get; set; }
+
+    /// <summary>
+    /// Adds the given operator to the current instance.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    void AddOperator(IOperator op);
+    /// <summary>
+    /// Removes an operator with the specified <paramref name="guid"/> from the current instance.
+    /// </summary>
+    /// <param name="guid">The unique id of the operator to remove.</param>
+    void RemoveOperator(Guid guid);
+    /// <summary>
+    /// Gets the operator with the specified <paramref name="guid"/>.
+    /// </summary>
+    /// <param name="guid">The unique id of the operator.</param>
+    /// <returns>The searched operator.</returns>
+    IOperator GetOperator(Guid guid);
+    /// <summary>
+    /// Clears the current instance.
+    /// </summary>
+    void Clear();
+
+    /// <summary>
+    /// Occurs when a new operator has been added to the current instance.
+    /// </summary>
+    event EventHandler<OperatorEventArgs> OperatorAdded;
+    /// <summary>
+    /// Occurs when an operator has been deleted from the current instance.
+    /// </summary>
+    event EventHandler<OperatorEventArgs> OperatorRemoved;
+    /// <summary>
+    /// Occurs when the initial operator (the starting one) has been changed.
+    /// </summary>
+    event EventHandler InitialOperatorChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorGroup.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorGroup.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorGroup.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent a group of operators.
+  /// </summary>
+  public interface IOperatorGroup : IStorable {
+    /// <summary>
+    /// Gets or sets the name of the current instance.
+    /// </summary>
+    string Name { get; set; }
+    /// <summary>
+    /// Gets all sub groups of operators of the current instance.
+    /// </summary>
+    ICollection<IOperatorGroup> SubGroups { get; }
+    /// <summary>
+    /// Gets all operators of the current operator group.
+    /// </summary>
+    ICollection<IOperator> Operators { get; }
+
+    /// <summary>
+    /// Adds the specified sub group of operators to the current operator group.
+    /// </summary>
+    /// <param name="group">The operator group to add.</param>
+    void AddSubGroup(IOperatorGroup group);
+    /// <summary>
+    /// Deletes the specified sub group of operators from the current instance.
+    /// </summary>
+    /// <param name="group">The sub group to delete.</param>
+    void RemoveSubGroup(IOperatorGroup group);
+    /// <summary>
+    /// Adds the specified operator to the current instance.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    void AddOperator(IOperator op);
+    /// <summary>
+    /// Deletes the specified operator from the current instance.
+    /// </summary>
+    /// <param name="op">The operator to remove.</param>
+    void RemoveOperator(IOperator op);
+
+    /// <summary>
+    /// Occurs when the name of the operator group has been changed.
+    /// </summary>
+    event EventHandler NameChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorLibrary.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorLibrary.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IOperatorLibrary.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent a library of operators.
+  /// </summary>
+  public interface IOperatorLibrary : IItem {
+    /// <summary>
+    /// Gets the operator group of the current instance.
+    /// </summary>
+    IOperatorGroup Group { get; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IRandom.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IRandom.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IRandom.cs	(revision 1270)
@@ -0,0 +1,66 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents an interface for random number generators.
+  /// </summary>
+  public interface IRandom : IItem {
+    /// <summary>
+    /// Resets the random number generator.
+    /// </summary>
+    void Reset();
+    /// <summary>
+    /// Resets the random number generator with the given <paramref name="seed"/>.
+    /// </summary>
+    /// <param name="seed">The new seed.</param>
+    void Reset(int seed);
+
+    /// <summary>
+    /// Gets a new random number.
+    /// </summary>
+    /// <returns>A random integer number.</returns>
+    int Next();
+    /// <summary>
+    /// Gets a new random number between 0 and <paramref name="maxVal"/>.
+    /// </summary>
+    /// <param name="maxVal">The maximal value of the random number (exclusive).</param>
+    /// <returns>A random integer number smaller than <paramref name="maxVal"/>.</returns>
+    int Next(int maxVal);
+    /// <summary>
+    /// Gets a new random number between <paramref name="minVal"/> and <paramref name="maxVal"/>.
+    /// </summary>
+    /// <param name="maxVal">The maximal value of the random number (exclusive).</param>
+    /// <param name="minVal">The minimal value of the random number (inclusive).</param>
+    /// <returns>A random integer number. (<paramref name="minVal"/> &lt;= x &lt; <paramref name="maxVal"/>).</returns>
+    int Next(int minVal, int maxVal);
+    /// <summary>
+    /// Gets a new double random number.
+    /// </summary>
+    /// <returns>A random double number.</returns>
+    double NextDouble();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IScope.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IScope.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IScope.cs	(revision 1270)
@@ -0,0 +1,177 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface for a hierarchical container of variables (containing variables and subscopes). 
+  /// </summary>
+  public interface IScope : IItem {
+    /// <summary>
+    /// Gets the name of the current instance.
+    /// </summary>
+    string Name { get; }
+
+    /// <summary>
+    /// Gets the varibles of the current scope.
+    /// </summary>
+    ICollection<IVariable> Variables { get; }
+    /// <summary>
+    /// Gets all aliases of the current scope.
+    /// </summary>
+    IEnumerable<KeyValuePair<string, string>> Aliases { get; }
+    /// <summary>
+    /// Gets all subscopes in the current scope.
+    /// </summary>
+    IList<IScope> SubScopes { get; }
+
+    /// <summary>
+    /// Sets the parent scope for the current instance.
+    /// </summary>
+    /// <param name="scope">The parent scope of the current instance.</param>
+    void SetParent(IScope scope);
+
+    /// <summary>
+    /// Gets a variable with the given <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The name of the variable.</param>
+    /// <returns>The variable with the specified name.</returns>
+    IVariable GetVariable(string name);
+    /// <summary>
+    /// Adds the specified variable to the curent instance.
+    /// </summary>
+    /// <param name="variable">The variable to add.</param>
+    void AddVariable(IVariable variable);
+    /// <summary>
+    /// Deletes a variable with the specified <paramref name="name"/> from the current instance.
+    /// </summary>
+    /// <param name="name">The name of the variable to delete.</param>
+    void RemoveVariable(string name);
+    
+    /// <inheritdoc cref="GetVariableValue(string, bool)"/>
+    /// <typeparam name="T">The type of the value that is searched.</typeparam>
+    T GetVariableValue<T>(string name, bool recursiveLookup) where T : class, IItem;
+    /// <inheritdoc cref="GetVariableValue(string, bool, bool)"/>
+    /// <typeparam name="T">The type of the value that is searched.</typeparam>
+    T GetVariableValue<T>(string name, bool recursiveLookup, bool throwOnError) where T : class, IItem;
+    /// <inheritdoc cref="GetVariableValue(string, bool, bool)" select="summary"/>
+    /// <param name="name">The name of the variable.</param>
+    /// <param name="recursiveLookup">Boolean value, whether the parent scopes shall be searched
+    /// when the variable is not found in the current instance.</param>
+    /// <returns>The value of the variable or <c>null</c> if it was not found.</returns>
+    IItem GetVariableValue(string name, bool recursiveLookup);
+    /// <summary>
+    /// Gets the value of the variable with the given <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The name of the variable.</param>
+    /// <param name="recursiveLookup">Boolean value, whether the parent scopes shall be searched
+    /// when the variable is not found in the current instance.</param>
+    /// <param name="throwOnError">Boolean value, whether an exception shall be thrown when the searched 
+    /// variable cannot be found, or only <c>null</c> shall be returned.</param>
+    /// <returns>The value of the searched variable or <c>null</c> if <paramref name="throwOnError"/>
+    /// is set to <c>false</c>.</returns>
+    IItem GetVariableValue(string name, bool recursiveLookup, bool throwOnError);
+
+    /// <summary>
+    /// Gets the actual name of the given alias.
+    /// </summary>
+    /// <param name="name">The alias whose actual name is searched.</param>
+    /// <returns>The actual name.</returns>
+    string TranslateName(string name);
+    /// <summary>
+    /// Adds an alias to the current instance. 
+    /// </summary>
+    /// <param name="alias">The alias to add.</param>
+    /// <param name="name">The actual name of the alias.</param>
+    void AddAlias(string alias, string name);
+    /// <summary>
+    /// Deletes the specified <paramref name="alias"/> from the current instance.
+    /// </summary>
+    /// <param name="alias">The alias to delete.</param>
+    void RemoveAlias(string alias);
+
+    /// <summary>
+    /// Adds the specified sub scope to the current instance.
+    /// </summary>
+    /// <param name="scope">The sub scope to add.</param>
+    void AddSubScope(IScope scope);
+    /// <summary>
+    /// Deletes the specified sub scope from the current instance.
+    /// </summary>
+    /// <param name="scope">The sub scope to delete.</param>
+    void RemoveSubScope(IScope scope);
+    /// <summary>
+    /// Reorders all sub scopes according to the specified chronology.
+    /// </summary>
+    /// <param name="sequence">The chronology how to order the sub scopes.</param>
+    void ReorderSubScopes(int[] sequence);
+    /// <summary>
+    /// Gets the sub scope with the given <paramref name="guid"/>.
+    /// </summary>
+    /// <param name="guid">The unique identifier of the sub scope.</param>
+    /// <returns>The sub scope with the given <paramref name="guid"/>.</returns>
+    IScope GetScope(Guid guid);
+    /// <summary>
+    /// Gets the sub scope with the given <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The name of the sub scope.</param>
+    /// <returns>The sub scope with the given <paramref name="name"/>.</returns>
+    IScope GetScope(string name);
+
+    /// <summary>
+    /// Clears the current instance.
+    /// </summary>
+    void Clear();
+
+    /// <summary>
+    /// Occurs when a variable has been added to the current instance.
+    /// </summary>
+    event EventHandler<VariableEventArgs> VariableAdded;
+    /// <summary>
+    /// Occurs when a variable has been deleted from the current instance.
+    /// </summary>
+    event EventHandler<VariableEventArgs> VariableRemoved;
+    /// <summary>
+    /// Occurs when an alias has been added to the current instance.
+    /// </summary>
+    event EventHandler<AliasEventArgs> AliasAdded;
+    /// <summary>
+    /// Occurs when an alias has been removed from the current instance.
+    /// </summary>
+    event EventHandler<AliasEventArgs> AliasRemoved;
+    /// <summary>
+    /// Occurs when a sub scope has been added to the current instance.
+    /// </summary>
+    event EventHandler<ScopeIndexEventArgs> SubScopeAdded;
+    /// <summary>
+    /// Occurs when a sub scope has been deleted from the current instance.
+    /// </summary>
+    event EventHandler<ScopeIndexEventArgs> SubScopeRemoved;
+    /// <summary>
+    /// Occurs when the sub scopes have been reordered.
+    /// </summary>
+    event EventHandler SubScopesReordered;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IStorable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IStorable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IStorable.cs	(revision 1270)
@@ -0,0 +1,67 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent objects that are de- and serializeable.
+  /// </summary>
+  public interface IStorable {
+    /// <summary>
+    /// Gets the objects unique identifier.
+    /// </summary>
+    Guid Guid { get; }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <returns>The cloned object.</returns>
+    object Clone();
+    /// <summary>
+    /// Clones the current instance, considering already cloned objects.
+    /// </summary>
+    /// <param name="clonedObjects">All already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object.</returns>
+    object Clone(IDictionary<Guid, object> clonedObjects);
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified 
+    /// <typeparamref name="document"/>.
+    /// </summary>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects);
+    /// <summary>
+    /// Loads the persisted object from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <param name="node">The <see cref="XmlNode"/> where the object is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid 
+    /// cycles.)</param>
+    void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVariable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVariable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVariable.cs	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent a variable (of an operator) having a name and a value.
+  /// </summary>
+  public interface IVariable : IItem {
+    /// <summary>
+    /// Gets or sets the name of the variable.
+    /// </summary>
+    string Name { get; set; }
+    /// <summary>
+    /// Gets or sets the value of the variable.
+    /// </summary>
+    IItem Value { get; set; }
+
+    /// <summary>
+    /// Gets the value of the variable.
+    /// </summary>
+    /// <typeparam name="T">The type of the variable's value.</typeparam>
+    /// <returns>The value of the current instance.</returns>
+    T GetValue<T>() where T : class, IItem;
+
+    /// <summary>
+    /// Occurs when the name of the variable is currently changing.
+    /// </summary>
+    event EventHandler<NameChangingEventArgs> NameChanging;
+    /// <summary>
+    /// Occurs when the name of the current instance has been changed.
+    /// </summary>
+    event EventHandler NameChanged;
+    /// <summary>
+    /// Occurs when the value of the current instance has been changed.
+    /// </summary>
+    event EventHandler ValueChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVariableInfo.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVariableInfo.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVariableInfo.cs	(revision 1270)
@@ -0,0 +1,66 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to store meta-information about variables/parameters of operators.
+  /// </summary>
+  public interface IVariableInfo : IItem {
+    /// <summary>
+    /// Gets or sets the actual name of the variable info.
+    /// </summary>
+    string ActualName { get; set; }
+    /// <summary>
+    /// Gets or sets the formal name of the current instance.
+    /// </summary>
+    string FormalName { get; }
+    /// <summary>
+    /// Gets the description of the current instance.
+    /// </summary>
+    string Description { get; }
+    /// <summary>
+    /// Gets the data type of the current instance.
+    /// </summary>
+    Type DataType { get; }
+    /// <summary>
+    /// Gets the kind of the variable info (in, out, new,...).
+    /// </summary>
+    VariableKind Kind { get; }
+    /// <summary>
+    /// Gets or sets a boolean value whether the current instance is a local variable info.
+    /// </summary>
+    bool Local { get; set; }
+
+    /// <summary>
+    /// Occurs when the actual name of the current instance has been changed.
+    /// </summary>
+    event EventHandler ActualNameChanged;
+    /// <summary>
+    /// Occurs when the local flag has been changed.
+    /// </summary>
+    event EventHandler LocalChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IView.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// An interface for all kinds visual representations of items (objects, operators...).
+  /// </summary>
+  public interface IView : IControl {
+    /// <summary>
+    /// Gets the current item instance.
+    /// </summary>
+    IItem Item { get; }
+    /// <summary>
+    /// Gets or sets the caption of the current instance. 
+    /// </summary>
+    string Caption { get; set; }
+
+    /// <summary>
+    /// Occurs when the item was changed.
+    /// </summary>
+    event EventHandler ItemChanged;
+    /// <summary>
+    /// Occurs when the caption was changed.
+    /// </summary>
+    event EventHandler CaptionChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IViewable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IViewable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IViewable.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Interface to represent items that can displayed visually.
+  /// </summary>
+  public interface IViewable {
+    /// <summary>
+    /// Creates a view to display the current instance.
+    /// </summary>
+    /// <returns>The created view.</returns>
+    IView CreateView();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVisualizationItem.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVisualizationItem.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Interfaces/IVisualizationItem.cs	(revision 1270)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Marker interface for items that can be visualized.
+  /// </summary>
+  public interface IVisualizationItem : IItem { }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBase.cs	(revision 1270)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents the base class for all basic item types.
+  /// </summary>
+  public abstract class ItemBase : StorableBase, IItem {
+    /// <summary>
+    /// Creates a new instance of <see cref="ItemBaseView"/> for 
+    /// visual representation of the current instance.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ItemBaseView"/>.</returns>
+    public virtual IView CreateView() {
+      return new ItemBaseView(this);
+    }
+
+    /// <summary>
+    /// Gets the string representation of the current instance.
+    /// </summary>
+    /// <returns>The type name of the current instance.</returns>
+    public override string ToString() {
+      return GetType().Name;
+    }
+
+    /// <summary>
+    /// Fires a new <c>Changed</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnChanged"/>.</remarks>
+    public void FireChanged() {
+      OnChanged();
+    }
+
+    /// <summary>
+    /// Occurs when the current item was changed.
+    /// </summary>
+    public event EventHandler Changed;
+    /// <summary>
+    /// Fires a new <c>Changed</c> event.
+    /// </summary>
+    protected virtual void OnChanged() {
+      if (Changed != null)
+        Changed(this, new EventArgs());
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.Designer.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class ItemBaseView {
+    /// <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.messageLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // messageLabel
+      // 
+      this.messageLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.messageLabel.AutoSize = true;
+      this.messageLabel.Location = new System.Drawing.Point(55, 0);
+      this.messageLabel.Name = "messageLabel";
+      this.messageLabel.Size = new System.Drawing.Size(91, 13);
+      this.messageLabel.TabIndex = 0;
+      this.messageLabel.Text = "No view available";
+      // 
+      // DataBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.messageLabel);
+      this.Name = "DataBaseView";
+      this.Size = new System.Drawing.Size(201, 46);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label messageLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core { 
+  /// <summary>
+  /// The base class for visual representations of items.
+  /// </summary>
+  public partial class ItemBaseView : ViewBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemBaseView"/>.
+    /// </summary>
+    public ItemBaseView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Intializes a new instance of <see cref="ItemBaseView"/> with the given <paramref name="item"/>.
+    /// </summary>
+    /// <param name="item">The item that should be displayed.</param>
+    public ItemBaseView(IItem item)
+      : this() {
+      Item = item;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemBaseView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemEventArgs.cs	(revision 1270)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected item.
+  /// </summary>
+  public class ItemEventArgs : EventArgs {
+    private IItem myItem;
+    /// <summary>
+    /// Gets the affected item.
+    /// </summary>
+    public IItem Item {
+      get { return myItem; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemEventArgs"/> with the given <paramref name="item"/>.
+    /// </summary>
+    /// <param name="item">The affected item.</param>
+    public ItemEventArgs(IItem item) {
+      myItem = item;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemIndexEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemIndexEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ItemIndexEventArgs.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected item at a specified index.
+  /// </summary>
+  public class ItemIndexEventArgs : ItemEventArgs {
+    private int myIndex;
+    /// <summary>
+    /// Gets the affected index.
+    /// </summary>
+    public int Index {
+      get { return myIndex; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemIndexEventArgs"/> with the given <paramref name="item"/>
+    /// and the given <paramref name="index"/>.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="ItemEventArgs"/>.</remarks>
+    /// <param name="item">The affected item.</param>
+    /// <param name="index">The affected index.</param>
+    public ItemIndexEventArgs(IItem item, int index)
+      : base(item) {
+      myIndex = index;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/KeyValueEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/KeyValueEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/KeyValueEventArgs.cs	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected key-value pair.
+  /// </summary>
+  public class KeyValueEventArgs : EventArgs {
+
+    private IItem key;
+    /// <summary>
+    /// Gets the affected key.
+    /// </summary>
+    public IItem Key {
+      get { return key; }
+    }
+
+    private IItem value;
+    /// <summary>
+    /// Gets the affected value.
+    /// </summary>
+    public IItem Value {
+      get { return value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="KeyValueEventArgs"/> with the given <paramref name="key"/>
+    /// and <paramref name="value"/>.
+    /// </summary>
+    /// <param name="key">The affected key.</param>
+    /// <param name="value">The affected value.</param>
+    public KeyValueEventArgs(IItem key, IItem value) {
+      this.key = key;
+      this.value = value; 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/NameChangingEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/NameChangingEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/NameChangingEventArgs.cs	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ComponentModel;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected name.
+  /// </summary>
+  public class NameChangingEventArgs : CancelEventArgs {
+    private string myName;
+    /// <summary>
+    /// Gets the affected name.
+    /// </summary>
+    public string Name {
+      get { return myName; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NameChangingEventArgs"/> 
+    /// with the specified <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The affected name.</param>
+    public NameChangingEventArgs(string name)
+      : base() {
+      myName = name;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="NameChangingEventArgs"/> 
+    /// with the specified <paramref name="name"/> and a flag whether the event has been canceled.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="CancelEventArgs"/>.</remarks> 
+    /// <param name="name">The affected name.</param>
+    /// <param name="cancel">Flag, whether the event has been canceled.</param>
+    public NameChangingEventArgs(string name, bool cancel)
+      : base(cancel) {
+      myName = name;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperationEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperationEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperationEventArgs.cs	(revision 1270)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected operation.
+  /// </summary>
+  public class OperationEventArgs : EventArgs {
+    private IOperation myOperation;
+    /// <summary>
+    /// Gets the affected operation.
+    /// </summary>
+    public IOperation Operation {
+      get { return myOperation; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperationEventArgs"/> with the given 
+    /// <paramref name="operation"/>.
+    /// </summary>
+    /// <param name="operation">The affected operation.</param>
+    public OperationEventArgs(IOperation operation) {
+      myOperation = operation;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBase.cs	(revision 1270)
@@ -0,0 +1,681 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The base class for all operators.
+  /// </summary>
+  public abstract class OperatorBase : ConstrainedItemBase, IOperator {
+    private string myName;
+    /// <summary>
+    /// Gets or sets the name of the operator.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnNameChanged"/> in the setter.</remarks>
+    public string Name {
+      get { return myName; }
+      set {
+        if (myName != value) {
+          myName = value;
+          OnNameChanged();
+        }
+      }
+    }
+    /// <summary>
+    /// Gets the description of the current operator.
+    /// </summary>
+    /// <remarks>Returns "No operator description available" if the method is not overriden.</remarks>
+    public virtual string Description {
+      get { return "No operator description available."; }
+    }
+    /// <summary>
+    /// Flag whether the current instance has been canceled.
+    /// </summary>
+    protected bool myCanceled;
+    /// <inheritdoc/>
+    public bool Canceled {
+      get { return myCanceled; }
+    }
+    private bool myBreakpoint;
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnBreakpointChanged"/> in the setter.</remarks>
+    public bool Breakpoint {
+      get { return myBreakpoint; }
+      set {
+        if (value != myBreakpoint) {
+          myBreakpoint = value;
+          OnBreakpointChanged();
+        }
+      }
+    }
+
+    private List<IOperator> mySubOperators;
+    /// <summary>
+    /// Gets a list of all suboperators.
+    /// <note type="caution"> Returns the suboperators read-only!</note>
+    /// </summary>
+    public virtual IList<IOperator> SubOperators {
+      get { return mySubOperators.AsReadOnly(); }
+    }
+    private Dictionary<string, IVariableInfo> myVariableInfos;
+    /// <inheritdoc/>
+    public virtual ICollection<IVariableInfo> VariableInfos {
+      get { return myVariableInfos.Values; }
+    }
+    private Dictionary<string, IVariable> myVariables;
+    /// <inheritdoc/>
+    public virtual ICollection<IVariable> Variables {
+      get { return myVariables.Values; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBase"/> setting the breakpoint flag and 
+    /// the canceled flag to <c>false</c> and the name of the operator to the type name. 
+    /// </summary>
+    protected OperatorBase() {
+      myName = this.GetType().Name;
+      myCanceled = false;
+      myBreakpoint = false;
+      mySubOperators = new List<IOperator>();
+      myVariableInfos = new Dictionary<string, IVariableInfo>();
+      myVariables = new Dictionary<string, IVariable>();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Clones also sub operators, variables and variable infos.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="OperatorBase"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OperatorBase clone = (OperatorBase)base.Clone(clonedObjects);
+      clone.myName = Name;
+      clone.mySubOperators.Clear();
+      for (int i = 0; i < SubOperators.Count; i++)
+        clone.AddSubOperator((IOperator)Auxiliary.Clone(SubOperators[i], clonedObjects));
+      clone.myVariableInfos.Clear();
+      foreach (IVariableInfo variableInfo in myVariableInfos.Values)
+        clone.AddVariableInfo((IVariableInfo)Auxiliary.Clone(variableInfo, clonedObjects));
+      clone.myVariables.Clear();
+      foreach (IVariable variable in myVariables.Values)
+        clone.AddVariable((IVariable)Auxiliary.Clone(variable, clonedObjects));
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="OperatorBaseView"/> to represent the current operator
+    /// visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="OperatorBaseView"/>.</returns>
+    public override IView CreateView() {
+      return new OperatorBaseView(this);
+    }
+
+    #region SubOperator Methods
+    /// <inheritdoc cref="HeuristicLab.Core.IOperator.AddSubOperator(HeuristicLab.Core.IOperator)"/>
+    /// <param name="subOperator">The sub operator to add.</param>
+    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
+    public virtual void AddSubOperator(IOperator subOperator) {
+      mySubOperators.Add(subOperator);
+      OnSubOperatorAdded(subOperator, mySubOperators.Count - 1);
+    }
+    /// <inheritdoc cref="IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator)"/>
+    /// <param name="subOperator">The sub operator to add.</param>
+    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
+    public virtual bool TryAddSubOperator(IOperator subOperator) {
+      mySubOperators.Add(subOperator);
+      if (IsValid()) {
+        OnSubOperatorAdded(subOperator, mySubOperators.Count - 1);
+        return true;
+      } else {
+        mySubOperators.RemoveAt(mySubOperators.Count - 1);
+        return false;
+      }
+    }
+    /// <inheritdoc cref="HeuristicLab.Core.IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator, 
+    /// out System.Collections.Generic.ICollection&lt;HeuristicLab.Core.IConstraint&gt;)"/>
+    /// <param name="subOperator">The sub operator to add.</param>
+    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
+    public virtual bool TryAddSubOperator(IOperator subOperator, out ICollection<IConstraint> violatedConstraints) {
+      mySubOperators.Add(subOperator);
+      if (IsValid(out violatedConstraints)) {
+        OnSubOperatorAdded(subOperator, mySubOperators.Count - 1);
+        return true;
+      } else {
+        mySubOperators.RemoveAt(mySubOperators.Count - 1);
+        return false;
+      }
+    }
+    /// <inheritdoc cref="HeuristicLab.Core.IOperator.AddSubOperator(HeuristicLab.Core.IOperator, int)"/>
+    /// <param name="subOperator">The sub operator to add.</param>
+    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
+    public virtual void AddSubOperator(IOperator subOperator, int index) {
+      mySubOperators.Insert(index, subOperator);
+      OnSubOperatorAdded(subOperator, index);
+    }
+    /// <inheritdoc cref="IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator, int)"/>
+    /// <param name="subOperator">The sub operator to add.</param>
+    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
+    public virtual bool TryAddSubOperator(IOperator subOperator, int index) {
+      mySubOperators.Insert(index, subOperator);
+      if (IsValid()) {
+        OnSubOperatorAdded(subOperator, index);
+        return true;
+      } else {
+        mySubOperators.RemoveAt(index);
+        return false;
+      }
+    }
+    /// <inheritdoc cref="IOperator.TryAddSubOperator(HeuristicLab.Core.IOperator, int, out
+    /// System.Collections.Generic.ICollection&lt;HeuristicLab.Core.IConstraint&gt;)"/>
+    /// <param name="subOperator">The sub operator to add.</param>
+    /// <remarks>Calls <see cref="OnSubOperatorAdded"/>.</remarks>
+    public virtual bool TryAddSubOperator(IOperator subOperator, int index, out ICollection<IConstraint> violatedConstraints) {
+      mySubOperators.Insert(index, subOperator);
+      if (IsValid(out violatedConstraints)) {
+        OnSubOperatorAdded(subOperator, index);
+        return true;
+      } else {
+        mySubOperators.RemoveAt(index);
+        return false;
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnSubOperatorRemoved"/>.</remarks>
+    public virtual void RemoveSubOperator(int index) {
+      IOperator op = mySubOperators[index];
+      mySubOperators.RemoveAt(index);
+      OnSubOperatorRemoved(op, index);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnSubOperatorRemoved"/>.</remarks>
+    public virtual bool TryRemoveSubOperator(int index) {
+      IOperator op = mySubOperators[index];
+      mySubOperators.RemoveAt(index);
+      if (IsValid()) {
+        OnSubOperatorRemoved(op, index);
+        return true;
+      } else {
+        mySubOperators.Insert(index, op);
+        return false;
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnSubOperatorRemoved"/>.</remarks>
+    public virtual bool TryRemoveSubOperator(int index, out ICollection<IConstraint> violatedConstraints) {
+      IOperator op = mySubOperators[index];
+      mySubOperators.RemoveAt(index);
+      if (IsValid(out violatedConstraints)) {
+        OnSubOperatorRemoved(op, index);
+        return true;
+      } else {
+        mySubOperators.Insert(index, op);
+        return false;
+      }
+    }
+    #endregion
+
+    #region VariableInfo Methods
+    /// <inheritdoc/>
+    public virtual IVariableInfo GetVariableInfo(string formalName) {
+      IVariableInfo info;
+      if (myVariableInfos.TryGetValue(formalName, out info))
+        return info;
+      else
+        return null;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableInfoAdded"/>.</remarks>
+    public virtual void AddVariableInfo(IVariableInfo variableInfo) {
+      myVariableInfos.Add(variableInfo.FormalName, variableInfo);
+      OnVariableInfoAdded(variableInfo);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableInfoAdded"/>.</remarks>
+    public virtual bool TryAddVariableInfo(IVariableInfo variableInfo) {
+      myVariableInfos.Add(variableInfo.FormalName, variableInfo);
+      if (IsValid()) {
+        OnVariableInfoAdded(variableInfo);
+        return true;
+      } else {
+        myVariableInfos.Remove(variableInfo.FormalName);
+        return false;
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableInfoAdded"/>.</remarks>
+    public virtual bool TryAddVariableInfo(IVariableInfo variableInfo, out ICollection<IConstraint> violatedConstraints) {
+      myVariableInfos.Add(variableInfo.FormalName, variableInfo);
+      if (IsValid(out violatedConstraints)) {
+        OnVariableInfoAdded(variableInfo);
+        return true;
+      } else {
+        myVariableInfos.Remove(variableInfo.FormalName);
+        return false;
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableInfoRemoved"/>.</remarks>
+    public virtual void RemoveVariableInfo(string formalName) {
+      IVariableInfo variableInfo;
+      if (myVariableInfos.TryGetValue(formalName, out variableInfo)) {
+        myVariableInfos.Remove(formalName);
+        OnVariableInfoRemoved(variableInfo);
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableInfoRemoved"/>.</remarks>
+    public virtual bool TryRemoveVariableInfo(string formalName) {
+      IVariableInfo variableInfo;
+      if (myVariableInfos.TryGetValue(formalName, out variableInfo)) {
+        myVariableInfos.Remove(formalName);
+        if (IsValid()) {
+          OnVariableInfoRemoved(variableInfo);
+          return true;
+        } else {
+          myVariableInfos.Add(formalName, variableInfo);
+          return false;
+        }
+      }
+      return true;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableInfoRemoved"/>.</remarks>
+    public virtual bool TryRemoveVariableInfo(string formalName, out ICollection<IConstraint> violatedConstraints) {
+      IVariableInfo variableInfo;
+      if (myVariableInfos.TryGetValue(formalName, out variableInfo)) {
+        myVariableInfos.Remove(formalName);
+        if (IsValid(out violatedConstraints)) {
+          OnVariableInfoRemoved(variableInfo);
+          return true;
+        } else {
+          myVariableInfos.Add(formalName, variableInfo);
+          return false;
+        }
+      }
+      violatedConstraints = new List<IConstraint>();
+      return true;
+    }
+    #endregion
+
+    #region Variable Methods
+    /// <inheritdoc/>
+    public virtual IVariable GetVariable(string name) {
+      IVariable variable;
+      if (myVariables.TryGetValue(name, out variable))
+        return variable;
+      else
+        return null;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableAdded"/> and adds <c>NameChanging</c> and <c>NameChanged</c>
+    /// event handlers.</remarks>
+    public virtual void AddVariable(IVariable variable) {
+      myVariables.Add(variable.Name, variable);
+      variable.NameChanging += new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+      variable.NameChanged += new EventHandler(Variable_NameChanged);
+      OnVariableAdded(variable);
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableAdded"/> and adds <c>NameChanging</c> and <c>NameChanged</c>
+    /// event handlers.</remarks>
+    public virtual bool TryAddVariable(IVariable variable) {
+      myVariables.Add(variable.Name, variable);
+      if (IsValid()) {
+        variable.NameChanging += new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+        variable.NameChanged += new EventHandler(Variable_NameChanged);
+        OnVariableAdded(variable);
+        return true;
+      } else {
+        myVariableInfos.Remove(variable.Name);
+        return false;
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableAdded"/> and adds <c>NameChanging</c> and <c>NameChanged</c>
+    /// event handlers.</remarks>
+    public virtual bool TryAddVariable(IVariable variable, out ICollection<IConstraint> violatedConstraints) {
+      myVariables.Add(variable.Name, variable);
+      if (IsValid(out violatedConstraints)) {
+        variable.NameChanging += new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+        variable.NameChanged += new EventHandler(Variable_NameChanged);
+        OnVariableAdded(variable);
+        return true;
+      } else {
+        myVariableInfos.Remove(variable.Name);
+        return false;
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableRemoved"/> and removes <c>NameChanging</c> and <c>NameChanged</c>
+    /// event handlers.</remarks>
+    public virtual void RemoveVariable(string name) {
+      IVariable variable;
+      if (myVariables.TryGetValue(name, out variable)) {
+        variable.NameChanging -= new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+        variable.NameChanged -= new EventHandler(Variable_NameChanged);
+        myVariables.Remove(name);
+        OnVariableRemoved(variable);
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableRemoved"/> and removes <c>NameChanging</c> and <c>NameChanged</c>
+    /// event handlers.</remarks>
+    public virtual bool TryRemoveVariable(string name) {
+      IVariable variable;
+      if (myVariables.TryGetValue(name, out variable)) {
+        myVariables.Remove(name);
+        if (IsValid()) {
+          variable.NameChanging -= new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+          variable.NameChanged -= new EventHandler(Variable_NameChanged);
+          OnVariableRemoved(variable);
+          return true;
+        } else {
+          myVariables.Add(name, variable);
+          return false;
+        }
+      }
+      return true;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnVariableRemoved"/> and removes <c>NameChanging</c> and <c>NameChanged</c>
+    /// event handlers.</remarks>
+    public virtual bool TryRemoveVariable(string name, out ICollection<IConstraint> violatedConstraints) {
+      IVariable variable;
+      if (myVariables.TryGetValue(name, out variable)) {
+        myVariables.Remove(name);
+        if (IsValid(out violatedConstraints)) {
+          variable.NameChanging -= new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+          variable.NameChanged -= new EventHandler(Variable_NameChanged);
+          OnVariableRemoved(variable);
+          return true;
+        } else {
+          myVariables.Add(name, variable);
+          return false;
+        }
+      }
+      violatedConstraints = new List<IConstraint>();
+      return true;
+    }
+    private void Variable_NameChanging(object sender, NameChangingEventArgs e) {
+      e.Cancel = myVariables.ContainsKey(e.Name);
+    }
+    private void Variable_NameChanged(object sender, EventArgs e) {
+      IVariable variable = (IVariable)sender;
+      string oldName = null;
+      foreach (KeyValuePair<string, IVariable> element in myVariables) {
+        if (element.Value == variable)
+          oldName = element.Key;
+      }
+      myVariables.Remove(oldName);
+      myVariables.Add(variable.Name, variable);
+    }
+    /// <inheritdoc cref="IOperator.GetVariableValue&lt;T&gt;(string, HeuristicLab.Core.IScope, bool)"/>
+    ///  <remarks>Calls <see cref="GetVariableValue&lt;T&gt;(string, HeuristicLab.Core.IScope, bool, bool)"/> 
+    /// with <c>throwOnError</c> set to <c>false</c>.</remarks>
+    public T GetVariableValue<T>(string formalName, IScope scope, bool recursiveLookup) where T : class, IItem {
+      return GetVariableValue<T>(formalName, scope, recursiveLookup, true);
+    }
+    /// <inheritdoc cref="IOperator.GetVariableValue&lt;T&gt;(string, HeuristicLab.Core.IScope, bool, bool)"/>
+    /// <remarks>Calls 
+    /// <see cref="GetVariableValue(string, HeuristicLab.Core.IScope, bool, bool)"/>.</remarks>
+    public T GetVariableValue<T>(string formalName, IScope scope, bool recursiveLookup, bool throwOnError) where T : class, IItem {
+      return (T)GetVariableValue(formalName, scope, recursiveLookup, throwOnError);
+    }
+    /// <inheritdoc cref="IOperator.GetVariableValue(string, HeuristicLab.Core.IScope, bool)"/>
+    /// <remarks>Calls <see cref="GetVariableValue(string, HeuristicLab.Core.IScope, bool, bool)"/> 
+    /// with <c>throwOnError</c> set to <c>false</c>.</remarks>
+    public IItem GetVariableValue(string formalName, IScope scope, bool recursiveLookup) {
+      return GetVariableValue(formalName, scope, recursiveLookup, true);
+    }
+    /// <inheritdoc cref="IOperator.GetVariableValue(string, HeuristicLab.Core.IScope, bool, bool)"/>
+    public virtual IItem GetVariableValue(string formalName, IScope scope, bool recursiveLookup, bool throwOnError) {
+      IVariableInfo info = GetVariableInfo(formalName);
+      if (info.Local) {
+        IVariable variable;
+        if (myVariables.TryGetValue(info.ActualName, out variable))
+          return variable.Value;
+        else {
+          if (throwOnError)
+            throw new ArgumentException("Variable " + info.ActualName + " not found");
+          else
+            return null;
+        }
+      } else {
+        return scope.GetVariableValue(formalName, recursiveLookup, throwOnError);
+      }
+    }
+    #endregion
+    /// <inheritdoc/>
+    public virtual IOperation Execute(IScope scope) {
+      myCanceled = false;
+
+      foreach (IVariableInfo variableInfo in VariableInfos)
+        scope.AddAlias(variableInfo.FormalName, variableInfo.ActualName);
+
+      IOperation next = Apply(scope);
+
+      foreach (IVariableInfo variableInfo in VariableInfos)
+        scope.RemoveAlias(variableInfo.FormalName);
+
+      OnExecuted();
+      return next;
+    }
+    /// <inheritdoc/>
+    /// <remarks>Sets property <see cref="Canceled"/> to <c>true</c>.</remarks>
+    public virtual void Abort() {
+      myCanceled = true;
+    }
+    /// <summary>
+    /// Performs the current operator on the specified <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to execute the operator</param>
+    /// <returns><c>null</c>.</returns>
+    public virtual IOperation Apply(IScope scope) {
+      return null;
+    }
+    /// <inheritdoc/>
+    public event EventHandler NameChanged;
+    /// <summary>
+    /// Fires a new <c>NameChanged</c> event.
+    /// </summary>
+    protected virtual void OnNameChanged() {
+      if (NameChanged != null) {
+        NameChanged(this, new EventArgs());
+      }
+    }
+    /// <inheritdoc/>
+    public event EventHandler BreakpointChanged;
+    /// <summary>
+    /// Fires a new <c>BreakpointChanged</c> event.
+    /// </summary>
+    protected virtual void OnBreakpointChanged() {
+      if (BreakpointChanged != null) {
+        BreakpointChanged(this, new EventArgs());
+      }
+    }
+    /// <inheritdoc/>
+    public event EventHandler<OperatorIndexEventArgs> SubOperatorAdded;
+    /// <summary>
+    /// Fires a new <c>SubOperatorAdded</c> event.
+    /// </summary>
+    /// <param name="subOperator">The sub operator that has been added.</param>
+    /// <param name="index">The position where the operator has been added.</param>
+    protected virtual void OnSubOperatorAdded(IOperator subOperator, int index) {
+      if (SubOperatorAdded != null)
+        SubOperatorAdded(this, new OperatorIndexEventArgs(subOperator, index));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<OperatorIndexEventArgs> SubOperatorRemoved;
+    /// <summary>
+    /// Fires a new <c>SubOperatorRemoved</c> event.
+    /// </summary>
+    /// <param name="subOperator">The sub operator that has been removed.</param>
+    /// <param name="index">The position where the operator has been removed.</param>
+    protected virtual void OnSubOperatorRemoved(IOperator subOperator, int index) {
+      if (SubOperatorRemoved != null)
+        SubOperatorRemoved(this, new OperatorIndexEventArgs(subOperator, index));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<VariableInfoEventArgs> VariableInfoAdded;
+    /// <summary>
+    /// Fires a new <c>VariableInfoAdded</c> event.
+    /// </summary>
+    /// <param name="variableInfo">The variable info that has been added.</param>
+    protected virtual void OnVariableInfoAdded(IVariableInfo variableInfo) {
+      if (VariableInfoAdded != null)
+        VariableInfoAdded(this, new VariableInfoEventArgs(variableInfo));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<VariableInfoEventArgs> VariableInfoRemoved;
+    /// <summary>
+    /// Fires a new <c>VariableInfoRemoved</c> event.
+    /// </summary>
+    /// <param name="variableInfo">The variable info that has been removed.</param>
+    protected virtual void OnVariableInfoRemoved(IVariableInfo variableInfo) {
+      if (VariableInfoRemoved != null)
+        VariableInfoRemoved(this, new VariableInfoEventArgs(variableInfo));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<VariableEventArgs> VariableAdded;
+    /// <summary>
+    /// Fires a new <c>VariableAdded</c> event.
+    /// </summary>
+    /// <param name="variable">The variable that has been added.</param>
+    protected virtual void OnVariableAdded(IVariable variable) {
+      if (VariableAdded != null)
+        VariableAdded(this, new VariableEventArgs(variable));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<VariableEventArgs> VariableRemoved;
+    /// <summary>
+    /// Fires a new <c>VariableRemoved</c> event.
+    /// </summary>
+    /// <param name="variable">The variable that has been removed</param>
+    protected virtual void OnVariableRemoved(IVariable variable) {
+      if (VariableRemoved != null)
+        VariableRemoved(this, new VariableEventArgs(variable));
+    }
+    /// <inheritdoc/>
+    public event EventHandler Executed;
+    /// <summary>
+    /// Fires a new <c>Executed</c> event.
+    /// </summary>
+    protected virtual void OnExecuted() {
+      if (Executed != null) {
+        Executed(this, new EventArgs());
+      }
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>
+    /// Calls <see cref="ConstrainedItemBase.GetXmlNode"/> of base class <see cref="ConstrainedItemBase"/>.
+    /// <br/>A quick overview how the single elements of the current instance are saved:
+    /// <list type="bullet">
+    /// <item>
+    /// <term>Name: </term>
+    /// <description>Saved as an <see cref="XmlAttribute"/> with the name <c>Name</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Breakpoint: </term>
+    /// <description>Is only saved if it set to <c>true</c>. 
+    /// Saved as an <see cref="XmlAttribute"/> with the name <c>Breakpoint</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Sub operators: </term>
+    /// <description>Saved as child node with tag name <c>SubOperators</c>. All sub operators are themselves
+    /// saved as child nodes.</description>
+    /// </item>
+    /// <item>
+    /// <term>Variable infos: </term>
+    /// <description>Saved as child node with tag name <c>VariableInfos</c>. All variable infos are themselves
+    /// saved as child nodes.</description>
+    /// </item>
+    /// <item>
+    /// <term>Variables: </term>
+    /// <description>Saved as child node with tag name <c>Variables</c>. All variables are themselves
+    /// saved as child nodes.</description>
+    /// </item> 
+    /// </list>
+    /// </remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute nameAttribute = document.CreateAttribute("Name");
+      nameAttribute.Value = Name;
+      node.Attributes.Append(nameAttribute);
+      if (Breakpoint) {
+        XmlAttribute breakpointAttribute = document.CreateAttribute("Breakpoint");
+        breakpointAttribute.Value = Breakpoint.ToString();
+        node.Attributes.Append(breakpointAttribute);
+      }
+      XmlNode subOperatorsNode = document.CreateNode(XmlNodeType.Element, "SubOperators", null);
+      for (int i = 0; i < SubOperators.Count; i++)
+        subOperatorsNode.AppendChild(PersistenceManager.Persist(SubOperators[i], document, persistedObjects));
+      node.AppendChild(subOperatorsNode);
+      XmlNode infosNode = document.CreateNode(XmlNodeType.Element, "VariableInfos", null);
+      foreach (IVariableInfo info in myVariableInfos.Values)
+        infosNode.AppendChild(PersistenceManager.Persist(info, document, persistedObjects));
+      node.AppendChild(infosNode);
+      XmlNode variablesNode = document.CreateNode(XmlNodeType.Element, "Variables", null);
+      foreach (IVariable variable in myVariables.Values)
+        variablesNode.AppendChild(PersistenceManager.Persist(variable, document, persistedObjects));
+      node.AppendChild(variablesNode);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted operation from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ConstrainedItemBase.Populate"/> of base class 
+    /// <see cref="ConstrainedItemBase"/>.
+    /// For informations how the different elements must be saved please see <see cref="GetXmlNode"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the operation is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myName = node.Attributes["Name"].Value;
+      if (node.Attributes["Breakpoint"] != null)
+        myBreakpoint = bool.Parse(node.Attributes["Breakpoint"].Value);
+      XmlNode subOperatorsNode = node.SelectSingleNode("SubOperators");
+      for (int i = 0; i < subOperatorsNode.ChildNodes.Count; i++)
+        AddSubOperator((IOperator)PersistenceManager.Restore(subOperatorsNode.ChildNodes[i], restoredObjects));
+      XmlNode infosNode = node.SelectSingleNode("VariableInfos");
+      myVariableInfos.Clear();
+      foreach (XmlNode infoNode in infosNode.ChildNodes)
+        AddVariableInfo((IVariableInfo)PersistenceManager.Restore(infoNode, restoredObjects));
+      XmlNode variablesNode = node.SelectSingleNode("Variables");
+      myVariables.Clear();
+      foreach (XmlNode variableNode in variablesNode.ChildNodes)
+        AddVariable((IVariable)PersistenceManager.Restore(variableNode, restoredObjects));
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.Designer.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  partial class OperatorBaseDescriptionView {
+    /// <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.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ReadOnly = true;
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(423, 333);
+      this.descriptionTextBox.TabIndex = 0;
+      // 
+      // OperatorBaseDescriptionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.descriptionTextBox);
+      this.Name = "OperatorBaseDescriptionView";
+      this.Size = new System.Drawing.Size(423, 333);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private TextBox descriptionTextBox;
+
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of the description of operators.
+  /// </summary>
+  public partial class OperatorBaseDescriptionView : ViewBase {
+    /// <summary>
+    /// Gets or sets the operator whose description should be displayed.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+      set { base.Item = value; }
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseDescriptionView"/> with caption "Operator".
+    /// </summary>
+    public OperatorBaseDescriptionView() {
+      InitializeComponent();
+      Caption = "Operator";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseDescriptionView"/> 
+    /// with the operator <paramref name="op"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBaseDescriptionView()"/>.</remarks>
+    /// <param name="op">The operator whose description to display.</param>
+    public OperatorBaseDescriptionView(IOperator op)
+      : this() {
+      Operator = op;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (Operator == null) {
+        Caption = "Operator";
+        descriptionTextBox.Text = "";
+        descriptionTextBox.Enabled = false;
+      } else {
+        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
+        descriptionTextBox.Text = Operator.Description;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseDescriptionView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.Designer.cs	(revision 1270)
@@ -0,0 +1,144 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  partial class OperatorBaseVariableInfosView {
+    /// <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) {
+      foreach (ListViewItem item in variableInfosListView.Items) {
+        ((IVariableInfo)item.Tag).ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
+      }
+      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.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.variableInfosGroupBox = new System.Windows.Forms.GroupBox();
+      this.variableInfosListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
+      this.variableInfoDetailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.variableInfosGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.variableInfosGroupBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.variableInfoDetailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(423, 333);
+      this.splitContainer.SplitterDistance = 203;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // variableInfosGroupBox
+      // 
+      this.variableInfosGroupBox.Controls.Add(this.variableInfosListView);
+      this.variableInfosGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableInfosGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.variableInfosGroupBox.Name = "variableInfosGroupBox";
+      this.variableInfosGroupBox.Size = new System.Drawing.Size(203, 333);
+      this.variableInfosGroupBox.TabIndex = 0;
+      this.variableInfosGroupBox.TabStop = false;
+      this.variableInfosGroupBox.Text = "&Variable Infos";
+      // 
+      // variableInfosListView
+      // 
+      this.variableInfosListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.variableInfosListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableInfosListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.variableInfosListView.HideSelection = false;
+      this.variableInfosListView.Location = new System.Drawing.Point(3, 16);
+      this.variableInfosListView.Name = "variableInfosListView";
+      this.variableInfosListView.Size = new System.Drawing.Size(197, 314);
+      this.variableInfosListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.variableInfosListView.TabIndex = 0;
+      this.variableInfosListView.UseCompatibleStateImageBehavior = false;
+      this.variableInfosListView.View = System.Windows.Forms.View.Details;
+      this.variableInfosListView.SelectedIndexChanged += new System.EventHandler(this.variableInfosListView_SelectedIndexChanged);
+      this.variableInfosListView.SizeChanged += new System.EventHandler(this.variableInfosListView_SizeChanged);
+      // 
+      // variableInfoDetailsGroupBox
+      // 
+      this.variableInfoDetailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableInfoDetailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.variableInfoDetailsGroupBox.Name = "variableInfoDetailsGroupBox";
+      this.variableInfoDetailsGroupBox.Size = new System.Drawing.Size(216, 333);
+      this.variableInfoDetailsGroupBox.TabIndex = 0;
+      this.variableInfoDetailsGroupBox.TabStop = false;
+      this.variableInfoDetailsGroupBox.Text = "&Details";
+      // 
+      // OperatorBaseVariableInfosView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "OperatorBaseVariableInfosView";
+      this.Size = new System.Drawing.Size(423, 333);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.variableInfosGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    protected SplitContainer splitContainer;
+    protected GroupBox variableInfosGroupBox;
+    protected ListView variableInfosListView;
+    protected GroupBox variableInfoDetailsGroupBox;
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.cs	(revision 1270)
@@ -0,0 +1,188 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of the information of the variables of an operator.
+  /// </summary>
+  public partial class OperatorBaseVariableInfosView : ViewBase {
+    /// <summary>
+    /// Gets or sets the operator whose variable infos should be represented visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+      set { base.Item = value; }
+    }
+    /// <summary>
+    /// Gets all selected variable infos.
+    /// <note type="caution"> Variable infos are returned read-only!</note>
+    /// </summary>
+    public ICollection<IVariableInfo> SelectedVariableInfos {
+      get {
+        List<IVariableInfo> selected = new List<IVariableInfo>();
+        foreach (ListViewItem item in variableInfosListView.SelectedItems)
+          selected.Add((IVariableInfo)item.Tag);
+        return selected.AsReadOnly();
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseVariableInfosView"/> with caption "Operator".
+    /// </summary>
+    public OperatorBaseVariableInfosView() {
+      InitializeComponent();
+      variableInfosListView.Columns[0].Width = Math.Max(0, variableInfosListView.Width - 25);
+      Caption = "Operator";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseVariableInfosView"/> with the given operator
+    /// <paramref name="op"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBaseVariableInfosView()"/>.</remarks>
+    /// <param name="op">The operator whose variable infos should be displayed.</param>
+    public OperatorBaseVariableInfosView(IOperator op)
+      : this() {
+      Operator = op;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      Operator.VariableInfoAdded -= new EventHandler<VariableInfoEventArgs>(OperatorBase_VariableInfoAdded);
+      Operator.VariableInfoRemoved -= new EventHandler<VariableInfoEventArgs>(OperatorBase_VariableInfoRemoved);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Operator.VariableInfoAdded += new EventHandler<VariableInfoEventArgs>(OperatorBase_VariableInfoAdded);
+      Operator.VariableInfoRemoved += new EventHandler<VariableInfoEventArgs>(OperatorBase_VariableInfoRemoved);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      variableInfoDetailsGroupBox.Controls.Clear();
+      if (Operator == null) {
+        Caption = "Operator";
+        variableInfosListView.Enabled = false;
+        variableInfoDetailsGroupBox.Enabled = false;
+      } else {
+        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
+        variableInfosListView.Enabled = true;
+        foreach (ListViewItem item in variableInfosListView.Items) {
+          ((IVariableInfo)item.Tag).ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
+        }
+        variableInfosListView.Items.Clear();
+        foreach (IVariableInfo variableInfo in Operator.VariableInfos) {
+          ListViewItem item = new ListViewItem();
+          item.Text = variableInfo.ActualName;
+          item.Tag = variableInfo;
+          variableInfosListView.Items.Add(item);
+          variableInfo.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
+        }
+        if (variableInfosListView.Items.Count > 0)
+          variableInfosListView.SelectedIndices.Add(0);
+      }
+    }
+
+    private void variableInfosListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if (variableInfoDetailsGroupBox.Controls.Count > 0)
+        variableInfoDetailsGroupBox.Controls[0].Dispose();
+      variableInfoDetailsGroupBox.Controls.Clear();
+      variableInfoDetailsGroupBox.Enabled = false;
+      if (variableInfosListView.SelectedItems.Count == 1) {
+        IVariableInfo variableInfo = (IVariableInfo)variableInfosListView.SelectedItems[0].Tag;
+        Control control = (Control)variableInfo.CreateView();
+        variableInfoDetailsGroupBox.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        variableInfoDetailsGroupBox.Enabled = true;
+      }
+      OnSelectedVariableInfosChanged();
+    }
+
+    /// <summary>
+    /// Occurs when the variables were changed, whose infos should be displayed.
+    /// </summary>
+    public event EventHandler SelectedVariableInfosChanged;
+    /// <summary>
+    /// Fires a new <c>SelectedVariableInfosChanged</c>.
+    /// </summary>
+    protected virtual void OnSelectedVariableInfosChanged() {
+      if (SelectedVariableInfosChanged != null)
+        SelectedVariableInfosChanged(this, new EventArgs());
+    }
+
+    #region Size Changed Events
+    private void variableInfosListView_SizeChanged(object sender, EventArgs e) {
+      if (variableInfosListView.Columns.Count > 0)
+        variableInfosListView.Columns[0].Width = Math.Max(0, variableInfosListView.Width - 25);
+    }
+    #endregion
+
+    #region VariableInfo Events
+    private void VariableInfo_ActualNameChanged(object sender, EventArgs e) {
+      IVariableInfo variableInfo = (IVariableInfo)sender;
+      foreach (ListViewItem item in variableInfosListView.Items) {
+        if (item.Tag == variableInfo)
+          item.Text = variableInfo.ActualName;
+      }
+    }
+    #endregion
+
+    #region OperatorBase Events
+    private void OperatorBase_VariableInfoAdded(object sender, VariableInfoEventArgs e) {
+      ListViewItem item = new ListViewItem();
+      item.Text = e.VariableInfo.ActualName;
+      item.Tag = e.VariableInfo;
+      variableInfosListView.Items.Add(item);
+      e.VariableInfo.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
+    }
+    private void OperatorBase_VariableInfoRemoved(object sender, VariableInfoEventArgs e) {
+      ListViewItem itemToDelete = null;
+      foreach (ListViewItem item in variableInfosListView.Items) {
+        if (item.Tag == e.VariableInfo)
+          itemToDelete = item;
+      }
+      e.VariableInfo.ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
+      variableInfosListView.Items.Remove(itemToDelete);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariableInfosView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.Designer.cs	(revision 1270)
@@ -0,0 +1,177 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  partial class OperatorBaseVariablesView {
+    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
+      foreach (ListViewItem item in variablesListView.Items) {
+        ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
+      }
+      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.removeVariableButton = new System.Windows.Forms.Button();
+      this.addVariableButton = new System.Windows.Forms.Button();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.variablesGroupBox = new System.Windows.Forms.GroupBox();
+      this.variablesListView = new System.Windows.Forms.ListView();
+      this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
+      this.variableDetailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.variablesGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // removeVariableButton
+      // 
+      this.removeVariableButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeVariableButton.Enabled = false;
+      this.removeVariableButton.Location = new System.Drawing.Point(81, 310);
+      this.removeVariableButton.Name = "removeVariableButton";
+      this.removeVariableButton.Size = new System.Drawing.Size(75, 23);
+      this.removeVariableButton.TabIndex = 2;
+      this.removeVariableButton.Text = "&Remove";
+      this.removeVariableButton.UseVisualStyleBackColor = true;
+      this.removeVariableButton.Click += new System.EventHandler(this.removeVariableButton_Click);
+      // 
+      // addVariableButton
+      // 
+      this.addVariableButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addVariableButton.Location = new System.Drawing.Point(0, 310);
+      this.addVariableButton.Name = "addVariableButton";
+      this.addVariableButton.Size = new System.Drawing.Size(75, 23);
+      this.addVariableButton.TabIndex = 1;
+      this.addVariableButton.Text = "&Add...";
+      this.addVariableButton.UseVisualStyleBackColor = true;
+      this.addVariableButton.Click += new System.EventHandler(this.addVariableButton_Click);
+      // 
+      // 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";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.variablesGroupBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.variableDetailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(423, 304);
+      this.splitContainer.SplitterDistance = 212;
+      this.splitContainer.TabIndex = 0;
+      // 
+      // variablesGroupBox
+      // 
+      this.variablesGroupBox.Controls.Add(this.variablesListView);
+      this.variablesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.variablesGroupBox.Name = "variablesGroupBox";
+      this.variablesGroupBox.Size = new System.Drawing.Size(212, 304);
+      this.variablesGroupBox.TabIndex = 0;
+      this.variablesGroupBox.TabStop = false;
+      this.variablesGroupBox.Text = "&Variables";
+      // 
+      // variablesListView
+      // 
+      this.variablesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader2});
+      this.variablesListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.variablesListView.HideSelection = false;
+      this.variablesListView.Location = new System.Drawing.Point(3, 16);
+      this.variablesListView.Name = "variablesListView";
+      this.variablesListView.Size = new System.Drawing.Size(206, 285);
+      this.variablesListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.variablesListView.TabIndex = 0;
+      this.variablesListView.UseCompatibleStateImageBehavior = false;
+      this.variablesListView.View = System.Windows.Forms.View.Details;
+      this.variablesListView.SelectedIndexChanged += new System.EventHandler(this.variablesListView_SelectedIndexChanged);
+      this.variablesListView.SizeChanged += new System.EventHandler(this.variablesListView_SizeChanged);
+      this.variablesListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.variablesListView_KeyDown);
+      // 
+      // variableDetailsGroupBox
+      // 
+      this.variableDetailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variableDetailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.variableDetailsGroupBox.Name = "variableDetailsGroupBox";
+      this.variableDetailsGroupBox.Size = new System.Drawing.Size(207, 304);
+      this.variableDetailsGroupBox.TabIndex = 0;
+      this.variableDetailsGroupBox.TabStop = false;
+      this.variableDetailsGroupBox.Text = "&Details";
+      // 
+      // OperatorBaseVariablesView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Controls.Add(this.removeVariableButton);
+      this.Controls.Add(this.addVariableButton);
+      this.Name = "OperatorBaseVariablesView";
+      this.Size = new System.Drawing.Size(423, 333);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.variablesGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private ColumnHeader columnHeader2;
+    protected SplitContainer splitContainer;
+    protected GroupBox variablesGroupBox;
+    protected ListView variablesListView;
+    protected GroupBox variableDetailsGroupBox;
+    protected Button removeVariableButton;
+    protected Button addVariableButton;
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.cs	(revision 1270)
@@ -0,0 +1,219 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of the variables of an operator.
+  /// </summary>
+  public partial class OperatorBaseVariablesView : ViewBase {
+    private ChooseItemDialog chooseItemDialog;
+
+    /// <summary>
+    /// Gets or sets the operator whose variables to represent.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseVariablesView"/> with caption "Operator".
+    /// </summary>
+    public OperatorBaseVariablesView() {
+      InitializeComponent();
+      variablesListView.Columns[0].Width = Math.Max(0, variablesListView.Width - 25);
+      Caption = "Operator";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseVariablesView"/> with the given 
+    /// operator <paramref name="op"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBaseVariablesView"/>.</remarks>
+    /// <param name="op">The operator whose variables should be represented visually.</param>
+    public OperatorBaseVariablesView(IOperator op)
+      : this() {
+      Operator = op;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the unterlying <see cref="IOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      Operator.VariableAdded -= new EventHandler<VariableEventArgs>(OperatorBase_VariableAdded);
+      Operator.VariableRemoved -= new EventHandler<VariableEventArgs>(OperatorBase_VariableRemoved);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Operator.VariableAdded += new EventHandler<VariableEventArgs>(OperatorBase_VariableAdded);
+      Operator.VariableRemoved += new EventHandler<VariableEventArgs>(OperatorBase_VariableRemoved);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      variableDetailsGroupBox.Controls.Clear();
+      if (Operator == null) {
+        Caption = "Operator";
+        variablesListView.Enabled = false;
+        variableDetailsGroupBox.Enabled = false;
+        removeVariableButton.Enabled = false;
+      } else {
+        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
+        variablesListView.Enabled = true;
+        foreach (ListViewItem item in variablesListView.Items) {
+          ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
+        }
+        variablesListView.Items.Clear();
+        foreach (IVariable variable in Operator.Variables) {
+          ListViewItem item = new ListViewItem();
+          item.Text = variable.Name;
+          item.Tag = variable;
+          variablesListView.Items.Add(item);
+          variable.NameChanged += new EventHandler(Variable_NameChanged);
+        }
+        if (variablesListView.Items.Count > 0)
+          variablesListView.SelectedIndices.Add(0);
+      }
+    }
+
+    private void variablesListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if (variableDetailsGroupBox.Controls.Count > 0)
+        variableDetailsGroupBox.Controls[0].Dispose();
+      variableDetailsGroupBox.Controls.Clear();
+      variableDetailsGroupBox.Enabled = false;
+      removeVariableButton.Enabled = false;
+      if (variablesListView.SelectedItems.Count > 0) {
+        removeVariableButton.Enabled = true;
+      }
+      if (variablesListView.SelectedItems.Count == 1) {
+        IVariable variable = (IVariable)variablesListView.SelectedItems[0].Tag;
+        Control editor = (Control)variable.CreateView();
+        variableDetailsGroupBox.Controls.Add(editor);
+        editor.Dock = DockStyle.Fill;
+        variableDetailsGroupBox.Enabled = true;
+      }
+    }
+
+    #region Size Changed Events
+    private void variablesListView_SizeChanged(object sender, EventArgs e) {
+      if (variablesListView.Columns.Count > 0)
+        variablesListView.Columns[0].Width = Math.Max(0, variablesListView.Width - 25);
+    }
+    #endregion
+
+    #region Key Events
+    private void variablesListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if (variablesListView.SelectedItems.Count > 0) {
+          foreach (ListViewItem item in variablesListView.SelectedItems)
+            Operator.RemoveVariable(((IVariable)item.Tag).Name);
+        }
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addVariableButton_Click(object sender, EventArgs e) {
+      if (chooseItemDialog == null) {
+        chooseItemDialog = new ChooseItemDialog();
+        chooseItemDialog.Caption = "Add Variable";
+      }
+      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK) {
+        IVariable newVariable = new Variable(chooseItemDialog.Item.GetType().Name, chooseItemDialog.Item);
+        int index = 1;
+        bool valid = true;
+        string name = null;
+        do {
+          valid = true;
+          name = newVariable.Name + " (" + index.ToString() + ")";
+          foreach (IVariable existingVariable in Operator.Variables) {
+            if (existingVariable.Name == name) {
+              valid = false;
+              index++;
+            }
+          }
+        } while (!valid);
+        newVariable.Name = name;
+        Operator.AddVariable(newVariable);
+      }
+    }
+    private void removeVariableButton_Click(object sender, EventArgs e) {
+      if (variablesListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in variablesListView.SelectedItems)
+          Operator.RemoveVariable(((IVariable)item.Tag).Name);
+      }
+    }
+    #endregion
+
+    #region Variable Events
+    private void Variable_NameChanged(object sender, EventArgs e) {
+      IVariable variable = (IVariable)sender;
+      foreach (ListViewItem item in variablesListView.Items) {
+        if (item.Tag == variable)
+          item.Text = variable.Name;
+      }
+    }
+    #endregion
+
+    #region OperatorBase Events
+    private void OperatorBase_VariableAdded(object sender, VariableEventArgs e) {
+      ListViewItem item = new ListViewItem();
+      item.Text = e.Variable.Name;
+      item.Tag = e.Variable;
+      variablesListView.Items.Add(item);
+      // select the new item
+      foreach(ListViewItem oldSelected in variablesListView.SelectedItems) {
+        oldSelected.Selected = false;
+      }
+      item.Selected = true;
+      e.Variable.NameChanged += new EventHandler(Variable_NameChanged);
+    }
+    private void OperatorBase_VariableRemoved(object sender, VariableEventArgs e) {
+      ListViewItem itemToDelete = null;
+      foreach (ListViewItem item in variablesListView.Items) {
+        if (item.Tag == e.Variable)
+          itemToDelete = item;
+      }
+      e.Variable.NameChanged -= new EventHandler(Variable_NameChanged);
+      variablesListView.Items.Remove(itemToDelete);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseVariablesView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.Designer.cs	(revision 1270)
@@ -0,0 +1,194 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  partial class OperatorBaseView {
+    /// <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.tabControl = new System.Windows.Forms.TabControl();
+      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.variablesTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
+      this.constraintsTabPage = new System.Windows.Forms.TabPage();
+      this.constrainedItemBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
+      this.tabControl.SuspendLayout();
+      this.variableInfosTabPage.SuspendLayout();
+      this.variablesTabPage.SuspendLayout();
+      this.constraintsTabPage.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.variableInfosTabPage);
+      this.tabControl.Controls.Add(this.variablesTabPage);
+      this.tabControl.Controls.Add(this.constraintsTabPage);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(423, 333);
+      this.tabControl.TabIndex = 0;
+      // 
+      // variableInfosTabPage
+      // 
+      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfosTabPage.Name = "variableInfosTabPage";
+      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfosTabPage.Size = new System.Drawing.Size(415, 307);
+      this.variableInfosTabPage.TabIndex = 0;
+      this.variableInfosTabPage.Text = "Variable Infos";
+      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(409, 301);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      // 
+      // variablesTabPage
+      // 
+      this.variablesTabPage.Controls.Add(this.operatorBaseVariablesView);
+      this.variablesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variablesTabPage.Name = "variablesTabPage";
+      this.variablesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variablesTabPage.Size = new System.Drawing.Size(415, 307);
+      this.variablesTabPage.TabIndex = 1;
+      this.variablesTabPage.Text = "Local Variables";
+      this.variablesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariablesView
+      // 
+      this.operatorBaseVariablesView.Caption = "Operator";
+      this.operatorBaseVariablesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariablesView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariablesView.Name = "operatorBaseVariablesView";
+      this.operatorBaseVariablesView.Operator = null;
+      this.operatorBaseVariablesView.Size = new System.Drawing.Size(409, 301);
+      this.operatorBaseVariablesView.TabIndex = 0;
+      // 
+      // constraintsTabPage
+      // 
+      this.constraintsTabPage.Controls.Add(this.constrainedItemBaseView);
+      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(415, 307);
+      this.constraintsTabPage.TabIndex = 2;
+      this.constraintsTabPage.Text = "Constraints";
+      this.constraintsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // constrainedItemBaseView
+      // 
+      this.constrainedItemBaseView.Caption = "Constrained Data";
+      this.constrainedItemBaseView.ConstrainedItem = null;
+      this.constrainedItemBaseView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constrainedItemBaseView.Location = new System.Drawing.Point(3, 3);
+      this.constrainedItemBaseView.Name = "constrainedItemBaseView";
+      this.constrainedItemBaseView.Size = new System.Drawing.Size(409, 301);
+      this.constrainedItemBaseView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(415, 307);
+      this.descriptionTabPage.TabIndex = 3;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseDescriptionView
+      // 
+      this.operatorBaseDescriptionView.Caption = "Operator";
+      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseDescriptionView.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
+      this.operatorBaseDescriptionView.Operator = null;
+      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(409, 301);
+      this.operatorBaseDescriptionView.TabIndex = 0;
+      // 
+      // OperatorBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "OperatorBaseView";
+      this.Size = new System.Drawing.Size(423, 333);
+      this.tabControl.ResumeLayout(false);
+      this.variableInfosTabPage.ResumeLayout(false);
+      this.variablesTabPage.ResumeLayout(false);
+      this.constraintsTabPage.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    protected TabControl tabControl;
+    protected TabPage variableInfosTabPage;
+    protected TabPage variablesTabPage;
+    private TabPage constraintsTabPage;
+    protected ConstrainedItemBaseView constrainedItemBaseView;
+    protected OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    protected OperatorBaseVariablesView operatorBaseVariablesView;
+    private TabPage descriptionTabPage;
+    private OperatorBaseDescriptionView operatorBaseDescriptionView;
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.cs	(revision 1270)
@@ -0,0 +1,100 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The base class for visual representation of operators (contains description view, variable view, 
+  /// variable info view,...).
+  /// </summary>
+  public partial class OperatorBaseView : ViewBase {
+    /// <summary>
+    /// Gets or sets the operator to represent visually. 
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+      set {base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseView"/> with caption "Operator".
+    /// </summary>
+    public OperatorBaseView() {
+      InitializeComponent();
+      Caption = "Operator";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorBaseView"/> 
+    /// with the given operator <paramref name="op"/>. 
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBaseView()"/>.</remarks>
+    /// <param name="op">The operator to represent visually.</param>
+    public OperatorBaseView(IOperator op)
+      : this() {
+      Operator = op;
+    }
+
+    /// <summary>
+    /// Removes event handlers in all children.
+    /// </summary>
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseVariablesView.Operator = null;
+      constrainedItemBaseView.ConstrainedItem = null;
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers in all children.
+    /// </summary>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = Operator;
+      operatorBaseVariablesView.Operator = Operator;
+      constrainedItemBaseView.ConstrainedItem = Operator;
+      operatorBaseDescriptionView.Operator = Operator;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (Operator == null) {
+        Caption = "Operator";
+        tabControl.Enabled = false;
+      } else {
+        Caption = Operator.Name + " (" + Operator.GetType().Name + ")";
+        tabControl.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorBaseView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorEventArgs.cs	(revision 1270)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected operator.
+  /// </summary>
+  public class OperatorEventArgs : ItemEventArgs {
+    /// <summary>
+    /// Gets the affected operator.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class <see cref="ItemEventArgs"/>.
+    /// No own data storage present.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorEventArgs"/> with the specified operator.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="ItemEventArgs"/>.</remarks>
+    /// <param name="op">The affected operator.</param>
+    public OperatorEventArgs(IOperator op)
+      : base(op) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraph.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraph.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraph.cs	(revision 1270)
@@ -0,0 +1,215 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents a graph of operators.
+  /// </summary>
+  public class OperatorGraph : ItemBase, IOperatorGraph {
+    private IDictionary<Guid, IOperator> myOperators;
+    /// <summary>
+    /// Gets all operators of the current instance.
+    /// </summary>
+    public ICollection<IOperator> Operators {
+      get { return myOperators.Values; }
+    }
+    private IOperator myInitialOperator;
+    /// <summary>
+    /// Gets or sets the initial operator (the starting one).
+    /// </summary>
+    /// <remarks>Calls <see cref="OnInitialOperatorChanged"/> in the setter.</remarks>
+    public IOperator InitialOperator {
+      get { return myInitialOperator; }
+      set {
+        if (myInitialOperator != value) {
+          myInitialOperator = value;
+          OnInitialOperatorChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorGraph"/>.
+    /// </summary>
+    public OperatorGraph() {
+      myOperators = new Dictionary<Guid, IOperator>();
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="OperatorGraphView"/> to represent the current instance
+    /// visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="OperatorGraphView"/>.</returns>
+    public override IView CreateView() {
+      return new OperatorGraphView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="OperatorGraph"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OperatorGraph clone = new OperatorGraph();
+      clonedObjects.Add(Guid, clone);
+      foreach (IOperator op in Operators)
+        clone.AddOperator((IOperator)Auxiliary.Clone(op, clonedObjects));
+      if (InitialOperator != null)
+        clone.myInitialOperator = (IOperator)Auxiliary.Clone(InitialOperator, clonedObjects);
+      return clone;
+    }
+
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnOperatorAdded"/>.</remarks>
+    public void AddOperator(IOperator op) {
+      if (!myOperators.ContainsKey(op.Guid)) {
+        myOperators.Add(op.Guid, op);
+        OnOperatorAdded(op);
+
+        foreach (IOperator subOperator in op.SubOperators)
+          AddOperator(subOperator);
+      }
+    }
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnOperatorRemoved"/>.</remarks>
+    public void RemoveOperator(Guid guid) {
+      IOperator op = GetOperator(guid);
+      if (op != null) {
+        foreach (IOperator o in Operators) {
+          int i = 0;
+          while (i < o.SubOperators.Count) {
+            if (o.SubOperators[i] == op)
+              o.RemoveSubOperator(i);
+            else
+              i++;
+          }
+        }
+        if (InitialOperator == op)
+          InitialOperator = null;
+        myOperators.Remove(op.Guid);
+        OnOperatorRemoved(op);
+      }
+    }
+    /// <inheritdoc/>
+    public IOperator GetOperator(Guid guid) {
+      IOperator op;
+      if (myOperators.TryGetValue(guid, out op))
+        return op;
+      else
+        return null;
+    }
+    /// <inheritdoc/>
+    public void Clear() {
+      Guid[] guids = new Guid[Operators.Count];
+      int i = 0;
+      foreach (IOperator op in Operators) {
+        guids[i] = op.Guid;
+        i++;
+      }
+      for (int j = 0; j < guids.Length; j++)
+        RemoveOperator(guids[j]);
+    }
+
+    /// <inheritdoc/>
+    public event EventHandler<OperatorEventArgs> OperatorAdded;
+    /// <summary>
+    /// Fires a new <c>OperatorAdded</c> event.
+    /// </summary>
+    /// <param name="op">The operator that has been added.</param>
+    protected virtual void OnOperatorAdded(IOperator op) {
+      if (OperatorAdded != null)
+        OperatorAdded(this, new OperatorEventArgs(op));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<OperatorEventArgs> OperatorRemoved;
+    /// <summary>
+    /// Fires a new <c>OperatorRemoved</c> event.
+    /// </summary>
+    /// <param name="op">The operator that has been removed.</param>
+    protected virtual void OnOperatorRemoved(IOperator op) {
+      if (OperatorRemoved != null)
+        OperatorRemoved(this, new OperatorEventArgs(op));
+    }
+    /// <inheritdoc/>
+    public event EventHandler InitialOperatorChanged;
+    /// <summary>
+    /// Fires a new <c>InitialOperatorChanged</c> event.
+    /// </summary>
+    protected virtual void OnInitialOperatorChanged() {
+      if (InitialOperatorChanged != null)
+        InitialOperatorChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>.<br/>
+    /// To save the operators of the current instance a child node is created with the tag name 
+    /// <c>Operators</c>. Beyond this child node all operators are saved as child nodes themselves.<br/>
+    /// The initial operator is saved as child node with the tag name <c>InitialOperator</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode ops = document.CreateNode(XmlNodeType.Element, "Operators", null);
+      foreach (IOperator op in myOperators.Values)
+        ops.AppendChild(PersistenceManager.Persist(op, document, persistedObjects));
+      node.AppendChild(ops);
+      if (InitialOperator != null)
+        node.AppendChild(PersistenceManager.Persist("InitialOperator", InitialOperator, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted operator graph from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> to get more information about how the graph must be saved. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the operator graph is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      XmlNode ops = node.SelectSingleNode("Operators");
+      for (int i = 0; i < ops.ChildNodes.Count; i++) {
+        XmlNode opNode = ops.ChildNodes[i];
+        IOperator op = (IOperator)PersistenceManager.Restore(opNode, restoredObjects);
+        myOperators.Add(op.Guid, op);
+      }
+
+      XmlNode initial = node.SelectSingleNode("InitialOperator");
+      if (initial != null)
+        myInitialOperator = (IOperator)PersistenceManager.Restore(initial, restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.Designer.cs	(revision 1270)
@@ -0,0 +1,288 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class OperatorGraphView {
+    /// <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 (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      if (graphTreeView.Nodes.Count > 0) {
+        RemoveTreeNode(graphTreeView.Nodes[0]);
+        graphTreeView.Nodes.Clear();
+      }
+      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();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OperatorGraphView));
+      this.operatorsListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
+      this.operatorsContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.initialOperatorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.addOperatorButton = new System.Windows.Forms.Button();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.operatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.graphGroupBox = new System.Windows.Forms.GroupBox();
+      this.graphTreeView = new System.Windows.Forms.TreeView();
+      this.graphContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.breakpointToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.viewToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.operatorsContextMenuStrip.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.operatorsGroupBox.SuspendLayout();
+      this.graphGroupBox.SuspendLayout();
+      this.graphContextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // operatorsListView
+      // 
+      this.operatorsListView.AllowDrop = true;
+      this.operatorsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.operatorsListView.ContextMenuStrip = this.operatorsContextMenuStrip;
+      this.operatorsListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.operatorsListView.HideSelection = false;
+      this.operatorsListView.LabelEdit = true;
+      this.operatorsListView.Location = new System.Drawing.Point(3, 16);
+      this.operatorsListView.Name = "operatorsListView";
+      this.operatorsListView.Size = new System.Drawing.Size(169, 243);
+      this.operatorsListView.SmallImageList = this.imageList;
+      this.operatorsListView.TabIndex = 0;
+      this.operatorsListView.UseCompatibleStateImageBehavior = false;
+      this.operatorsListView.View = System.Windows.Forms.View.Details;
+      this.operatorsListView.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.operatorsListView_AfterLabelEdit);
+      this.operatorsListView.SelectedIndexChanged += new System.EventHandler(this.operatorsListView_SelectedIndexChanged);
+      this.operatorsListView.SizeChanged += new System.EventHandler(this.operatorsListView_SizeChanged);
+      this.operatorsListView.DoubleClick += new System.EventHandler(this.operatorsListView_DoubleClick);
+      this.operatorsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.operatorsListView_DragDrop);
+      this.operatorsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.operatorsListView_DragEnter);
+      this.operatorsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.operatorsListView_KeyDown);
+      this.operatorsListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorsListView_ItemDrag);
+      this.operatorsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.operatorsListView_DragOver);
+      // 
+      // operatorsContextMenuStrip
+      // 
+      this.operatorsContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.initialOperatorToolStripMenuItem,
+            this.viewToolStripMenuItem});
+      this.operatorsContextMenuStrip.Name = "operatorsContextMenuStrip";
+      this.operatorsContextMenuStrip.Size = new System.Drawing.Size(159, 48);
+      this.operatorsContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.operatorsContextMenuStrip_Opening);
+      // 
+      // initialOperatorToolStripMenuItem
+      // 
+      this.initialOperatorToolStripMenuItem.CheckOnClick = true;
+      this.initialOperatorToolStripMenuItem.Name = "initialOperatorToolStripMenuItem";
+      this.initialOperatorToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
+      this.initialOperatorToolStripMenuItem.Text = "&Initial Operator";
+      this.initialOperatorToolStripMenuItem.ToolTipText = "Set as initial operator";
+      this.initialOperatorToolStripMenuItem.Click += new System.EventHandler(this.initialOperatorToolStripMenuItem_Click);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(158, 22);
+      this.viewToolStripMenuItem.Text = "&View...";
+      this.viewToolStripMenuItem.ToolTipText = "View operator";
+      this.viewToolStripMenuItem.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
+      // 
+      // imageList
+      // 
+      this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+      this.imageList.TransparentColor = System.Drawing.Color.Magenta;
+      this.imageList.Images.SetKeyName(0, "Operator.bmp");
+      this.imageList.Images.SetKeyName(1, "CombinedOperator.bmp");
+      this.imageList.Images.SetKeyName(2, "ProgrammableOperator.bmp");
+      // 
+      // addOperatorButton
+      // 
+      this.addOperatorButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addOperatorButton.Location = new System.Drawing.Point(0, 268);
+      this.addOperatorButton.Name = "addOperatorButton";
+      this.addOperatorButton.Size = new System.Drawing.Size(75, 23);
+      this.addOperatorButton.TabIndex = 0;
+      this.addOperatorButton.Text = "&Add...";
+      this.addOperatorButton.UseVisualStyleBackColor = true;
+      this.addOperatorButton.Click += new System.EventHandler(this.addOperatorButton_Click);
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.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.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.operatorsGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.graphGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(475, 262);
+      this.splitContainer1.SplitterDistance = 175;
+      this.splitContainer1.TabIndex = 4;
+      // 
+      // operatorsGroupBox
+      // 
+      this.operatorsGroupBox.Controls.Add(this.operatorsListView);
+      this.operatorsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorsGroupBox.Name = "operatorsGroupBox";
+      this.operatorsGroupBox.Size = new System.Drawing.Size(175, 262);
+      this.operatorsGroupBox.TabIndex = 3;
+      this.operatorsGroupBox.TabStop = false;
+      this.operatorsGroupBox.Text = "&Operators";
+      // 
+      // graphGroupBox
+      // 
+      this.graphGroupBox.Controls.Add(this.graphTreeView);
+      this.graphGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.graphGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.graphGroupBox.Name = "graphGroupBox";
+      this.graphGroupBox.Size = new System.Drawing.Size(296, 262);
+      this.graphGroupBox.TabIndex = 0;
+      this.graphGroupBox.TabStop = false;
+      this.graphGroupBox.Text = "&Graph";
+      // 
+      // graphTreeView
+      // 
+      this.graphTreeView.AllowDrop = true;
+      this.graphTreeView.ContextMenuStrip = this.graphContextMenuStrip;
+      this.graphTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.graphTreeView.HideSelection = false;
+      this.graphTreeView.Location = new System.Drawing.Point(3, 16);
+      this.graphTreeView.Name = "graphTreeView";
+      this.graphTreeView.ShowNodeToolTips = true;
+      this.graphTreeView.Size = new System.Drawing.Size(290, 243);
+      this.graphTreeView.TabIndex = 0;
+      this.graphTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.graphTreeView_BeforeExpand);
+      this.graphTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragDrop);
+      this.graphTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.graphTreeView_AfterSelect);
+      this.graphTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.graphTreeView_MouseDown);
+      this.graphTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragEnter);
+      this.graphTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.graphTreeView_KeyDown);
+      this.graphTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.graphTreeView_ItemDrag);
+      this.graphTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.graphTreeView_DragOver);
+      // 
+      // graphContextMenuStrip
+      // 
+      this.graphContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.breakpointToolStripMenuItem,
+            this.viewToolStripMenuItem1});
+      this.graphContextMenuStrip.Name = "graphContextMenuStrip";
+      this.graphContextMenuStrip.Size = new System.Drawing.Size(137, 48);
+      this.graphContextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.graphContextMenuStrip_Opening);
+      // 
+      // breakpointToolStripMenuItem
+      // 
+      this.breakpointToolStripMenuItem.CheckOnClick = true;
+      this.breakpointToolStripMenuItem.Name = "breakpointToolStripMenuItem";
+      this.breakpointToolStripMenuItem.Size = new System.Drawing.Size(136, 22);
+      this.breakpointToolStripMenuItem.Text = "&Breakpoint";
+      this.breakpointToolStripMenuItem.ToolTipText = "Halt engine execution after executing the operator";
+      this.breakpointToolStripMenuItem.Click += new System.EventHandler(this.breakpointToolStripMenuItem_Click);
+      // 
+      // viewToolStripMenuItem1
+      // 
+      this.viewToolStripMenuItem1.Name = "viewToolStripMenuItem1";
+      this.viewToolStripMenuItem1.Size = new System.Drawing.Size(136, 22);
+      this.viewToolStripMenuItem1.Text = "&View...";
+      this.viewToolStripMenuItem1.ToolTipText = "View operator";
+      this.viewToolStripMenuItem1.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeButton.Location = new System.Drawing.Point(81, 268);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(75, 23);
+      this.removeButton.TabIndex = 1;
+      this.removeButton.Text = "&Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // OperatorGraphView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer1);
+      this.Controls.Add(this.addOperatorButton);
+      this.Controls.Add(this.removeButton);
+      this.Name = "OperatorGraphView";
+      this.Size = new System.Drawing.Size(475, 291);
+      this.operatorsContextMenuStrip.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.operatorsGroupBox.ResumeLayout(false);
+      this.graphGroupBox.ResumeLayout(false);
+      this.graphContextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button addOperatorButton;
+    private System.Windows.Forms.ListView operatorsListView;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox operatorsGroupBox;
+    private System.Windows.Forms.Button removeButton;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    private System.Windows.Forms.ContextMenuStrip operatorsContextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem initialOperatorToolStripMenuItem;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.GroupBox graphGroupBox;
+    private System.Windows.Forms.TreeView graphTreeView;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.ContextMenuStrip graphContextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem breakpointToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem1;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.cs	(revision 1270)
@@ -0,0 +1,514 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of an <see cref="IOperatorGraph"/>.
+  /// </summary>
+  public partial class OperatorGraphView : ViewBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+    private Dictionary<IOperator, IList<TreeNode>> operatorNodeTable;
+
+    /// <summary>
+    /// Gets or sets the operator graph to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IOperatorGraph OperatorGraph {
+      get { return (IOperatorGraph)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorGraphView"/> with caption "Operator Graph".
+    /// </summary>
+    public OperatorGraphView() {
+      InitializeComponent();
+      operatorNodeTable = new Dictionary<IOperator, IList<TreeNode>>();
+      operatorsListView.Columns[0].Width = Math.Max(0, operatorsListView.Width - 25);
+      Caption = "Operator Graph";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorGraphView"/> 
+    /// with the given <paramref name="operatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorGraphView()"/>.</remarks>
+    /// <param name="operatorGraph">The operator graph to represent visually.</param>
+    public OperatorGraphView(IOperatorGraph operatorGraph)
+      : this() {
+      OperatorGraph = operatorGraph;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IOperatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      OperatorGraph.OperatorAdded -= new EventHandler<OperatorEventArgs>(OperatorGraph_OperatorAdded);
+      OperatorGraph.OperatorRemoved -= new EventHandler<OperatorEventArgs>(OperatorGraph_OperatorRemoved);
+      OperatorGraph.InitialOperatorChanged -= new EventHandler(OperatorGraph_InitialOperatorChanged);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IOperatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      OperatorGraph.OperatorAdded += new EventHandler<OperatorEventArgs>(OperatorGraph_OperatorAdded);
+      OperatorGraph.OperatorRemoved += new EventHandler<OperatorEventArgs>(OperatorGraph_OperatorRemoved);
+      OperatorGraph.InitialOperatorChanged += new EventHandler(OperatorGraph_InitialOperatorChanged);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (graphTreeView.Nodes.Count > 0)
+        RemoveTreeNode(graphTreeView.Nodes[0]);
+      graphTreeView.SelectedNode = null;
+      graphTreeView.Nodes.Clear();
+      graphTreeView.Enabled = false;
+      operatorsListView.Items.Clear();
+      removeButton.Enabled = false;
+      if (OperatorGraph == null) {
+        Caption = "Operator Graph";
+        operatorsListView.Enabled = false;
+        addOperatorButton.Enabled = false;
+      } else {
+        Caption = "Operator Graph (" + OperatorGraph.GetType().Name + ")";
+        foreach (IOperator op in OperatorGraph.Operators) {
+          operatorsListView.Items.Add(CreateListViewItem(op));
+        }
+        operatorsListView.Enabled = true;
+        addOperatorButton.Enabled = true;
+        if (OperatorGraph.InitialOperator != null) {
+          graphTreeView.Nodes.Add(CreateTreeNode(OperatorGraph.InitialOperator));
+          graphTreeView.Enabled = true;
+        }
+      }
+    }
+
+    private ListViewItem CreateListViewItem(IOperator op) {
+      ListViewItem item = new ListViewItem();
+      item.Text = op.Name;
+      item.Tag = op;
+      item.ImageIndex = 0;
+      if (op.GetType().Name == "CombinedOperator")
+        item.ImageIndex = 1;
+      else if (op.GetType().Name == "ProgrammableOperator")
+        item.ImageIndex = 2;
+      if (op == OperatorGraph.InitialOperator)
+        item.Font = new Font(operatorsListView.Font, FontStyle.Bold);
+      return item;
+    }
+
+    private TreeNode CreateTreeNode(IOperator op) {
+      TreeNode node = new TreeNode();
+      node.Text = op.Name;
+      node.Tag = op;
+      if (op.Breakpoint)
+        node.ForeColor = Color.Red;
+
+      if (!operatorNodeTable.ContainsKey(op)) {
+        operatorNodeTable.Add(op, new List<TreeNode>());
+        op.NameChanged += new EventHandler(Operator_NameChanged);
+        op.BreakpointChanged += new EventHandler(Operator_BreakpointChanged);
+        op.SubOperatorAdded += new EventHandler<OperatorIndexEventArgs>(Operator_SubOperatorAdded);
+        op.SubOperatorRemoved += new EventHandler<OperatorIndexEventArgs>(Operator_SubOperatorRemoved);
+      }
+      operatorNodeTable[op].Add(node);
+
+      for (int i = 0; i < op.SubOperators.Count; i++)
+        node.Nodes.Add(new TreeNode());
+      return node;
+    }
+
+    private void RemoveTreeNode(TreeNode node) {
+      foreach (TreeNode child in node.Nodes)
+        RemoveTreeNode(child);
+
+      IOperator op = (IOperator)node.Tag;
+      if (op != null) {
+        operatorNodeTable[op].Remove(node);
+        if (operatorNodeTable[op].Count == 0) {
+          op.NameChanged -= new EventHandler(Operator_NameChanged);
+          op.BreakpointChanged -= new EventHandler(Operator_BreakpointChanged);
+          op.SubOperatorAdded -= new EventHandler<OperatorIndexEventArgs>(Operator_SubOperatorAdded);
+          op.SubOperatorRemoved -= new EventHandler<OperatorIndexEventArgs>(Operator_SubOperatorRemoved);
+          operatorNodeTable.Remove(op);
+        }
+      }
+    }
+
+    #region ListView Events
+    private void operatorsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      removeButton.Enabled = false;
+      if (operatorsListView.SelectedItems.Count > 0) {
+        removeButton.Enabled = true;
+      }
+    }
+    private void operatorsListView_DoubleClick(object sender, EventArgs e) {
+      if (operatorsListView.SelectedItems.Count == 1) {
+        IOperator op = (IOperator)operatorsListView.SelectedItems[0].Tag;
+        IView view = op.CreateView();
+        if (view != null)
+          PluginManager.ControlManager.ShowControl(view);
+      }
+    }
+    #endregion
+
+    #region TreeView Events
+    private void graphTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
+      TreeNode node = e.Node;
+      IOperator op = (IOperator)node.Tag;
+      for (int i = 0; i < node.Nodes.Count; i++) {
+        if (node.Nodes[i].Tag == null) {
+          node.Nodes[i].Remove();
+          node.Nodes.Insert(i, CreateTreeNode(op.SubOperators[i]));
+        }
+      }
+    }
+    private void graphTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      IOperator op = (IOperator)e.Node.Tag;
+      foreach (ListViewItem item in operatorsListView.Items)
+        item.Selected = item.Tag == op;
+    }
+    #endregion
+
+    #region Size Changed Events
+    private void operatorsListView_SizeChanged(object sender, EventArgs e) {
+      if (operatorsListView.Columns.Count > 0)
+        operatorsListView.Columns[0].Width = Math.Max(0, operatorsListView.Width - 25);
+    }
+    #endregion
+
+    #region Key Events
+    private void operatorsListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if (operatorsListView.SelectedItems.Count > 0) {
+          foreach (ListViewItem item in operatorsListView.SelectedItems)
+            OperatorGraph.RemoveOperator(((IOperator)item.Tag).Guid);
+        }
+      }
+      if (e.KeyCode == Keys.F2) {
+        if (operatorsListView.SelectedItems.Count == 1)
+          operatorsListView.SelectedItems[0].BeginEdit();
+      }
+    }
+    private void graphTreeView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        TreeNode node = graphTreeView.SelectedNode;
+        if ((node != null) && (node.Parent != null)) {
+          IOperator parent = (IOperator)node.Parent.Tag;
+          parent.RemoveSubOperator(node.Index);
+        }
+      }
+    }
+    #endregion
+
+    #region Edit Events
+    private void operatorsListView_AfterLabelEdit(object sender, LabelEditEventArgs e) {
+      e.CancelEdit = false;
+
+      string name = e.Label;
+      if (name != null) {
+        IOperator op = (IOperator)operatorsListView.Items[e.Item].Tag;
+        op.Name = name;
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addOperatorButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK)
+        OperatorGraph.AddOperator(chooseOperatorDialog.Operator);
+    }
+    private void removeButton_Click(object sender, EventArgs e) {
+      if (operatorsListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in operatorsListView.SelectedItems)
+          OperatorGraph.RemoveOperator(((IOperator)item.Tag).Guid);
+      }
+    }
+    #endregion
+
+    #region Drag and Drop Events
+    private void operatorsListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      ListViewItem item = (ListViewItem)e.Item;
+      IOperator op = (IOperator)item.Tag;
+      DataObject data = new DataObject();
+      data.SetData("IOperator", op);
+      data.SetData("DragSource", operatorsListView);
+      DoDragDrop(data, DragDropEffects.Copy);
+    }
+    private void operatorsListView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetDataPresent("IOperator"))
+        e.Effect = DragDropEffects.Copy;
+    }
+    private void operatorsListView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetDataPresent("IOperator"))
+        e.Effect = DragDropEffects.Copy;
+    }
+    private void operatorsListView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        if (e.Data.GetDataPresent("IOperator")) {
+          IOperator op = (IOperator)e.Data.GetData("IOperator");
+          op = (IOperator)op.Clone();
+          OperatorGraph.AddOperator(op);
+        }
+      }
+    }
+    private void graphTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = (TreeNode)e.Item;
+      if (node.Parent != null) {
+        IOperator op = (IOperator)node.Tag;
+        IOperator parent = (IOperator)node.Parent.Tag;
+        int index = node.Index;
+        DataObject data = new DataObject();
+        data.SetData("IOperator", op);
+        data.SetData("DragSource", graphTreeView);
+        data.SetData("ParentOperator", parent);
+        data.SetData("Index", index);
+        DoDragDrop(data, DragDropEffects.Move);
+      }
+    }
+    private void graphTreeView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetDataPresent("IOperator")) {
+        Point p = graphTreeView.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = graphTreeView.GetNodeAt(p);
+        if (node != null) {
+          if ((e.Data.GetDataPresent("ParentOperator")) && (node.Parent != null)) {
+            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == graphTreeView))
+              e.Effect = DragDropEffects.Move;
+          } else {
+            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == operatorsListView))
+              e.Effect = DragDropEffects.Copy;
+          }
+        }
+      }
+    }
+    private void graphTreeView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetDataPresent("IOperator")) {
+        Point p = graphTreeView.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = graphTreeView.GetNodeAt(p);
+        if (node != null) {
+          if ((e.Data.GetDataPresent("ParentOperator")) && (node.Parent != null)) {
+            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == graphTreeView))
+              e.Effect = DragDropEffects.Move;
+          } else {
+            if ((e.Data.GetDataPresent("DragSource")) && (e.Data.GetData("DragSource") == operatorsListView))
+              e.Effect = DragDropEffects.Copy;
+          }
+        }
+      }
+    }
+    private void graphTreeView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        if (e.Data.GetDataPresent("IOperator")) {
+          IOperator op = (IOperator)e.Data.GetData("IOperator");
+          Point p = graphTreeView.PointToClient(new Point(e.X, e.Y));
+          TreeNode node = graphTreeView.GetNodeAt(p);
+          if (e.Data.GetDataPresent("ParentOperator")) {
+            if (node.Parent != null) {
+              TreeNode parentNode = node.Parent;
+              IOperator oldParent = (IOperator)e.Data.GetData("ParentOperator");
+              int oldIndex = (int)e.Data.GetData("Index");
+              IOperator newParent = (IOperator)node.Parent.Tag;
+              int newIndex = node.Index;
+              ICollection<IConstraint> violatedConstraints;
+              ICollection<IConstraint> violatedConstraints2;
+              oldParent.TryRemoveSubOperator(oldIndex, out violatedConstraints);
+              newParent.TryAddSubOperator(op, newIndex, out violatedConstraints2);
+              if ((violatedConstraints.Count == 0) && (violatedConstraints2.Count == 0)) {
+                graphTreeView.SelectedNode = parentNode.Nodes[newIndex];
+              } else {
+                List<IConstraint> allViolatedConstraints = new List<IConstraint>(violatedConstraints);
+                allViolatedConstraints.AddRange(violatedConstraints2);
+                if (Auxiliary.ShowIgnoreConstraintViolationMessageBox(allViolatedConstraints) == DialogResult.Yes) {
+                  if (violatedConstraints.Count > 0)
+                    oldParent.RemoveSubOperator(oldIndex);
+                  if (violatedConstraints2.Count > 0)
+                    newParent.AddSubOperator(op, newIndex);
+                  graphTreeView.SelectedNode = parentNode.Nodes[newIndex];
+                } else {
+                  if (violatedConstraints.Count == 0)
+                    oldParent.AddSubOperator(op, oldIndex);
+                  if (violatedConstraints2.Count == 0)
+                    newParent.RemoveSubOperator(newIndex);
+                }
+              }
+            }
+          } else {
+            if (node != null) {
+              IOperator parent = (IOperator)node.Tag;
+              ICollection<IConstraint> violatedConstraints;
+              if (parent.TryAddSubOperator(op, out violatedConstraints)) {
+                graphTreeView.SelectedNode = node.Nodes[node.Nodes.Count - 1];
+              } else if (Auxiliary.ShowIgnoreConstraintViolationMessageBox(violatedConstraints) == DialogResult.Yes) {
+                parent.AddSubOperator(op);
+                graphTreeView.SelectedNode = node.Nodes[node.Nodes.Count - 1];
+              }
+            }
+          }
+        }
+      }
+    }
+    #endregion
+
+    #region Context Menu Events
+    private void operatorsContextMenuStrip_Opening(object sender, CancelEventArgs e) {
+      viewToolStripMenuItem.Enabled = false;
+      initialOperatorToolStripMenuItem.Enabled = false;
+      initialOperatorToolStripMenuItem.Checked = false;
+      if (operatorsListView.SelectedItems.Count == 1) {
+        IOperator op = (IOperator)operatorsListView.SelectedItems[0].Tag;
+        IView view = op.CreateView();
+        if (view != null) {
+          viewToolStripMenuItem.Enabled = true;
+          viewToolStripMenuItem.Tag = view;
+        }
+        initialOperatorToolStripMenuItem.Enabled = true;
+        initialOperatorToolStripMenuItem.Tag = op;
+        if (op == OperatorGraph.InitialOperator)
+          initialOperatorToolStripMenuItem.Checked = true;
+      }
+    }
+    private void viewToolStripMenuItem_Click(object sender, EventArgs e) {
+      IView view = (IView)((ToolStripMenuItem)sender).Tag;
+      PluginManager.ControlManager.ShowControl(view);
+    }
+    private void initialOperatorToolStripMenuItem_Click(object sender, EventArgs e) {
+      if (initialOperatorToolStripMenuItem.Checked) {
+        foreach (ListViewItem item in operatorsListView.Items)
+          item.Font = operatorsListView.Font;
+        operatorsListView.SelectedItems[0].Font = new Font(operatorsListView.Font, FontStyle.Bold);
+        OperatorGraph.InitialOperator = (IOperator)initialOperatorToolStripMenuItem.Tag;
+      } else {
+        operatorsListView.SelectedItems[0].Font = operatorsListView.Font;
+        OperatorGraph.InitialOperator = null;
+      }
+    }
+    private void graphContextMenuStrip_Opening(object sender, CancelEventArgs e) {
+      viewToolStripMenuItem1.Enabled = false;
+      breakpointToolStripMenuItem.Enabled = false;
+      breakpointToolStripMenuItem.Checked = false;
+      if (graphTreeView.SelectedNode != null) {
+        IOperator op = (IOperator)graphTreeView.SelectedNode.Tag;
+        IView view = op.CreateView();
+        if (view != null) {
+          viewToolStripMenuItem1.Enabled = true;
+          viewToolStripMenuItem1.Tag = view;
+        }
+        breakpointToolStripMenuItem.Enabled = true;
+        breakpointToolStripMenuItem.Tag = op;
+        if (op.Breakpoint)
+          breakpointToolStripMenuItem.Checked = true;
+      }
+    }
+    private void breakpointToolStripMenuItem_Click(object sender, EventArgs e) {
+      IOperator op = (IOperator)breakpointToolStripMenuItem.Tag;
+      op.Breakpoint = breakpointToolStripMenuItem.Checked;
+    }
+    #endregion
+
+    #region OperatorGraph Events
+    private void OperatorGraph_OperatorAdded(object sender, OperatorEventArgs e) {
+      operatorsListView.Items.Add(CreateListViewItem(e.Operator));
+    }
+    private void OperatorGraph_OperatorRemoved(object sender, OperatorEventArgs e) {
+      ListViewItem itemToDelete = null;
+      foreach (ListViewItem item in operatorsListView.Items) {
+        if (item.Tag == e.Operator)
+          itemToDelete = item;
+      }
+      itemToDelete.Remove();
+    }
+    private void OperatorGraph_InitialOperatorChanged(object sender, EventArgs e) {
+      Refresh();
+    }
+    #endregion
+
+    #region Operator Events
+    private void Operator_NameChanged(object sender, EventArgs e) {
+      IOperator op = (IOperator)sender;
+      foreach (TreeNode node in operatorNodeTable[op])
+        node.Text = op.Name;
+    }
+    private void Operator_BreakpointChanged(object sender, EventArgs e) {
+      IOperator op = (IOperator)sender;
+      foreach (TreeNode node in operatorNodeTable[op]) {
+        if (op.Breakpoint)
+          node.ForeColor = Color.Red;
+        else
+          node.ForeColor = graphTreeView.ForeColor;
+      }
+    }
+    private void Operator_SubOperatorAdded(object sender, OperatorIndexEventArgs e) {
+      IOperator op = (IOperator)sender;
+      if (operatorNodeTable.ContainsKey(op)) {
+        TreeNode[] nodes = new TreeNode[operatorNodeTable[op].Count];
+        operatorNodeTable[op].CopyTo(nodes, 0);
+        foreach (TreeNode node in nodes)
+          node.Nodes.Insert(e.Index, CreateTreeNode(e.Operator));
+      }
+    }
+    private void Operator_SubOperatorRemoved(object sender, OperatorIndexEventArgs e) {
+      IOperator op = (IOperator)sender;
+      if (operatorNodeTable.ContainsKey(op)) {
+        TreeNode[] nodes = new TreeNode[operatorNodeTable[op].Count];
+        operatorNodeTable[op].CopyTo(nodes, 0);
+        foreach (TreeNode node in nodes) {
+          RemoveTreeNode(node.Nodes[e.Index]);
+          node.Nodes.RemoveAt(e.Index);
+        }
+      }
+    }
+    #endregion
+
+    #region Mouse Events
+    private void graphTreeView_MouseDown(object sender, MouseEventArgs e) {
+      if (e.Button != MouseButtons.Right) return;
+      TreeNode clickedNode = graphTreeView.GetNodeAt(e.X, e.Y);
+      if (clickedNode != null) {
+        graphTreeView.SelectedNode = clickedNode;
+        graphTreeView.Refresh();
+      }
+    }
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGraphView.resx	(revision 1270)
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="operatorsContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>434, 17</value>
+  </metadata>
+  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6
+        CgAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABEAMAAQEBAAEYBgABDP8APwABuQGiAZIBYAFIATQBYgFJATUBYQFJATcBZgFJATQBYgFKATQBYgFJ
+        ATUBYQFIATQBYQFIATgBZQFIATMBZQFKATYBYQFHATaBAAHlAssBnQFNASUBnQFNASUBnQFNASUB3QK7
+        DAABuwGhAZMB/QH/Af4BuQGiAZIBuQGiAZIBtQGgAZgBswGkAZEBtAGhAZIBuQGiAZMBtQGiAZMBugGk
+        AZIBuAGhAZEBYwFKATZRAAHsAdIB7AFyASQBcQHmAcwB5gkAAfsBwwH7AcsBHwHNAfwB1QH8EgAB8ALh
+        AZ0BTQElAfoBnQFiAeEBhgFYAeEBhgFYAZ0BTQElDAABtwGiAZMG/wH+AfoB+QH8AfoB+QH2AfEB8AHx
+        AeYB4gHsAd0B1AHlAdMByAHhAckBvQG3AaMBkgFhAUgBNE4AAe0B2AHtAakBUAGoAYABMAF/AXUBJwF1
+        AesB0QHrAwAB/QHpAf4BywEfAc0BywEfAc0BywEfAc0DAAHpAfAB6QEnAW8BKAEaAWcBHAEaAWcBHAHp
+        AfAB6QHnAZoBcwH8Ab4BlwH7AcABoQH7AbEBggGiAVYBMQHyAuQB1QHdAeIBQAF5AY4BNwFiAXUBKAFV
+        AWoBKwFVAWwBKgFVAWgBJwFRAWgBMwFcAXUBLAFYAWkB+QL3AfUB7AHoAfEB5AHcAeoB2QHQAeUBzwHE
+        AbcBogGTAWIBSQE1SwAB6AHRAegBqgFQAakBzAFnAcsBfgEuAX4BlgE4AZUBewErAXoB8AHVAfAB2AFr
+        AdcB/wFeAfwBywEfAc0BywEfAc0B6QHwAekBLAGCATMBWgGvAV8BWwGpAV8BTQGcAU8BGQF3ARwB9wLw
+        AecBmgFzAecBmgFzAecBmgFzAfMC5wMAATwBdAGNAaYB1wHfAbcB5wHzAa4B5QHyAbAB5gHxAa4B5gHx
+        AaQB3gHqAUYBeAGUAUEBowHTATkBeQGSAfsB8gHvAfIB6QHlAewB3wHXAecB1AHMAbQBoQGSAWIBSQE1
+        NgABqwHwAfcBqwHiAeUBrAHOAcwBrQG7AbUBrgGnAZwDAAHkAcoB5AGpAVABqAHTAWsB0gHUAW4B0wF/
+        ATABfgGfATwBnwGOATUBjQF9AS0BfAHYAWsB1wHkAUIB5gH/AaYB/wHLAR8BzQErAYIBOQGIAdcBkwF+
+        Ac0BiAFkAbMBaQEiAXoBJwHpAfAB6QYAAVYBUAFKCQABYAGVAaoBUAGEAZsBRgF8AZMBVwGJAZ8BVgGK
+        AaEBVgGIAZ4BVAGDAZkBXAGFAZwBRwGtAdgBPQF/AZwB/AH7AfcB9gHvAewB7wHlAd4B6wHbAdQBtwGi
+        AZMBYgFJATVIAAGqAVIBqQHSAWoB0QHVAW8B1QG9AXABvAHeAZgB3QGPAUYBjgGdATwBnAF+AS4BfgHY
+        AWsB1wH/AaYB/wHYAWsB1wH8AdUB/AHpAfAB6QErAYIBOQEmAX4BLgEiAXoBJwHpAfAB6QFWAVABSgMA
+        AVYBUAFKDwAB1QHdAeIBfgGpAbwBiAHUAesBXwHBAekBXwHBAesBTwG5AegBTAGyAeIBPgGEAaEBYQGL
+        AZ4B+gH9AfsB+QH2AfIB9AHrAecB7AHgAdoBuQGiAZIBYgFJATUzAAGrAfAB9wGrAeUB6QGsAtUBrAHE
+        AcEBrQG1AawBrgGkAZgDAAGoAU8BpwHSAW0B0QG8AW8BuwHvAaUB7gH7AZ8B+gHvAZ0B7gGXAVIBlgF8
+        AS4BfAH9AekB/gHYAWsB1wH9AekB/gFWAVABShIAAVYBUAFKFQABPgF2AY8BhQHZAfIBcQHNAfABZwHE
+        AesBWAG+AegBPQF6AZQBdAGhAbYD/gL/Af4B/wH6AfkB9wHwAe0B8QHmAeIBuQGiAZIBYgFJATVIAAGn
+        AVABpgG8AW8BuwHvAaUB7gH7AZsB+gH7AZgB+gH7AZkB+gHnAZgB5gGRAU4BkAwAAVYBUAFKDAABVgFQ
+        AUoDAAFWAVABSgH7AcMB+wHLAR8BzQH8AdUB/AYAAV0BjwGhAXcBoAGvAZUB5AH3AYoB3AH1AXwB1AHy
+        AWoBxAHmAT0BeAGYAe4B9gH1Af0C/wH7Av8D/gH6AfYC9QHvAeoBuQGiAZIBYgFJATU5AAGrAfAB9wGs
+        AtUBrgG0AawBrgGZAYoD/QHPAYgBzwHiAa8B4gH7AasB+gH7AZgB+gH7AZgB+gHqAZAB6QHPAYgBzwH0
+        AeYB9A8AA4YBEgFbAYUBhwGwAcgBVgFQAUoGAAH9AekB/gHLAR8BzQHLAR8BzQHLAR8BzQYAAW0BmwGs
+        Aa4B9AH7AasB8AH/AZ0B6wH4AZcB5AH3ATUBdgGVAVEBpAHDATgBbgGFATkBawF/Af8B/gH/Af0B/wH+
+        A/8B+gH3AfMBuQGiAZIBYgFJATVIAAHwAdQB8AHPAYgBzwHuAb4B7gH7Aa4B+gHsAZEB6wHPAYgBzwHz
+        AeAB8hIAASgBfAGrAQwBrQHuARoBZwGTAZsBvgHRBgAB2AFrAdcB/wFeAfwBywEfAc0BywEfAc0GAAE2
+        AW4BhwGtAfIB+wGvAfQB/QGxAfQB/QGnAe0B+gEkAWEBewFUAaMBxAFfAbIB0QEaAUkBXgP+A/8B/gH8
+        AfsBtwGiAZMBuwGiAZIBYwFKATZLAAHyAdsB8gHPAYgBzwHjAawB4wHPAYgBzwHzAeMB8xUAAQwBrQHu
+        ASgBfAGrAQwBrQHuARoBZwGTBgAB2AFrAdcB5AFCAeYB/wGmAf8BywEfAc0GAAHVAd0B4gF7Aa0BvwF3
+        AaYBuwFwAZ4BtgFoAZcBrQFjAY4BowEwAWQBdQE0AWQBdgH/Af4D/wL+Af0B/wG3AaIBkwFhAUkBNQFk
+        AUwBNgFiAUsBNU4AAfIB2wHyAc8BiAHPAfAB4wHwGAABBAG0AfwBZgHMAf8BKAF8AasBIQFyAaAGAAHY
+        AWsB1wH/AaYB/wHYAWsB1wH8AdUB/A8AAdIBwAGvAf8B/gP/Af4B/Qf/Af4B/wH+A/8B/AG4AaQBkwHU
+        AcQBvQFlAUoBNQHgAdsB11EAAf4B+wH+GwAB2QHlAewBBAG0AfwBZgHMAf8BKAF8AasGAAH9AekB/gHY
+        AWsB1wH9AekB/hIAAdkBwgGyAf4B/wL9A/8B/gX/Af0C/wH+Af8B/AH/Af0BvgGrAZwBZQFKATUB4AHb
+        Add1AAHZAeUB7AEEAbQB/AG4AdAB3SEAAdgBwgGwAdsBwQGzAdcBwgGzAdgBwgGwAdkBwgGzAdIBwwGw
+        AdUBvgGvAc4BuQGqAcoBswGjAeAB2wHXNgABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGA
+        FwAD/wEABv8CAAT/AfADAAP/AeAB8AMAAf8B4wGPAcAB8AMAAf8BwQEIBQAB/wGAAQABAQQAAcECAAE3
+        BAAB/wIAAS8BgAMAAYEBAAEPAd8BwAMAAf8BAAH3AaEBgAMAAeABAAH4AWEBgAMAAf8BAQH4AWEBgAMA
+        Af8BgwH4AWEBgAMAAf8BxwH4AWEB8AMAAf8B7wH4AWMB8AEBAgAC/wH8AX8B8AEDAgAL
+</value>
+  </data>
+  <metadata name="graphContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>204, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>349, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGroup.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGroup.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorGroup.cs	(revision 1270)
@@ -0,0 +1,193 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Representation of a group of operators (can also include subgroups).
+  /// </summary>
+  public class OperatorGroup : StorableBase, IOperatorGroup {
+    private string myName;
+    /// <summary>
+    /// Gets or sets the name of the current operator group.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnNameChanged"/> in the setter.</remarks>
+    public string Name {
+      get { return myName; }
+      set {
+        if (myName != value) {
+          myName = value;
+          OnNameChanged();
+        }
+      }
+    }
+    private List<IOperatorGroup> mySubGroups;
+    /// <summary>
+    /// Gets all subgroups of the current instance.
+    /// <note type="caution"> The subgroups are returned read-only.</note>
+    /// </summary>
+    public ICollection<IOperatorGroup> SubGroups {
+      get { return mySubGroups.AsReadOnly(); }
+    }
+    private List<IOperator> myOperators;
+    /// <summary>
+    /// Gets all operators of the current instance.
+    /// <note type="caution"> The operators are returned read-only.</note>
+    /// </summary>
+    public ICollection<IOperator> Operators {
+      get { return myOperators.AsReadOnly(); }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorGroup"/> having "Anonymous" as name.
+    /// </summary>
+    public OperatorGroup() {
+      myName = "Anonymous";
+      mySubGroups = new List<IOperatorGroup>();
+      myOperators = new List<IOperator>();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone with <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="OperatorGroup"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OperatorGroup clone = (OperatorGroup)base.Clone(clonedObjects);
+      clone.myName = Name;
+      foreach (IOperatorGroup group in SubGroups)
+        clone.AddSubGroup((IOperatorGroup)Auxiliary.Clone(group, clonedObjects));
+      foreach (IOperator op in Operators)
+        clone.AddOperator((IOperator)Auxiliary.Clone(op, clonedObjects));
+      return clone;
+    }
+
+    /// <summary>
+    /// Adds the given subgroup (<paramref name="group"/>) to the current instance.
+    /// </summary>
+    /// <param name="group">The subgroup to add.</param>
+    public virtual void AddSubGroup(IOperatorGroup group) {
+      mySubGroups.Add(group);
+    }
+    /// <summary>
+    /// Removes the given subgroup (<paramref name="group"/>) from the current instance.
+    /// </summary>
+    /// <param name="group">The subgroup to remove.</param>
+    public virtual void RemoveSubGroup(IOperatorGroup group) {
+      mySubGroups.Remove(group);
+    }
+    /// <summary>
+    /// Ads the given operator <paramref name="op"/> to the current instance.
+    /// </summary>
+    /// <param name="op">The operator to add.</param>
+    public virtual void AddOperator(IOperator op) {
+      myOperators.Add(op);
+    }
+    /// <summary>
+    /// Removes the given operator <paramref name="op"/> from the current instance.
+    /// </summary>
+    /// <param name="op">The operator to remove.</param>
+    public virtual void RemoveOperator(IOperator op) {
+      myOperators.Remove(op);
+    }
+
+    /// <summary>
+    /// Occurs when the name of the operator was changed.
+    /// </summary>
+    public event EventHandler NameChanged;
+    /// <summary>
+    /// Fires a new <c>NameChanged</c> event.
+    /// </summary>
+    protected virtual void OnNameChanged() {
+      if (NameChanged != null) {
+        NameChanged(this, new EventArgs());
+      }
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>.<br/>
+    /// A quick overview how the single elements of the current instance are saved:
+    /// <list type="bullet">
+    /// <item>
+    /// <term>Name: </term>
+    /// <description>Saved as an <see cref="XmlAttribute"/> with attribute name <c>Name</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Sub groups: </term>
+    /// <description>A child node is created with tag name <c>SubGroups</c>. Beyond this child node 
+    /// all sub operator groups are saved as child nodes themselves.</description>
+    /// </item>
+    /// <item>
+    /// <term>Operators: </term>
+    /// <description>A child node is created with tag name <c>Operators</c>. Beyond this child node
+    /// all operators are saved as child nodes themselves.</description>
+    /// </item>
+    /// </list>
+    /// </remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute nameAttribute = document.CreateAttribute("Name");
+      nameAttribute.Value = Name;
+      node.Attributes.Append(nameAttribute);
+      XmlNode subGroupsNode = document.CreateNode(XmlNodeType.Element, "SubGroups", null);
+      foreach (IOperatorGroup group in SubGroups)
+        subGroupsNode.AppendChild(PersistenceManager.Persist(group, document, persistedObjects));
+      node.AppendChild(subGroupsNode);
+      XmlNode operatorsNode = document.CreateNode(XmlNodeType.Element, "Operators", null);
+      foreach (IOperator op in Operators)
+        operatorsNode.AppendChild(PersistenceManager.Persist(op, document, persistedObjects));
+      node.AppendChild(operatorsNode);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted operator group from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> to get information about how the data must be saved. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="StorableBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the boolean value is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myName = node.Attributes["Name"].Value;
+      XmlNode subGroupsNode = node.SelectSingleNode("SubGroups");
+      foreach (XmlNode subGroupNode in subGroupsNode.ChildNodes)
+        AddSubGroup((IOperatorGroup)PersistenceManager.Restore(subGroupNode, restoredObjects));
+      XmlNode operatorsNode = node.SelectSingleNode("Operators");
+      foreach (XmlNode operatorNode in operatorsNode.ChildNodes)
+        AddOperator((IOperator)PersistenceManager.Restore(operatorNode, restoredObjects));
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorIndexEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorIndexEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorIndexEventArgs.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected operator at the specified index.
+  /// </summary>
+  public class OperatorIndexEventArgs : ItemIndexEventArgs {
+    /// <summary>
+    /// Gets the affected operator.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class 
+    /// <see cref="ItemIndexEventArgs"/>. No own data storage present.</remarks>
+    public IOperator Operator {
+      get { return (IOperator)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorIndexEventArgs"/> with the given operator
+    /// and the specified <paramref name="index"/>.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="ItemIndexEventArgs"/>.</remarks>
+    /// <param name="op">The affected operator.</param>
+    /// <param name="index">The affected index.</param>
+    public OperatorIndexEventArgs(IOperator op, int index)
+      : base(op, index) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibrary.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibrary.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibrary.cs	(revision 1270)
@@ -0,0 +1,106 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents a library of operators consisting of one <see cref="IOperatorGroup"/>.
+  /// </summary>
+  public class OperatorLibrary : ItemBase, IOperatorLibrary, IEditable {
+    private IOperatorGroup myGroup;
+    /// <summary>
+    /// Gets the operator group of the current instance.
+    /// </summary>
+    public IOperatorGroup Group {
+      get { return myGroup; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorLibrary"/>.
+    /// </summary>
+    public OperatorLibrary() {
+      myGroup = new OperatorGroup();
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="OperatorLibraryEditor"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created view as <see cref="OperatorLibraryEditor"/>.</returns>
+    public override IView CreateView() {
+      return new OperatorLibraryEditor(this);
+    }
+    /// <summary>
+    /// Creates a new instance of <see cref="OperatorLibraryEditor"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created editor as <see cref="OperatorLibraryEditor"/>.</returns>
+    public virtual IEditor CreateEditor() {
+      return new OperatorLibraryEditor(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="OperatorLibrary"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      OperatorLibrary clone = new OperatorLibrary();
+      clonedObjects.Add(Guid, clone);
+      clone.myGroup = (IOperatorGroup)Auxiliary.Clone(Group, clonedObjects);
+      return clone;
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>.<br/>
+    /// The operator group is saved as a child node with the tag name <c>OperatorGroup</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("OperatorGroup", Group, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted operator library from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.<br/>
+    /// See <see cref="GetXmlNode"/> for further information on how the data must be saved.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the operator library is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myGroup = (IOperatorGroup)PersistenceManager.Restore(node.SelectSingleNode("OperatorGroup"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,196 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class OperatorLibraryEditor {
+    /// <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 (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      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.operatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.operatorsTreeView = new System.Windows.Forms.TreeView();
+      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addGroupButton = new System.Windows.Forms.Button();
+      this.addOperatorButton = new System.Windows.Forms.Button();
+      this.importButton = new System.Windows.Forms.Button();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.operatorsGroupBox.SuspendLayout();
+      this.contextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // operatorsGroupBox
+      // 
+      this.operatorsGroupBox.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.operatorsGroupBox.Controls.Add(this.operatorsTreeView);
+      this.operatorsGroupBox.Enabled = false;
+      this.operatorsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorsGroupBox.Name = "operatorsGroupBox";
+      this.operatorsGroupBox.Size = new System.Drawing.Size(522, 366);
+      this.operatorsGroupBox.TabIndex = 0;
+      this.operatorsGroupBox.TabStop = false;
+      this.operatorsGroupBox.Text = "&Operators";
+      // 
+      // operatorsTreeView
+      // 
+      this.operatorsTreeView.AllowDrop = true;
+      this.operatorsTreeView.ContextMenuStrip = this.contextMenuStrip;
+      this.operatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorsTreeView.HideSelection = false;
+      this.operatorsTreeView.LabelEdit = true;
+      this.operatorsTreeView.Location = new System.Drawing.Point(3, 16);
+      this.operatorsTreeView.Name = "operatorsTreeView";
+      this.operatorsTreeView.ShowNodeToolTips = true;
+      this.operatorsTreeView.Size = new System.Drawing.Size(516, 347);
+      this.operatorsTreeView.TabIndex = 0;
+      this.operatorsTreeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.operatorsTreeView_AfterLabelEdit);
+      this.operatorsTreeView.DoubleClick += new System.EventHandler(this.operatorsTreeView_DoubleClick);
+      this.operatorsTreeView.DragDrop += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragDrop);
+      this.operatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
+      this.operatorsTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.operatorsTreeView_MouseDown);
+      this.operatorsTreeView.DragEnter += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragEnter);
+      this.operatorsTreeView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.operatorsTreeView_KeyDown);
+      this.operatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorsTreeView_ItemDrag);
+      this.operatorsTreeView.DragOver += new System.Windows.Forms.DragEventHandler(this.operatorsTreeView_DragOver);
+      // 
+      // contextMenuStrip
+      // 
+      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.viewToolStripMenuItem});
+      this.contextMenuStrip.Name = "contextMenuStrip";
+      this.contextMenuStrip.Size = new System.Drawing.Size(120, 26);
+      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(119, 22);
+      this.viewToolStripMenuItem.Text = "&View...";
+      this.viewToolStripMenuItem.Click += new System.EventHandler(this.viewToolStripMenuItem_Click);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeButton.Enabled = false;
+      this.removeButton.Location = new System.Drawing.Point(220, 372);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(104, 23);
+      this.removeButton.TabIndex = 3;
+      this.removeButton.Text = "&Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addGroupButton
+      // 
+      this.addGroupButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addGroupButton.Enabled = false;
+      this.addGroupButton.Location = new System.Drawing.Point(0, 372);
+      this.addGroupButton.Name = "addGroupButton";
+      this.addGroupButton.Size = new System.Drawing.Size(104, 23);
+      this.addGroupButton.TabIndex = 1;
+      this.addGroupButton.Text = "&Add &Group...";
+      this.addGroupButton.UseVisualStyleBackColor = true;
+      this.addGroupButton.Click += new System.EventHandler(this.addGroupButton_Click);
+      // 
+      // addOperatorButton
+      // 
+      this.addOperatorButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addOperatorButton.Enabled = false;
+      this.addOperatorButton.Location = new System.Drawing.Point(110, 372);
+      this.addOperatorButton.Name = "addOperatorButton";
+      this.addOperatorButton.Size = new System.Drawing.Size(104, 23);
+      this.addOperatorButton.TabIndex = 2;
+      this.addOperatorButton.Text = "Add &Operator...";
+      this.addOperatorButton.UseVisualStyleBackColor = true;
+      this.addOperatorButton.Click += new System.EventHandler(this.addOperatorButton_Click);
+      // 
+      // importButton
+      // 
+      this.importButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.importButton.Location = new System.Drawing.Point(330, 372);
+      this.importButton.Name = "importButton";
+      this.importButton.Size = new System.Drawing.Size(104, 23);
+      this.importButton.TabIndex = 4;
+      this.importButton.Text = "&Import...";
+      this.importButton.UseVisualStyleBackColor = true;
+      this.importButton.Click += new System.EventHandler(this.importButton_Click);
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "item";
+      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.openFileDialog.Title = "Import ...";
+      // 
+      // OperatorLibraryEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.importButton);
+      this.Controls.Add(this.operatorsGroupBox);
+      this.Controls.Add(this.addGroupButton);
+      this.Controls.Add(this.removeButton);
+      this.Controls.Add(this.addOperatorButton);
+      this.Name = "OperatorLibraryEditor";
+      this.Size = new System.Drawing.Size(522, 395);
+      this.operatorsGroupBox.ResumeLayout(false);
+      this.contextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox operatorsGroupBox;
+    private System.Windows.Forms.TreeView operatorsTreeView;
+    private System.Windows.Forms.Button removeButton;
+    private System.Windows.Forms.Button addGroupButton;
+    private System.Windows.Forms.Button addOperatorButton;
+    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.Button importButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.cs	(revision 1270)
@@ -0,0 +1,346 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Visual representation of the class <see cref="IOperatorLibrary"/>.
+  /// </summary>
+  public partial class OperatorLibraryEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    /// <summary>
+    /// Gets or sets the operator library that should be displayed.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.</remarks>
+    public IOperatorLibrary OperatorLibrary {
+      get { return (IOperatorLibrary)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorLibraryEditor"/> with caption 
+    /// <c>Operator Library</c>.
+    /// </summary>
+    public OperatorLibraryEditor() {
+      InitializeComponent();
+      operatorsTreeView.TreeViewNodeSorter = new NodeSorter();
+      Caption = "Operator Library";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorLibraryEditor"/> with the 
+    /// specified <paramref name="operatorLibrary"/>.
+    /// </summary>
+    /// <param name="operatorLibrary">The operator library to display.</param>
+    public OperatorLibraryEditor(IOperatorLibrary operatorLibrary)
+      : this() {
+      OperatorLibrary = operatorLibrary;
+    }
+
+    private class NodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if (result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      operatorsTreeView.Nodes.Clear();
+      addGroupButton.Enabled = false;
+      addOperatorButton.Enabled = false;
+      removeButton.Enabled = false;
+      if (OperatorLibrary == null) {
+        Caption = "Operator Library";
+        operatorsGroupBox.Enabled = false;
+      } else {
+        Caption = OperatorLibrary.Group.Name + " (" + OperatorLibrary.GetType().Name + ")";
+        operatorsGroupBox.Enabled = true;
+        operatorsTreeView.Nodes.Add(CreateTreeNode(OperatorLibrary.Group));
+        operatorsTreeView.Sort();
+      }
+    }
+
+    private TreeNode CreateTreeNode(IOperatorGroup group) {
+      TreeNode node = new TreeNode();
+      node.Text = group.Name;
+      node.ForeColor = Color.LightGray;
+      node.Tag = group;
+
+      foreach (IOperator op in group.Operators)
+        node.Nodes.Add(CreateTreeNode(op));
+      foreach (IOperatorGroup subGroup in group.SubGroups)
+        node.Nodes.Add(CreateTreeNode(subGroup));
+      return node;
+    }
+    private TreeNode CreateTreeNode(IOperator op) {
+      TreeNode node = new TreeNode();
+      node.Text = op.Name;
+      node.ToolTipText = op.GetType().Name;
+      node.Tag = op;
+      return node;
+    }
+    private void RemoveTreeNode(TreeNode node) {
+      if (node.Tag is IOperatorGroup) {
+        IOperatorGroup group = node.Tag as IOperatorGroup;
+        IOperatorGroup parent = node.Parent.Tag as IOperatorGroup;
+        parent.RemoveSubGroup(group);
+      } else if (node.Tag is IOperator) {
+        IOperator op = node.Tag as IOperator;
+        IOperatorGroup group = node.Parent.Tag as IOperatorGroup;
+        group.RemoveOperator(op);
+      }
+      node.Remove();
+      EnableDisableButtons();
+    }
+
+    private void EnableDisableButtons() {
+      addGroupButton.Enabled = false;
+      addOperatorButton.Enabled = false;
+      removeButton.Enabled = false;
+      operatorsTreeView.Focus();
+
+      if (operatorsTreeView.SelectedNode != null) {
+        if (operatorsTreeView.SelectedNode.Parent != null)
+          removeButton.Enabled = true;
+        if (operatorsTreeView.SelectedNode.Tag is IOperatorGroup) {
+          addGroupButton.Enabled = true;
+          addOperatorButton.Enabled = true;
+        }
+      }
+    }
+
+    private void MergeOperatorLibrary(IOperatorGroup src, IOperatorGroup dest) {
+      foreach(IOperator op in src.Operators) {
+        if(!Contains(dest, op)) {
+          dest.AddOperator(op);
+        }
+      }
+
+      foreach(OperatorGroup group in src.SubGroups) {
+        bool mergedIntoExistingGroup = false;
+        // try to find a group in dest with matching name
+        foreach(OperatorGroup destGroup in dest.SubGroups) {
+          if(group.Name == destGroup.Name) {
+            MergeOperatorLibrary(group, destGroup);
+            mergedIntoExistingGroup = true;
+            break;
+          }
+        }
+        if(!mergedIntoExistingGroup) {
+          OperatorGroup newGroup = new OperatorGroup();
+          newGroup.Name = group.Name;
+          dest.AddSubGroup(newGroup);
+          MergeOperatorLibrary(group, newGroup);
+        }
+      }
+    }
+
+    private bool Contains(IOperatorGroup group, IOperator op) {
+      foreach(IOperator destOp in group.Operators) {
+        if(op.Name == destOp.Name) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+
+    #region TreeView Events
+    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      EnableDisableButtons();
+    }
+    private void operatorsTreeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) {
+      e.CancelEdit = false;
+
+      string name = e.Label;
+      if (name != null) {
+        if (e.Node.Tag is IOperatorGroup)
+          ((IOperatorGroup)e.Node.Tag).Name = name;
+        else if (e.Node.Tag is IOperator)
+          ((IOperator)e.Node.Tag).Name = name;
+      }
+    }
+    private void operatorsTreeView_DoubleClick(object sender, EventArgs e) {
+      if (operatorsTreeView.SelectedNode != null) {
+        IOperator op = operatorsTreeView.SelectedNode.Tag as IOperator;
+        if (op != null) {
+          IView view = op.CreateView();
+          if (view != null)
+            PluginManager.ControlManager.ShowControl(view);
+        }
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addOperatorButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        TreeNode node = operatorsTreeView.SelectedNode;
+        IOperatorGroup group = node.Tag as IOperatorGroup;
+        group.AddOperator(chooseOperatorDialog.Operator);
+        node.Nodes.Add(CreateTreeNode(chooseOperatorDialog.Operator));
+        operatorsTreeView.Sort();
+        EnableDisableButtons();
+      }
+    }
+    private void addGroupButton_Click(object sender, EventArgs e) {
+      TreeNode node = operatorsTreeView.SelectedNode;
+      IOperatorGroup newGroup = new OperatorGroup();
+      IOperatorGroup group = node.Tag as OperatorGroup;
+      group.AddSubGroup(newGroup);
+      node.Nodes.Add(CreateTreeNode(newGroup));
+      operatorsTreeView.Sort();
+      EnableDisableButtons();
+    }
+    private void removeButton_Click(object sender, EventArgs e) {
+      TreeNode node = operatorsTreeView.SelectedNode;
+      RemoveTreeNode(node);
+    }
+    private void importButton_Click(object sender, EventArgs e) {
+      if(openFileDialog.ShowDialog() == DialogResult.OK) {
+        IOperatorLibrary loadedLibrary = (PersistenceManager.Load(openFileDialog.FileName) as IOperatorLibrary);
+        if(loadedLibrary == null) {
+          Auxiliary.ShowErrorMessageBox("The selected file does not contain an operator library");
+        } else {
+          MergeOperatorLibrary(loadedLibrary.Group, OperatorLibrary.Group);
+          Refresh();
+        }
+      }
+    }
+    #endregion
+
+    #region Key Events
+    private void operatorsTreeView_KeyDown(object sender, KeyEventArgs e) {
+      TreeNode node = operatorsTreeView.SelectedNode;
+      if ((e.KeyCode == Keys.Delete) && (node != null) && (node.Parent != null))
+        RemoveTreeNode(operatorsTreeView.SelectedNode);
+      if ((e.KeyCode == Keys.F2) && (node != null))
+        node.BeginEdit();
+    }
+    #endregion
+
+
+    #region Mouse Events
+    private void operatorsTreeView_MouseDown(object sender, MouseEventArgs e) {
+      if (e.Button != MouseButtons.Right) return;
+      TreeNode clickedNode = operatorsTreeView.GetNodeAt(e.X, e.Y);
+      if (clickedNode != null) {
+        operatorsTreeView.SelectedNode = clickedNode;
+        operatorsTreeView.Refresh();
+      }
+    }
+    #endregion
+
+
+    #region Context Menu Events
+    private void contextMenuStrip_Opening(object sender, CancelEventArgs e) {
+      viewToolStripMenuItem.Enabled = false;
+      if (operatorsTreeView.SelectedNode != null) {
+        IOperator op = operatorsTreeView.SelectedNode.Tag as IOperator;
+        if (op != null) {
+          IView view = op.CreateView();
+          if (view != null) {
+            viewToolStripMenuItem.Enabled = true;
+            viewToolStripMenuItem.Tag = view;
+          }
+        }
+      }
+    }
+    private void viewToolStripMenuItem_Click(object sender, EventArgs e) {
+      IView view = (IView)viewToolStripMenuItem.Tag;
+      PluginManager.ControlManager.ShowControl(view);
+    }
+    #endregion
+
+    #region Drag and Drop Events
+    private void operatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = (TreeNode)e.Item;
+      IOperator op = node.Tag as IOperator;
+      if (op != null) {
+        DataObject data = new DataObject();
+        data.SetData("IOperator", op);
+        data.SetData("DragSource", operatorsTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    private void operatorsTreeView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetDataPresent("IOperator")) {
+        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = operatorsTreeView.GetNodeAt(p);
+        if ((node != null) && (node.Tag is IOperatorGroup))
+          e.Effect = DragDropEffects.Copy;
+      }
+    }
+    private void operatorsTreeView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if (e.Data.GetDataPresent("IOperator")) {
+        Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
+        TreeNode node = operatorsTreeView.GetNodeAt(p);
+        if ((node != null) && (node.Tag is IOperatorGroup))
+          e.Effect = DragDropEffects.Copy;
+      }
+    }
+    private void operatorsTreeView_DragDrop(object sender, DragEventArgs e) {
+      if (e.Effect != DragDropEffects.None) {
+        if (e.Data.GetDataPresent("IOperator")) {
+          IOperator op = (IOperator)e.Data.GetData("IOperator");
+          Point p = operatorsTreeView.PointToClient(new Point(e.X, e.Y));
+          TreeNode node = operatorsTreeView.GetNodeAt(p);
+          if (node != null) {
+            op = (IOperator)op.Clone();
+
+            while (op.SubOperators.Count > 0)
+              op.RemoveSubOperator(0);
+
+            IOperatorGroup group = (IOperatorGroup)node.Tag;
+            group.AddOperator(op);
+            node.Nodes.Add(CreateTreeNode(op));
+            operatorsTreeView.Sort();
+            EnableDisableButtons();
+          }
+        }
+      }
+    }
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/OperatorLibraryEditor.resx	(revision 1270)
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>139, 17</value>
+  </metadata>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>277, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/PersistenceManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/PersistenceManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/PersistenceManager.cs	(revision 1270)
@@ -0,0 +1,237 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.IO;
+using System.IO.Compression;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Static class for serializing and deserializing objects.
+  /// </summary>
+  public static class PersistenceManager {
+    /// <summary>
+    /// Creates an <see cref="XmlDocument"/> to persist an object with xml declaration.
+    /// </summary>
+    /// <returns>The created <see cref="XmlDocument"/>.</returns>
+    public static XmlDocument CreateXmlDocument() {
+      XmlDocument document = new XmlDocument();
+      document.AppendChild(document.CreateXmlDeclaration("1.0", null, null));
+      return document;
+    }
+    /// <summary>
+    /// Saves the specified <paramref name="instance"/> in the specified <paramref name="document"/>
+    /// if it has not already been serialized.
+    /// </summary>
+    /// <remarks>The tag name of the saved instance is its type name.<br/>
+    /// The guid is saved as an <see cref="XmlAttribute"/> with tag name <c>GUID</c>.</remarks>
+    /// <param name="instance">The object that should be saved.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public static XmlNode Persist(IStorable instance, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      string name = instance.GetType().Name;
+      name = name.Replace('`', '_');
+      return Persist(name, instance, document, persistedObjects);
+    }
+    /// <summary>
+    /// Saves the specified <paramref name="instance"/> in the specified <paramref name="document"/>
+    /// if it has not already been serialized.
+    /// </summary>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="instance">The object that should be saved.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public static XmlNode Persist(string name, IStorable instance, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      if(persistedObjects.ContainsKey(instance.Guid)) {
+        XmlNode node = document.CreateNode(XmlNodeType.Element, name, null);
+        XmlAttribute guidAttribute = document.CreateAttribute("GUID");
+        guidAttribute.Value = instance.Guid.ToString();
+        node.Attributes.Append(guidAttribute);
+        return node;
+      } else {
+        persistedObjects.Add(instance.Guid, instance);
+        XmlNode node = instance.GetXmlNode(name, document, persistedObjects);
+        return node;
+      }
+    }
+    /// <summary>
+    /// Loads a persisted object from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The guid is saved as an attribute with tag name <c>GUID</c>. The type of the 
+    /// persisted object is saved as attribute with tag name <c>Type</c>.<br/>
+    /// Calls <c>instance.Populate</c>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the object is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The loaded object.</returns>
+    public static IStorable Restore(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      Guid guid = new Guid(node.Attributes["GUID"].Value);
+      if(restoredObjects.ContainsKey(guid)) {
+        return restoredObjects[guid];
+      } else {
+        Type type = Type.GetType(node.Attributes["Type"].Value, true);
+        IStorable instance = (IStorable)Activator.CreateInstance(type);
+        restoredObjects.Add(guid, instance);
+        instance.Populate(node, restoredObjects);
+        return instance;
+      }
+    }
+    /// <summary>
+    /// Saves the specified <paramref name="instance"/> in the specified file through creating an 
+    /// <see cref="XmlDocument"/>.
+    /// </summary>
+    /// <param name="instance">The object that should be saved.</param>
+    /// <param name="filename">The name of the file where the <paramref name="object"/> should be saved.</param>
+    public static void Save(IStorable instance, string filename) {
+      using(FileStream stream = File.Create(filename)) {
+        Save(instance, stream);
+        stream.Close();
+      }
+    }
+    /// <summary>
+    /// Saves the specified <paramref name="instance"/> in the specified <paramref name="stream"/> 
+    /// through creating an <see cref="XmlDocument"/>.
+    /// </summary>
+    /// <param name="instance">The object that should be saved.</param>
+    /// <param name="stream">The (file) stream where the object should be saved.</param>
+    public static void Save(IStorable instance, Stream stream) {
+      XmlDocument document = PersistenceManager.CreateXmlDocument();
+      Dictionary<Guid, IStorable> dictionary = new Dictionary<Guid, IStorable>();
+      XmlNode rootNode = document.CreateElement("Root");
+      document.AppendChild(rootNode);
+      XmlNode necessaryPluginsNode = document.CreateElement("NecessaryPlugins");
+      rootNode.AppendChild(necessaryPluginsNode);
+      rootNode.AppendChild(Persist(instance, document, dictionary));
+      // determine the list of necessary plugins for this document
+      DiscoveryService service = new DiscoveryService();
+      List<PluginInfo> plugins = new List<PluginInfo>();
+      foreach(IStorable storeable in dictionary.Values) {
+        PluginInfo pluginInfo = service.GetDeclaringPlugin(storeable.GetType());
+        if(!plugins.Contains(pluginInfo)) plugins.Add(pluginInfo);
+      }
+      foreach(PluginInfo uniquePlugin in plugins) {
+        XmlNode necessaryPluginNode = document.CreateElement("Plugin");
+        XmlAttribute nameAttr = document.CreateAttribute("Name");
+        nameAttr.Value = uniquePlugin.Name;
+        XmlAttribute versionAttr = document.CreateAttribute("Version");
+        versionAttr.Value = uniquePlugin.Version.ToString();
+        necessaryPluginNode.Attributes.Append(nameAttr);
+        necessaryPluginNode.Attributes.Append(versionAttr);
+        necessaryPluginsNode.AppendChild(necessaryPluginNode);
+      }
+      document.Save(stream);
+    }
+    /// <summary>
+    /// Loads an object from a file with the specified <paramref name="filename"/>.
+    /// </summary>
+    /// <remarks>The object must be saved as an <see cref="XmlDocument"/>. <br/>
+    /// Calls <see cref="Restore"/>.</remarks>
+    /// <param name="filename">The filename of the file where the data is saved.</param>
+    /// <returns>The loaded object.</returns>
+    public static IStorable Load(string filename) {
+      using(FileStream stream = File.OpenRead(filename)) {
+        IStorable storable = Load(stream);
+        stream.Close();
+        return storable;
+      }
+    }
+    /// <summary>
+    /// Loads an object from the specified <paramref name="stream"/>.
+    /// </summary>
+    /// <remarks>The object must be saved as an <see cref="XmlDocument"/>. <br/>
+    /// Calls <see cref="Restore"/>.</remarks>
+    /// <param name="stream">The stream from where to load the data.</param>
+    /// <returns>The loaded object.</returns>
+    public static IStorable Load(Stream stream) {
+      XmlDocument doc = new XmlDocument();
+      doc.Load(stream);
+      XmlNode rootNode = doc.ChildNodes[1];
+      if(rootNode.Name == "Root" && rootNode.ChildNodes.Count == 2) {
+        // load documents that have a list of necessary plugins at the top
+        return PersistenceManager.Restore(rootNode.ChildNodes[1], new Dictionary<Guid, IStorable>());
+      } else {
+        // compatibility to load documents without list of necessary plugins 
+        return PersistenceManager.Restore(rootNode, new Dictionary<Guid, IStorable>());
+      }
+    }
+
+    /// <summary>
+    /// Loads an object from a zip file.
+    /// </summary>
+    /// <param name="serializedStorable">The zip file from where to load as byte array.</param>
+    /// <returns>The loaded object.</returns>
+    public static IStorable RestoreFromGZip(byte[] serializedStorable) {
+      GZipStream stream = new GZipStream(new MemoryStream(serializedStorable), CompressionMode.Decompress);
+      return Load(stream);
+    }
+
+    /// <summary>
+    /// Saves the specified <paramref name="storable"/> in a zip file.
+    /// </summary>
+    /// <remarks>Calls <see cref="Save(HeuristicLab.Core.IStorable, Stream)"/>.</remarks>
+    /// <param name="storable">The object to save.</param>
+    /// <returns>The zip stream as byte array.</returns>
+    public static byte[] SaveToGZip(IStorable storable) {
+      MemoryStream memStream = new MemoryStream();
+      GZipStream stream = new GZipStream(memStream, CompressionMode.Compress, true);
+      Save(storable, stream);
+      stream.Close();
+      return memStream.ToArray();
+    }
+
+    /// <summary>
+    /// Builds a meaningful string for the given <paramref name="type"/> with the namespace information, 
+    /// all its arguments, the assembly name...
+    /// </summary>
+    /// <param name="type">The type for which a string should be created.</param>
+    /// <returns>A string value of this type containing different additional information.</returns>
+    public static string BuildTypeString(Type type) {
+      string assembly = type.Assembly.FullName;
+      assembly = assembly.Substring(0, assembly.IndexOf(", "));
+
+      StringBuilder builder = new StringBuilder();
+      builder.Append(type.Namespace);
+      builder.Append(".");
+      builder.Append(type.Name);
+      Type[] args = type.GetGenericArguments();
+      if(args.Length > 0) {
+        builder.Append("[[");
+        builder.Append(BuildTypeString(args[0]));
+        builder.Append("]");
+        for(int i = 1; i < args.Length; i++) {
+          builder.Append(",[");
+          builder.Append(BuildTypeString(args[i]));
+          builder.Append("]");
+        }
+        builder.Append("]");
+      }
+      builder.Append(", ");
+      builder.Append(assembly);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// 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.Core")]
+[assembly: AssemblyDescription("HeuristicLab core classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("7d0840b8-3382-4b99-ab4e-5d1eb91fbec1")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,112 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.1433
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Core.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Core.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap CombinedOperator {
+            get {
+                object obj = ResourceManager.GetObject("CombinedOperator", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Icon HeuristicLab {
+            get {
+                object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Operator {
+            get {
+                object obj = ResourceManager.GetObject("Operator", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap ProgrammableOperator {
+            get {
+                object obj = ResourceManager.GetObject("ProgrammableOperator", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,133 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="CombinedOperator" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\CombinedOperator.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Operator" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Operator.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="ProgrammableOperator" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\ProgrammableOperator.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Scope.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Scope.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Scope.cs	(revision 1270)
@@ -0,0 +1,435 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Hierarchical container of variables (and of subscopes).
+  /// </summary>
+  public class Scope : ItemBase, IScope {
+    private IScope parent;
+
+    private string myName; 
+    /// <summary>
+    /// Gets the name of the current scope.
+    /// </summary>
+    public string Name {
+      get { return myName; }
+    }
+
+    private IDictionary<string, IVariable> myVariables;
+    /// <inheritdoc/>
+    public ICollection<IVariable> Variables {
+      get { return myVariables.Values; }
+    }
+    private IDictionary<string, string> myAliases;
+    /// <inheritdoc/>
+    public IEnumerable<KeyValuePair<string, string>> Aliases {
+      get { return myAliases; }
+    }
+    private List<IScope> mySubScopes;
+    /// <summary>
+    /// Gets all subscopes of the current instance.
+    /// <note type="caution"> The subscopes are returned as read-only.</note>
+    /// </summary>
+    public IList<IScope> SubScopes {
+      get { return mySubScopes.AsReadOnly(); }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Scope"/> having "Anonymous" as default name.
+    /// </summary>
+    public Scope() {
+      myName = "Anonymous";
+      myVariables = new Dictionary<string, IVariable>();
+      myAliases = new Dictionary<string, string>();
+      mySubScopes = new List<IScope>();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="Scope"/> with the given <paramref name="name"/>.
+    /// </summary>
+    /// <param name="name">The name of the scope.</param>
+    public Scope(string name)
+      : this() {
+      if (name != null) myName = name;
+    }
+
+    /// <inheritdoc/>
+    public void SetParent(IScope scope) {
+      parent = scope;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ScopeView"/> to represent the current instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="ScopeView"/>.</returns>
+    public override IView CreateView() {
+      return new ScopeView(this);
+    }
+
+    /// <inheritdoc/>
+    public IVariable GetVariable(string name) {
+      IVariable variable;
+      if (myVariables.TryGetValue(name, out variable))
+        return variable;
+      else
+        return null;
+    }
+    /// <inheritdoc/>
+    public void AddVariable(IVariable variable) {
+      myVariables.Add(variable.Name, variable);
+      variable.NameChanging += new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+      variable.NameChanged += new EventHandler(Variable_NameChanged);
+      OnVariableAdded(variable);
+    }
+
+    /// <inheritdoc/>
+    public void RemoveVariable(string name) {
+      IVariable variable;
+      if (myVariables.TryGetValue(name, out variable)) {
+        variable.NameChanging -= new EventHandler<NameChangingEventArgs>(Variable_NameChanging);
+        variable.NameChanged -= new EventHandler(Variable_NameChanged);
+        myVariables.Remove(name);
+        OnVariableRemoved(variable);
+      }
+    }
+    private void Variable_NameChanging(object sender, NameChangingEventArgs e) {
+      e.Cancel = myVariables.ContainsKey(e.Name);
+    }
+    private void Variable_NameChanged(object sender, EventArgs e) {
+      IVariable variable = (IVariable)sender;
+      string oldName = null;
+      foreach (KeyValuePair<string, IVariable> element in myVariables) {
+        if (element.Value == variable)
+          oldName = element.Key;
+      }
+      myVariables.Remove(oldName);
+      myVariables.Add(variable.Name, variable);
+    }
+    /// <inheritdoc cref="IScope.GetVariableValue&lt;T&gt;(string, bool)"/>
+    public T GetVariableValue<T>(string name, bool recursiveLookup) where T : class, IItem {
+      return GetVariableValue<T>(name, recursiveLookup, true);
+    }
+    /// <inheritdoc cref="IScope.GetVariableValue&lt;T&gt;(string, bool, bool)"/>
+    public T GetVariableValue<T>(string name, bool recursiveLookup, bool throwOnError) where T : class, IItem {
+      return (T)GetVariableValue(name, recursiveLookup, throwOnError);
+    }
+    /// <inheritdoc cref="IScope.GetVariableValue(string, bool)"/>
+    public IItem GetVariableValue(string name, bool recursiveLookup) {
+      return GetVariableValue(name, recursiveLookup, true);
+    }
+    /// <inheritdoc cref="IScope.GetVariableValue(string, bool, bool)"/>
+    public IItem GetVariableValue(string name, bool recursiveLookup, bool throwOnError) {
+      IVariable variable;
+      name = TranslateName(name);
+      if (myVariables.TryGetValue(name, out variable)) {
+        return variable.Value;
+      } else {
+        if (recursiveLookup && (parent != null))
+          return parent.GetVariableValue(name, recursiveLookup, throwOnError);
+        else {
+          if (throwOnError)
+            throw new ArgumentException("Variable " + name + " not found");
+          else
+            return null;
+        }
+      }
+    }
+    /// <inheritdoc/>
+    public string TranslateName(string name) {
+      while (myAliases.ContainsKey(name))
+        name = myAliases[name];
+      if (parent != null)
+        name = parent.TranslateName(name);
+      return name;
+    }
+    /// <inheritdoc/>
+    public void AddAlias(string alias, string name) {
+      RemoveAlias(alias);
+      if (alias != name) {
+        myAliases.Add(alias, name);
+        OnAliasAdded(alias);
+      }
+    }
+    /// <inheritdoc/>
+    public void RemoveAlias(string alias) {
+      if (myAliases.ContainsKey(alias)) {
+        myAliases.Remove(alias);
+        OnAliasRemoved(alias);
+      }
+    }
+
+    /// <inheritdoc/>
+    public void AddSubScope(IScope scope) {
+      scope.SetParent(this);
+      mySubScopes.Add(scope);
+      OnSubScopeAdded(scope, mySubScopes.Count - 1);
+    }
+    /// <inheritdoc/>
+    public void RemoveSubScope(IScope scope) {
+      int index = mySubScopes.IndexOf(scope);
+      if (mySubScopes.Remove(scope)) {
+        scope.SetParent(null);
+        OnSubScopeRemoved(scope, index);
+      }
+    }
+    /// <inheritdoc/>
+    public void ReorderSubScopes(int[] sequence) {
+      IScope[] scopes = mySubScopes.ToArray();
+      mySubScopes.Clear();
+      for (int i = 0; i < scopes.Length; i++)
+        mySubScopes.Add(scopes[sequence[i]]);
+      OnSubScopesReordered();
+    }
+    /// <inheritdoc/>
+    public IScope GetScope(Guid guid) {
+      if (Guid == guid) return this;
+      else {
+        for (int i = 0; i < mySubScopes.Count; i++) {
+          IScope s = mySubScopes[i].GetScope(guid);
+          if (s != null) return s;
+        }
+      }
+      return null;
+    }
+    /// <inheritdoc/>
+    public IScope GetScope(string name) {
+      if (Name == name) return this;
+      else {
+        for (int i = 0; i < mySubScopes.Count; i++) {
+          IScope s = mySubScopes[i].GetScope(name);
+          if (s != null) return s;
+        }
+      }
+      return null;
+    }
+
+    /// <inheritdoc/>
+    public void Clear() {
+      string[] variableNames = new string[Variables.Count];
+      int i = 0;
+      foreach (IVariable variable in Variables) {
+        variableNames[i] = variable.Name;
+        i++;
+      }
+      for (int j = 0; j < variableNames.Length; j++)
+        RemoveVariable(variableNames[j]);
+
+      KeyValuePair<string, string>[] aliases = new KeyValuePair<string,string>[myAliases.Count];
+      myAliases.CopyTo(aliases, 0);
+      for (int j = 0; j < aliases.Length; j++)
+        RemoveAlias(aliases[j].Key);
+
+      while (SubScopes.Count > 0)
+        RemoveSubScope(SubScopes[0]);
+    }
+
+    /// <inheritdoc/>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Scope clone = (Scope)base.Clone(clonedObjects);
+      clone.myName = Name;
+
+      foreach (IVariable variable in myVariables.Values)
+        clone.AddVariable((IVariable)Auxiliary.Clone(variable, clonedObjects));
+      foreach (KeyValuePair<string, string> alias in myAliases)
+        clone.AddAlias(alias.Key, alias.Value);
+      for (int i = 0; i < SubScopes.Count; i++)
+        clone.AddSubScope((IScope)Auxiliary.Clone(SubScopes[i], clonedObjects));
+
+      return clone;
+    }
+
+    /// <inheritdoc />
+    public event EventHandler<VariableEventArgs> VariableAdded;
+    /// <summary>
+    /// Fires a new <c>VariableAdded</c> event.
+    /// </summary>
+    /// <param name="variable">The variable that has been added.</param>
+    protected virtual void OnVariableAdded(IVariable variable) {
+      if (VariableAdded != null)
+        VariableAdded(this, new VariableEventArgs(variable));
+    }
+    /// <inheritdoc />
+    public event EventHandler<VariableEventArgs> VariableRemoved;
+    /// <summary>
+    /// Fires a new <c>VariableRemoved</c>.
+    /// </summary>
+    /// <param name="variable">The variable that has been deleted.</param>
+    protected virtual void OnVariableRemoved(IVariable variable) {
+      if (VariableRemoved != null)
+        VariableRemoved(this, new VariableEventArgs(variable));
+    }
+    /// <inheritdoc /> 
+    public event EventHandler<AliasEventArgs> AliasAdded;
+    /// <summary>
+    /// Fires a new <c>AliasAdded</c> event.
+    /// </summary>
+    /// <param name="alias">The alias that has been added.</param>
+    protected virtual void OnAliasAdded(string alias) {
+      if (AliasAdded != null)
+        AliasAdded(this, new AliasEventArgs(alias));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<AliasEventArgs> AliasRemoved;
+    /// <summary>
+    /// Fires a new <c>AliasRemoved</c> event.
+    /// </summary>
+    /// <param name="alias">The alias that has been deleted.</param>
+    protected virtual void OnAliasRemoved(string alias) {
+      if (AliasRemoved != null)
+        AliasRemoved(this, new AliasEventArgs(alias));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<ScopeIndexEventArgs> SubScopeAdded;
+    /// <summary>
+    /// Fires a new <c>SubScopeAdded</c> event.
+    /// </summary>
+    /// <param name="scope">The sub scope that has been added.</param>
+    /// <param name="index">The index where the scope has been added.</param>
+    protected virtual void OnSubScopeAdded(IScope scope, int index) {
+      if (SubScopeAdded != null)
+        SubScopeAdded(this, new ScopeIndexEventArgs(scope, index));
+    }
+    /// <inheritdoc/>
+    public event EventHandler<ScopeIndexEventArgs> SubScopeRemoved;
+    /// <summary>
+    /// Fires a new <c>SubScopeRemoved</c> event.
+    /// </summary>
+    /// <param name="scope">The sub scope that has been deleted.</param>
+    /// <param name="index">The position of the sub scope.</param>
+    protected virtual void OnSubScopeRemoved(IScope scope, int index) {
+      if (SubScopeRemoved != null)
+        SubScopeRemoved(this, new ScopeIndexEventArgs(scope, index));
+    }
+    /// <inheritdoc />
+    public event EventHandler SubScopesReordered;
+    /// <summary>
+    /// Fires a new <c>SubScopesReordered</c> event
+    /// </summary>
+    protected virtual void OnSubScopesReordered() {
+      if (SubScopesReordered != null)
+        SubScopesReordered(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the given <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>
+    /// Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>.<br/>
+    /// A quick overview how the single elements of the current instance are saved:
+    /// <list type="bullet">
+    /// <item>
+    /// <term>Name: </term>
+    /// <description>Saved as an <see cref="XmlAttribute"/> having the tag name <c>Name</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Variables: </term>
+    /// <description>A child node is created with the tag name <c>Variables</c>. Beyond this child node,
+    /// all variables are saved as child nodes.</description>
+    /// </item>
+    /// <item>
+    /// <term>Aliases: </term>
+    /// <description>A child node is created with the tag name <c>Aliases</c>. Beyond this child node, 
+    /// all aliases are saved as child nodes with the tag name <c>Alias</c>. Each alias has an
+    /// <see cref="XmlAttribute"/> with the tag name "Alias", holding the alias, and an attribute 
+    /// with the tag name <c>Name</c>, holding the name of the alias.</description>
+    /// </item>
+    /// <item>
+    /// <term>Sub scopes: </term>
+    /// <description>A child node is created with the tag name <c>SubScopes</c>. Beyond this child node,
+    /// all sub scopes are saved as child nodes.</description>
+    /// </item>
+    /// </list>
+    /// </remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute nameAttribute = document.CreateAttribute("Name");
+      nameAttribute.Value = Name.ToString();
+      node.Attributes.Append(nameAttribute);
+
+      XmlNode variables = document.CreateNode(XmlNodeType.Element, "Variables", null);
+      foreach (IVariable variable in Variables)
+        variables.AppendChild(PersistenceManager.Persist(variable, document, persistedObjects));
+      node.AppendChild(variables);
+
+      XmlNode aliases = document.CreateNode(XmlNodeType.Element, "Aliases", null);
+      foreach (KeyValuePair<string, string> alias in myAliases) {
+        XmlNode aliasNode = document.CreateNode(XmlNodeType.Element, "Alias", null);
+        XmlAttribute keyAttribute = document.CreateAttribute("Alias");
+        keyAttribute.Value = alias.Key;
+        aliasNode.Attributes.Append(keyAttribute);
+        XmlAttribute valueAttribute = document.CreateAttribute("Name");
+        valueAttribute.Value = alias.Value;
+        aliasNode.Attributes.Append(valueAttribute);
+        aliases.AppendChild(aliasNode);
+      }
+      node.AppendChild(aliases);
+
+      XmlNode subScopes = document.CreateNode(XmlNodeType.Element, "SubScopes", null);
+      for (int i = 0; i < SubScopes.Count; i++)
+        subScopes.AppendChild(PersistenceManager.Persist(SubScopes[i], document, persistedObjects));
+      node.AppendChild(subScopes);
+
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted scope from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> to get further information on how the current instance must
+    /// be saved. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the boolean value is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myName = node.Attributes["Name"].Value;
+
+      XmlNode variables = node.SelectSingleNode("Variables");
+      foreach (XmlNode variableNode in variables.ChildNodes) {
+        IVariable variable = (IVariable)PersistenceManager.Restore(variableNode, restoredObjects);
+        AddVariable(variable);
+      }
+
+      XmlNode aliases = node.SelectSingleNode("Aliases");
+      if (aliases != null) {
+        foreach (XmlNode aliasNode in aliases.ChildNodes)
+          AddAlias(aliasNode.Attributes["Alias"].Value, aliasNode.Attributes["Name"].Value);
+      }
+
+      XmlNode subScopes = node.SelectSingleNode("SubScopes");
+      for (int i = 0; i < subScopes.ChildNodes.Count; i++) {
+        IScope scope = (IScope)PersistenceManager.Restore(subScopes.ChildNodes[i], restoredObjects);
+        AddSubScope(scope);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeEventArgs.cs	(revision 1270)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected scope.
+  /// </summary>
+  public class ScopeEventArgs : ItemEventArgs {
+    /// <summary>
+    /// Gets the affected scope.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class <see cref="ItemEventArgs"/>.
+    /// No own data storage present.</remarks>
+    public IScope Scope {
+      get { return (IScope)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ScopeEventArgs"/> with the specified scope.
+    /// </summary>
+    /// <param name="scope">The affected scope.</param>
+    public ScopeEventArgs(IScope scope)
+      : base(scope) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeIndexEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeIndexEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeIndexEventArgs.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected scope at the specified index.
+  /// </summary>
+  public class ScopeIndexEventArgs : ItemIndexEventArgs {
+    /// <summary>
+    /// Gets the affected scope.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class 
+    /// <see cref="ItemIndexEventArgs"/>. No own data storage present.</remarks>
+    public IScope Scope {
+      get { return (IScope)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ScopeIndexEventArgs"/> with the specified 
+    /// <paramref name="scope"/> and <paramref name="index"/>.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="ItemIndexEventArgs"/>.</remarks>
+    /// <param name="scope">The affected scope.</param>
+    /// <param name="index">The affected index.</param>
+    public ScopeIndexEventArgs(IScope scope, int index)
+      : base(scope, index) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.Designer.cs	(revision 1270)
@@ -0,0 +1,146 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class ScopeView {
+    /// <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 (scopesTreeView.Nodes.Count > 0) {
+        RemoveTreeNode(scopesTreeView.Nodes[0]);
+        scopesTreeView.Nodes.Clear();
+      }
+      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.scopesTreeView = new System.Windows.Forms.TreeView();
+      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.automaticUpdatingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.variablesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.contextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // scopesTreeView
+      // 
+      this.scopesTreeView.ContextMenuStrip = this.contextMenuStrip;
+      this.scopesTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopesTreeView.HideSelection = false;
+      this.scopesTreeView.Location = new System.Drawing.Point(0, 0);
+      this.scopesTreeView.Name = "scopesTreeView";
+      this.scopesTreeView.ShowNodeToolTips = true;
+      this.scopesTreeView.Size = new System.Drawing.Size(400, 400);
+      this.scopesTreeView.TabIndex = 0;
+      this.scopesTreeView.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.scopesTreeView_AfterCollapse);
+      this.scopesTreeView.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.scopesTreeView_BeforeExpand);
+      this.scopesTreeView.DoubleClick += new System.EventHandler(this.scopesTreeView_DoubleClick);
+      this.scopesTreeView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.scopesTreeView_MouseDown);
+      this.scopesTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.scopesTreeView_ItemDrag);
+      // 
+      // contextMenuStrip
+      // 
+      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.automaticUpdatingToolStripMenuItem,
+            this.refreshToolStripMenuItem,
+            this.toolStripMenuItem1,
+            this.variablesToolStripMenuItem,
+            this.viewToolStripMenuItem});
+      this.contextMenuStrip.Name = "contextMenuStrip";
+      this.contextMenuStrip.Size = new System.Drawing.Size(180, 98);
+      this.contextMenuStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip_Opening);
+      // 
+      // automaticUpdatingToolStripMenuItem
+      // 
+      this.automaticUpdatingToolStripMenuItem.CheckOnClick = true;
+      this.automaticUpdatingToolStripMenuItem.Name = "automaticUpdatingToolStripMenuItem";
+      this.automaticUpdatingToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+      this.automaticUpdatingToolStripMenuItem.Text = "Automatic &Updating";
+      this.automaticUpdatingToolStripMenuItem.ToolTipText = "Automatically update scope editor during execution";
+      this.automaticUpdatingToolStripMenuItem.Click += new System.EventHandler(this.automaticUpdatingToolStripMenuItem_Click);
+      // 
+      // refreshToolStripMenuItem
+      // 
+      this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem";
+      this.refreshToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+      this.refreshToolStripMenuItem.Text = "&Refresh";
+      this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click);
+      // 
+      // toolStripMenuItem1
+      // 
+      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+      this.toolStripMenuItem1.Size = new System.Drawing.Size(176, 6);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+      this.viewToolStripMenuItem.Text = "&View";
+      // 
+      // variablesToolStripMenuItem
+      // 
+      this.variablesToolStripMenuItem.Name = "variablesToolStripMenuItem";
+      this.variablesToolStripMenuItem.Size = new System.Drawing.Size(179, 22);
+      this.variablesToolStripMenuItem.Text = "&Variables...";
+      this.variablesToolStripMenuItem.Click += new System.EventHandler(this.variablesToolStripMenuItem_Click);
+      // 
+      // ScopeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.scopesTreeView);
+      this.Name = "ScopeView";
+      this.Size = new System.Drawing.Size(400, 400);
+      this.contextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TreeView scopesTreeView;
+    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem automaticUpdatingToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem refreshToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+    private System.Windows.Forms.ToolStripMenuItem variablesToolStripMenuItem;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.cs	(revision 1270)
@@ -0,0 +1,280 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual represenation of <see cref="IScope"/>.
+  /// </summary>
+  public partial class ScopeView : ViewBase {
+    private Dictionary<IScope, TreeNode> scopeNodeTable;
+    private Dictionary<IScope, bool> scopeExpandedTable;
+
+    /// <summary>
+    /// Gets or sets the scope to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IScope Scope {
+      get { return (IScope)Item; }
+      set { base.Item = value; }
+    }
+    private bool myAutomaticUpdating;
+    /// <summary>
+    /// Gets information whether the scope is automatically updating. 
+    /// </summary>
+    public bool AutomaticUpdating {
+      get { return myAutomaticUpdating; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ScopeView"/> with caption "Scope" and 
+    /// property <see cref="AutomaticUpdating"/> set to <c>false</c>.
+    /// </summary>
+    public ScopeView() {
+      InitializeComponent();
+      Caption = "Scope";
+      scopeNodeTable = new Dictionary<IScope, TreeNode>();
+      scopeExpandedTable = new Dictionary<IScope, bool>();
+      myAutomaticUpdating = false;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ScopeView"/> with the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ScopeView()"/>.</remarks>
+    /// <param name="scope">The scope to represent visually.</param>
+    public ScopeView(IScope scope)
+      : this() {
+      Scope = scope;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (scopesTreeView.Nodes.Count > 0)
+        RemoveTreeNode(scopesTreeView.Nodes[0]);
+      scopesTreeView.SelectedNode = null;
+      scopesTreeView.Nodes.Clear();
+      if (Scope == null) {
+        Caption = "Scope";
+        scopesTreeView.Enabled = false;
+      } else {
+        Caption = Scope.Name + " (" + Scope.GetType().Name + ")";
+        scopesTreeView.Nodes.Add(CreateTreeNode(Scope));
+        scopesTreeView.Enabled = true;
+      }
+    }
+
+    private TreeNode CreateTreeNode(IScope scope) {
+      TreeNode node = new TreeNode();
+      node.Text = scope.Name;
+      node.Tag = scope;
+
+      scopeNodeTable.Add(scope, node);
+      scopeExpandedTable.Add(scope, false);
+      if (myAutomaticUpdating) {
+        scope.SubScopeAdded += new EventHandler<ScopeIndexEventArgs>(Scope_SubScopeAdded);
+        scope.SubScopeRemoved += new EventHandler<ScopeIndexEventArgs>(Scope_SubScopeRemoved);
+        scope.SubScopesReordered += new EventHandler(Scope_SubScopesReordered);
+      }
+      if (scope.SubScopes.Count > 0)
+        node.Nodes.Add(new TreeNode());
+      return node;
+    }
+    private void RemoveTreeNode(TreeNode node) {
+      foreach (TreeNode child in node.Nodes)
+        RemoveTreeNode(child);
+
+      IScope scope = node.Tag as IScope;
+      if ((scope != null) && (scopeNodeTable.ContainsKey(scope))) {
+        scopeNodeTable.Remove(scope);
+        scopeExpandedTable.Remove(scope);
+        scope.SubScopeAdded -= new EventHandler<ScopeIndexEventArgs>(Scope_SubScopeAdded);
+        scope.SubScopeRemoved -= new EventHandler<ScopeIndexEventArgs>(Scope_SubScopeRemoved);
+        scope.SubScopesReordered -= new EventHandler(Scope_SubScopesReordered);
+      }
+    }
+
+    #region TreeView Events
+    private void scopesTreeView_DoubleClick(object sender, EventArgs e) {
+      // make sure that we can't get NullPointerExceptions
+      if(scopesTreeView.SelectedNode != null && scopesTreeView.SelectedNode.Tag != null) {
+        IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
+        PluginManager.ControlManager.ShowControl(new VariablesScopeView(scope));
+      }
+    }
+    private void scopesTreeView_BeforeExpand(object sender, TreeViewCancelEventArgs e) {
+      TreeNode node = e.Node;
+      IScope scope = (IScope)node.Tag;
+
+      node.Nodes.Clear();
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        node.Nodes.Add(CreateTreeNode(scope.SubScopes[i]));
+      scopeExpandedTable[scope] = true;
+    }
+    private void scopesTreeView_AfterCollapse(object sender, System.Windows.Forms.TreeViewEventArgs e) {
+      TreeNode node = e.Node;
+      IScope scope = (IScope)node.Tag;
+
+      if (node.Nodes.Count > 0) {
+        for (int i = 0; i < node.Nodes.Count; i++)
+          RemoveTreeNode(node.Nodes[i]);
+        node.Nodes.Clear();
+        node.Nodes.Add(new TreeNode());
+      }
+      scopeExpandedTable[scope] = false;
+    }
+    private void scopesTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = (TreeNode)e.Item;
+      IScope scope = node.Tag as IScope;
+      if (scope != null) {
+        DataObject data = new DataObject();
+        data.SetData("IScope", scope);
+        data.SetData("DragSource", scopesTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    #endregion
+
+    #region Context Menu Events
+    private void contextMenuStrip_Opening(object sender, CancelEventArgs e) {
+      variablesToolStripMenuItem.Enabled = false;
+      viewToolStripMenuItem.DropDownItems.Clear();
+      viewToolStripMenuItem.Enabled = false;
+      if (scopesTreeView.SelectedNode != null) {
+        variablesToolStripMenuItem.Enabled = true;
+        IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
+        foreach (IVariable variable in scope.Variables) {
+          if (variable.Value is IVisualizationItem) {
+            ToolStripMenuItem item = new ToolStripMenuItem();
+            item.Text = variable.Name + "...";
+            item.Tag = variable.Value;
+            item.Click += new EventHandler(showViewToolStripMenuItem_Click);
+            viewToolStripMenuItem.DropDownItems.Add(item);
+          }
+        }
+        if (viewToolStripMenuItem.DropDownItems.Count > 0)
+          viewToolStripMenuItem.Enabled = true;
+      }
+    }
+    private void automaticUpdatingToolStripMenuItem_Click(object sender, EventArgs e) {
+      ToolStripMenuItem item = (ToolStripMenuItem)sender;
+      myAutomaticUpdating = item.Checked;
+      if (myAutomaticUpdating)
+        Refresh();
+    }
+    private void refreshToolStripMenuItem_Click(object sender, EventArgs e) {
+      Refresh();
+    }
+    private void variablesToolStripMenuItem_Click(object sender, EventArgs e) {
+      IScope scope = (IScope)scopesTreeView.SelectedNode.Tag;
+      PluginManager.ControlManager.ShowControl(new VariablesScopeView(scope));
+    }
+    private void showViewToolStripMenuItem_Click(object sender, EventArgs e) {
+      IItem item = (IItem)((ToolStripMenuItem)sender).Tag;
+      PluginManager.ControlManager.ShowControl(item.CreateView());
+    }
+    #endregion
+
+    #region Scope Events
+    private delegate void ScopeDelegate(IScope scope);
+    private delegate void ScopeScopeIndexDelegate(IScope scope, IScope subScope, int index);
+    private void Scope_SubScopeAdded(object sender, ScopeIndexEventArgs e) {
+      IScope scope = (IScope)sender;
+      TreeNode node = scopeNodeTable[scope];
+      if (scopeExpandedTable[scope] || (scope.SubScopes.Count == 1))
+        AddSubScope(scope, e.Scope, e.Index);
+    }
+    private void AddSubScope(IScope scope, IScope subScope, int index) {
+      if (InvokeRequired) {
+        Invoke(new ScopeScopeIndexDelegate(AddSubScope), scope, subScope, index);
+      } else {
+        TreeNode parent = scopeNodeTable[scope];
+        TreeNode child;
+        if (parent.IsExpanded)
+          child = CreateTreeNode(subScope);
+        else
+          child = new TreeNode();
+        parent.Nodes.Insert(index, child);
+      }
+    }
+    private void Scope_SubScopeRemoved(object sender, ScopeIndexEventArgs e) {
+      IScope scope = (IScope)sender;
+      TreeNode node = scopeNodeTable[scope];
+      if (scopeExpandedTable[scope] || (scope.SubScopes.Count == 0))
+        RemoveSubScope(scope, e.Scope, e.Index);
+    }
+    private void RemoveSubScope(IScope scope, IScope subScope, int index) {
+      if (InvokeRequired) {
+        Invoke(new ScopeScopeIndexDelegate(RemoveSubScope), scope, subScope, index);
+      } else {
+        if (scopeNodeTable.ContainsKey(subScope)) {
+          TreeNode node = scopeNodeTable[subScope];
+          RemoveTreeNode(scopeNodeTable[subScope]);
+          node.Remove();
+        } else {
+          TreeNode node = scopeNodeTable[scope];
+          node.Nodes[0].Remove();
+        }
+      }
+    }
+    private void Scope_SubScopesReordered(object sender, EventArgs e) {
+      IScope scope = (IScope)sender;
+      TreeNode node = scopeNodeTable[scope];
+      if (scopeExpandedTable[scope])
+        ReorderSubScopes(scope);
+    }
+    private void ReorderSubScopes(IScope scope) {
+      if (InvokeRequired) {
+        Invoke(new ScopeDelegate(ReorderSubScopes), scope);
+      } else {
+        TreeNode node = scopeNodeTable[scope];
+        node.Nodes.Clear();
+        for (int i = 0; i < scope.SubScopes.Count; i++)
+          node.Nodes.Add(scopeNodeTable[scope.SubScopes[i]]);
+      }
+    }
+    #endregion
+
+    #region Mouse Events
+    private void scopesTreeView_MouseDown(object sender, MouseEventArgs e) {
+      if (e.Button != MouseButtons.Right)
+        return;
+      TreeNode clickedNode = scopesTreeView.GetNodeAt(e.X, e.Y);
+      if (clickedNode != null) {
+        scopesTreeView.SelectedNode = clickedNode;
+        scopesTreeView.Refresh();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ScopeView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/StorableBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/StorableBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/StorableBase.cs	(revision 1270)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The base class for all storable objects.
+  /// </summary>
+  public abstract class StorableBase : IStorable {
+    private Guid myGuid;
+    /// <summary>
+    /// Gets the Guid of the item.
+    /// </summary>
+    public Guid Guid {
+      get { return myGuid; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="StorableBase"/> with a new <see cref="Guid"/>. 
+    /// </summary>
+    protected StorableBase() {
+      myGuid = Guid.NewGuid();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Uses the <see cref="Auxiliary.Clone"/> method of the class <see cref="Auxiliary"/>.</remarks>
+    /// <returns>The clone.</returns>
+    public object Clone() {
+      return Auxiliary.Clone(this, new Dictionary<Guid, object>());
+    }
+    /// <summary>
+    /// Clones the current instance with the <see cref="M:Activator.CreateInstance"/> 
+    /// method of <see cref="Activator"/>.
+    /// </summary>
+    /// <param name="clonedObjects">All already cloned objects.</param>
+    /// <returns>The clone.</returns>
+    public virtual object Clone(IDictionary<Guid, object> clonedObjects) {
+      object clone = Activator.CreateInstance(this.GetType());
+      clonedObjects.Add(Guid, clone);
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The type of the current instance is saved as <see cref="XmlAttribute"/> with tag name
+    /// <c>Type</c>, the guid is also saved as an attribute with the tag name <c>GUID</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public virtual XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = document.CreateNode(XmlNodeType.Element, name, null);
+      XmlAttribute typeAttribute = document.CreateAttribute("Type");
+      typeAttribute.Value = PersistenceManager.BuildTypeString(this.GetType());
+      node.Attributes.Append(typeAttribute);
+      XmlAttribute guidAttribute = document.CreateAttribute("GUID");
+      guidAttribute.Value = Guid.ToString();
+      node.Attributes.Append(guidAttribute);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted object from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Loads only guid; type,... already loaded by the <see cref="PersistenceManager"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the object is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public virtual void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      myGuid = new Guid(node.Attributes["GUID"].Value);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Variable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Variable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/Variable.cs	(revision 1270)
@@ -0,0 +1,185 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents a variable of an operator having a name and a value.
+  /// </summary>
+  public class Variable : ItemBase, IVariable {
+    private string myName;
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnNameChanging"/> and also <see cref="OnNameChanged"/> 
+    /// eventually in the setter.</remarks>
+    public string Name {
+      get { return myName; }
+      set {
+        if (!myName.Equals(value)) {
+          NameChangingEventArgs e = new NameChangingEventArgs(value);
+          OnNameChanging(e);
+          if (!e.Cancel) {
+            myName = value;
+            OnNameChanged();
+          }
+        }
+      }
+    }
+    private IItem myValue;
+    /// <inheritdoc/>
+    /// <remarks>Calls <see cref="OnValueChanged"/> in the setter.</remarks>
+    public IItem Value {
+      get { return myValue; }
+      set {
+        if (myValue != value) {
+          myValue = value;
+          OnValueChanged();
+        }
+      }
+    }
+    
+    /// <summary>
+    /// Initializes a new instance of <see cref="Variable"/> with name <c>Anonymous</c> 
+    /// and value <c>null</c>.
+    /// </summary>
+    public Variable() {
+      myName = "Anonymous";
+      myValue = null;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="Variable"/> with the specified <paramref name="name"/>
+    /// and the specified <paramref name="value"/>.
+    /// </summary>
+    /// <param name="name">The name of the current instance.</param>
+    /// <param name="value">The value of the current instance.</param>
+    public Variable(string name, IItem value) {
+      myName = name;
+      myValue = value;
+    }
+
+    /// <inheritdoc cref="IVariable.GetValue&lt;T&gt;"/>
+    public T GetValue<T>() where T : class, IItem {
+      return (T)Value;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="VariableView"/> to represent the current instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="VariableView"/>.</returns>
+    public override IView CreateView() {
+      return new VariableView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="Variable"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Variable clone = new Variable();
+      clonedObjects.Add(Guid, clone);
+      clone.myName = Name;
+      if (Value != null)
+        clone.myValue = (IItem)Auxiliary.Clone(Value, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Gets the string representation of the current instance in the format: <c>Name: [null|Value]</c>.
+    /// </summary>
+    /// <returns>The current instance as a string.</returns>
+    public override string ToString() {
+      return Name + ": " + ((Value == null) ? ("null") : (Value.ToString()));
+    }
+
+    /// <inheritdoc/>
+    public event EventHandler<NameChangingEventArgs> NameChanging;
+    /// <summary>
+    /// Fires a new <c>NameChanging</c> event.
+    /// </summary>
+    /// <param name="e">The event arguments of the changing.</param>
+    protected virtual void OnNameChanging(NameChangingEventArgs e) {
+      if (NameChanging != null)
+        NameChanging(this, e);
+    }
+    /// <inheritdoc/>
+    public event EventHandler NameChanged;
+    /// <summary>
+    /// Fires a new <c>NameChanged</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/>.</remarks>
+    protected virtual void OnNameChanged() {
+      if (NameChanged != null)
+        NameChanged(this, new EventArgs());
+      OnChanged();
+    }
+    /// <inheritdoc/>
+    public event EventHandler ValueChanged;
+    /// <summary>
+    /// Fires a new <c>ValueChanged</c> even.
+    /// </summary>
+    protected virtual void OnValueChanged() {
+      if (ValueChanged != null)
+        ValueChanged(this, new EventArgs());
+      OnChanged();
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>.<br/>
+    /// The name of the current instance is saved as an <see cref="XmlAttribute"/> with the 
+    /// tag name <c>Name</c>, the value is saved as child node with the tag name <c>Value</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute nameAttribute = document.CreateAttribute("Name");
+      nameAttribute.Value = Name;
+      node.Attributes.Append(nameAttribute);
+      if (Value != null)
+        node.AppendChild(PersistenceManager.Persist("Value", Value, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted variable from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> to get information on how the variable must be saved.<br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the variable is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myName = node.Attributes["Name"].Value;
+      XmlNode valueNode = node.SelectSingleNode("Value");
+      if (valueNode != null)
+        myValue = (IItem)PersistenceManager.Restore(valueNode, restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableEventArgs.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected variable.
+  /// </summary>
+  public class VariableEventArgs : ItemEventArgs {
+    /// <summary>
+    /// Gets the affected variable.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class <see cref="ItemEventArgs"/>.
+    /// No own data storage present.</remarks>
+    public IVariable Variable {
+      get { return (IVariable)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableEventArgs"/> with the specified 
+    /// <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="ItemEventArgs"/>.</remarks>
+    /// <param name="variable">The affected variable.</param>
+    public VariableEventArgs(IVariable variable)
+      : base(variable) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfo.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfo.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfo.cs	(revision 1270)
@@ -0,0 +1,248 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Class for storing meta-information about variables/parameters of an operator.
+  /// </summary>
+  public class VariableInfo : ItemBase, IVariableInfo {
+    private string myActualName;
+    /// <summary>
+    /// Gets or sets the actual name of the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnActualNameChanged"/> in the setter.</remarks>
+    public string ActualName {
+      get { return myActualName; }
+      set {
+        if (myActualName != value) {
+          myActualName = value;
+          OnActualNameChanged();
+        }
+      }
+    }
+    private string myFormalName;
+    /// <summary>
+    /// Gets the formal name of the current instance.
+    /// </summary>
+    public string FormalName {
+      get { return myFormalName; }
+    }
+    private string myDescription;
+    /// <summary>
+    /// Gets the description of the current instance.
+    /// </summary>
+    public string Description {
+      get { return myDescription; }
+    }
+    private Type myDataType;
+    /// <summary>
+    /// Gets the data type of the parameter.
+    /// </summary>
+    public Type DataType {
+      get { return myDataType; }
+    }
+    private VariableKind myKind;
+    /// <summary>
+    /// Gets the kind of the parameter (input parameter, output parameter,...).
+    /// </summary>
+    public VariableKind Kind {
+      get { return myKind; }
+    }
+    private bool myLocal;
+    /// <summary>
+    /// Gets or sets a boolean value, whether the variable is a local one. 
+    /// </summary>
+    /// <remarks>Calls <see cref="OnLocalChanged"/> in the setter.</remarks>
+    public bool Local {
+      get { return myLocal; }
+      set {
+        if (myLocal != value) {
+          myLocal = value;
+          OnLocalChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInfo"/> with actual and formal name "Anonymous",
+    /// no description, a <c>null</c> data type and the <c>local</c> flag set to <c>false</c>. The type of 
+    /// the variable is an input parameter.
+    /// </summary>
+    public VariableInfo() {
+      myActualName = "Anonymous";
+      myFormalName = "Anonymous";
+      myDescription = "";
+      myDataType = null;
+      myKind = VariableKind.In;
+      myLocal = false;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInfo"/> with the given parameters.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableInfo()"/>.<br/>
+    /// The formal name is assigned to the actual name, too.</remarks>
+    /// <param name="formalName">The formal name of the current instance.</param>
+    /// <param name="description">The description of the current instance.</param>
+    /// <param name="dataType">The data type of the parameter.</param>
+    /// <param name="kind">The type of the parameter.</param>
+    public VariableInfo(string formalName, string description, Type dataType, VariableKind kind)
+      : this() {
+      myActualName = formalName;
+      myFormalName = formalName;
+      myDescription = description;
+      myDataType = dataType;
+      myKind = kind;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="VariableInfoView"/> to represent the current instance
+    /// visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="VariableInfoView"/>.</returns>
+    public override IView CreateView() {
+      return new VariableInfoView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="VariableInfo"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      VariableInfo clone = new VariableInfo();
+      clonedObjects.Add(Guid, clone);
+      clone.myActualName = ActualName;
+      clone.myFormalName = FormalName;
+      clone.myDescription = Description;
+      clone.myDataType = DataType;
+      clone.myKind = Kind;
+      clone.myLocal = Local;
+      return clone;
+    }
+
+    /// <inheritdoc/>
+    public event EventHandler ActualNameChanged;
+    /// <summary>
+    /// Fires a new <c>ActualNameChanged</c> event.
+    /// </summary>
+    protected virtual void OnActualNameChanged() {
+      if (ActualNameChanged != null)
+        ActualNameChanged(this, new EventArgs());
+    }
+    /// <inheritdoc />
+    public event EventHandler LocalChanged;
+    /// <summary>
+    /// Fires a new <c>LocalChanged</c> event.
+    /// </summary>
+    protected virtual void OnLocalChanged() {
+      if (LocalChanged != null)
+        LocalChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>. <br/>
+    /// A quick overview how the single elements of the current instance are saved:
+    /// <list type="bullet">
+    /// <item>
+    /// <term>Actual name: </term>
+    /// <description>Saved as <see cref="XmlAttribute"/> with tag name <c>ActualName</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Formal name: </term>
+    /// <description>Saves as <see cref="XmlAttribute"/> with tag name <c>FormalName</c>.</description>
+    /// </item> 
+    /// <item>
+    /// <term>Description: </term>
+    /// <description>Saved as <see cref="XmlAttribute"/> with tag name <c>Description</c>.</description>
+    /// </item>
+    /// <item><term>Data type: </term>
+    /// <description>Saved as <see cref="XmlAttribute"/> with tag name <c>DataType</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Kind: </term>
+    /// <description>Saved as <see cref="XmlAttribute"/> with tag name <c>Kind</c>.</description>
+    /// </item>
+    /// <item>
+    /// <term>Local: </term>
+    /// <description>Saved as <see cref="XmlAttribute"/> with tag name <c>Local</c>.</description>
+    /// </item>
+    /// </list></remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute actualNameAttribute = document.CreateAttribute("ActualName");
+      actualNameAttribute.Value = ActualName;
+      node.Attributes.Append(actualNameAttribute);
+
+      XmlAttribute formalNameAttribute = document.CreateAttribute("FormalName");
+      formalNameAttribute.Value = FormalName;
+      node.Attributes.Append(formalNameAttribute);
+
+      XmlAttribute descriptionAttribute = document.CreateAttribute("Description");
+      descriptionAttribute.Value = Description;
+      node.Attributes.Append(descriptionAttribute);
+
+      XmlAttribute dataTypeAttribute = document.CreateAttribute("DataType");
+      dataTypeAttribute.Value = PersistenceManager.BuildTypeString(DataType);
+      node.Attributes.Append(dataTypeAttribute);
+
+      XmlAttribute kindAttribute = document.CreateAttribute("Kind");
+      kindAttribute.Value = Kind.ToString();
+      node.Attributes.Append(kindAttribute);
+
+      XmlAttribute localAttribute = document.CreateAttribute("Local");
+      localAttribute.Value = Local.ToString();
+      node.Attributes.Append(localAttribute);
+
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted variable info from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>See <see cref="GetXmlNode"/> for further information on how the variable info must be 
+    /// saved. <br/>
+    /// Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the variable info is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myActualName = node.Attributes["ActualName"].Value;
+      myFormalName = node.Attributes["FormalName"].Value;
+      myDescription = node.Attributes["Description"].Value;
+      myDataType = Type.GetType(node.Attributes["DataType"].Value, true);
+      myKind = (VariableKind)Enum.Parse(typeof(VariableKind), node.Attributes["Kind"].Value);
+      myLocal = bool.Parse(node.Attributes["Local"].Value);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoEventArgs.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Event arguments to be able to specify the affected variable info.
+  /// </summary>
+  public class VariableInfoEventArgs : ItemEventArgs {
+    /// <summary>
+    /// Gets the affected variable info.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ItemEventArgs.Item"/> of base class <see cref="ItemEventArgs"/>.
+    /// No own data storage present.</remarks>
+    public IVariableInfo VariableInfo {
+      get { return (IVariableInfo)Item; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInfoEventArgs"/> with the specified 
+    /// <paramref name="variableInfo"/>.
+    /// </summary>
+    /// <remarks>Calls constructor of base class <see cref="ItemEventArgs"/>.</remarks>
+    /// <param name="variableInfo">The affected variable info.</param>
+    public VariableInfoEventArgs(IVariableInfo variableInfo)
+      : base(variableInfo) {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.Designer.cs	(revision 1270)
@@ -0,0 +1,217 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class VariableInfoView {
+    /// <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.actualNameLabel = new System.Windows.Forms.Label();
+      this.actualNameTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.kindLabel = new System.Windows.Forms.Label();
+      this.kindTextBox = new System.Windows.Forms.TextBox();
+      this.formalNameTextBox = new System.Windows.Forms.TextBox();
+      this.formalNameLabel = new System.Windows.Forms.Label();
+      this.localLabel = new System.Windows.Forms.Label();
+      this.localCheckBox = new System.Windows.Forms.CheckBox();
+      this.SuspendLayout();
+      // 
+      // actualNameLabel
+      // 
+      this.actualNameLabel.AutoSize = true;
+      this.actualNameLabel.Location = new System.Drawing.Point(3, 3);
+      this.actualNameLabel.Name = "actualNameLabel";
+      this.actualNameLabel.Size = new System.Drawing.Size(71, 13);
+      this.actualNameLabel.TabIndex = 0;
+      this.actualNameLabel.Text = "&Actual Name:";
+      // 
+      // actualNameTextBox
+      // 
+      this.actualNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.actualNameTextBox.Location = new System.Drawing.Point(81, 0);
+      this.actualNameTextBox.Name = "actualNameTextBox";
+      this.actualNameTextBox.Size = new System.Drawing.Size(188, 20);
+      this.actualNameTextBox.TabIndex = 1;
+      this.actualNameTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(3, 55);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(34, 13);
+      this.dataTypeLabel.TabIndex = 4;
+      this.dataTypeLabel.Text = "&Type:";
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Location = new System.Drawing.Point(81, 52);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(188, 20);
+      this.dataTypeTextBox.TabIndex = 5;
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(3, 127);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 10;
+      this.descriptionLabel.Text = "&Description:";
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.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.descriptionTextBox.Location = new System.Drawing.Point(81, 124);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ReadOnly = true;
+      this.descriptionTextBox.Size = new System.Drawing.Size(188, 85);
+      this.descriptionTextBox.TabIndex = 11;
+      this.descriptionTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // kindLabel
+      // 
+      this.kindLabel.AutoSize = true;
+      this.kindLabel.Location = new System.Drawing.Point(3, 81);
+      this.kindLabel.Name = "kindLabel";
+      this.kindLabel.Size = new System.Drawing.Size(31, 13);
+      this.kindLabel.TabIndex = 6;
+      this.kindLabel.Text = "&Kind:";
+      // 
+      // kindTextBox
+      // 
+      this.kindTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.kindTextBox.Location = new System.Drawing.Point(81, 78);
+      this.kindTextBox.Name = "kindTextBox";
+      this.kindTextBox.ReadOnly = true;
+      this.kindTextBox.Size = new System.Drawing.Size(188, 20);
+      this.kindTextBox.TabIndex = 7;
+      this.kindTextBox.Validated += new System.EventHandler(this.actualNameTextBox_Validated);
+      // 
+      // formalNameTextBox
+      // 
+      this.formalNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.formalNameTextBox.Location = new System.Drawing.Point(81, 26);
+      this.formalNameTextBox.Name = "formalNameTextBox";
+      this.formalNameTextBox.ReadOnly = true;
+      this.formalNameTextBox.Size = new System.Drawing.Size(188, 20);
+      this.formalNameTextBox.TabIndex = 3;
+      // 
+      // formalNameLabel
+      // 
+      this.formalNameLabel.AutoSize = true;
+      this.formalNameLabel.Location = new System.Drawing.Point(3, 29);
+      this.formalNameLabel.Name = "formalNameLabel";
+      this.formalNameLabel.Size = new System.Drawing.Size(72, 13);
+      this.formalNameLabel.TabIndex = 2;
+      this.formalNameLabel.Text = "&Formal Name:";
+      // 
+      // localLabel
+      // 
+      this.localLabel.AutoSize = true;
+      this.localLabel.Location = new System.Drawing.Point(3, 104);
+      this.localLabel.Name = "localLabel";
+      this.localLabel.Size = new System.Drawing.Size(36, 13);
+      this.localLabel.TabIndex = 8;
+      this.localLabel.Text = "&Local:";
+      // 
+      // localCheckBox
+      // 
+      this.localCheckBox.AutoSize = true;
+      this.localCheckBox.Location = new System.Drawing.Point(81, 104);
+      this.localCheckBox.Name = "localCheckBox";
+      this.localCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.localCheckBox.TabIndex = 9;
+      this.localCheckBox.UseVisualStyleBackColor = true;
+      this.localCheckBox.CheckedChanged += new System.EventHandler(this.localCheckBox_CheckedChanged);
+      // 
+      // VariableInfoEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.localCheckBox);
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.kindTextBox);
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.formalNameTextBox);
+      this.Controls.Add(this.actualNameTextBox);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.kindLabel);
+      this.Controls.Add(this.formalNameLabel);
+      this.Controls.Add(this.localLabel);
+      this.Controls.Add(this.descriptionLabel);
+      this.Controls.Add(this.actualNameLabel);
+      this.Name = "VariableInfoEditor";
+      this.Size = new System.Drawing.Size(269, 209);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label actualNameLabel;
+    private System.Windows.Forms.TextBox actualNameTextBox;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.TextBox dataTypeTextBox;
+    private System.Windows.Forms.Label descriptionLabel;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private System.Windows.Forms.Label kindLabel;
+    private System.Windows.Forms.TextBox kindTextBox;
+    private System.Windows.Forms.TextBox formalNameTextBox;
+    private System.Windows.Forms.Label formalNameLabel;
+    private System.Windows.Forms.Label localLabel;
+    private System.Windows.Forms.CheckBox localCheckBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.cs	(revision 1270)
@@ -0,0 +1,127 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of <see cref="IVariableInfo"/>.
+  /// </summary>
+  public partial class VariableInfoView : ViewBase {
+    /// <summary>
+    /// Gets or sets the variable information to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IVariableInfo VariableInfo {
+      get { return (IVariableInfo)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInfoView"/> with caption "Variable Info".
+    /// </summary>
+    public VariableInfoView() {
+      InitializeComponent();
+      Caption = "Variable Info";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInfoView"/> 
+    /// with the given <paramref name="variableInfo"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableInfoView()"/>.</remarks>
+    /// <param name="variableInfo">The variable info to represent visually.</param>
+    public VariableInfoView(IVariableInfo variableInfo)
+      : this() {
+      VariableInfo = variableInfo;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariableInfo"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class 
+    /// <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      VariableInfo.ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
+      VariableInfo.LocalChanged -= new EventHandler(VariableInfo_LocalChanged);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariableInfo"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      VariableInfo.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
+      VariableInfo.LocalChanged += new EventHandler(VariableInfo_LocalChanged);
+    }
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      Caption = "Variable Info";
+      if (VariableInfo == null) {
+        actualNameTextBox.Enabled = false;
+        formalNameTextBox.Enabled = false;
+        dataTypeTextBox.Enabled = false;
+        kindTextBox.Enabled = false;
+        localCheckBox.Enabled = false;
+        descriptionTextBox.Enabled = false;
+      } else {
+        Caption = VariableInfo.ActualName + " (" + VariableInfo.GetType().Name + ")";
+        actualNameTextBox.Text = VariableInfo.ActualName;
+        actualNameTextBox.Enabled = true;
+        formalNameTextBox.Text = VariableInfo.FormalName;
+        formalNameTextBox.Enabled = true;
+        dataTypeTextBox.Text = VariableInfo.DataType.FullName;
+        dataTypeTextBox.Enabled = true;
+        kindTextBox.Text = VariableInfo.Kind.ToString();
+        kindTextBox.Enabled = true;
+        localCheckBox.Checked = VariableInfo.Local;
+        localCheckBox.Enabled = true;
+        descriptionTextBox.Text = VariableInfo.Description;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+
+    private void VariableInfo_ActualNameChanged(object sender, EventArgs e) {
+      actualNameTextBox.Text = VariableInfo.ActualName;
+    }
+    private void VariableInfo_LocalChanged(object sender, EventArgs e) {
+      localCheckBox.Checked = VariableInfo.Local;
+    }
+
+    private void actualNameTextBox_Validated(object sender, EventArgs e) {
+      VariableInfo.ActualName = actualNameTextBox.Text;
+    }
+    private void localCheckBox_CheckedChanged(object sender, EventArgs e) {
+      VariableInfo.Local = localCheckBox.Checked;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableInfoView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableKind.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableKind.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableKind.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Represents the type of a variable (input, output,...).
+  /// </summary>
+  [FlagsAttribute]
+  public enum VariableKind {
+    /// <summary>
+    /// Flag for doing nothing with the variable.
+    /// </summary>
+    None = 0,
+    /// <summary>
+    /// Flag for creating a new variable.
+    /// </summary>
+    New = 1,
+    /// <summary>
+    /// Flag for changing value of a variable.
+    /// </summary>
+    Out = 2,
+    /// <summary>
+    /// Flag for reading value of a variable.
+    /// </summary>
+    In = 4,
+    /// <summary>
+    /// Flag for deleting a variable.
+    /// </summary>
+    Deleted = 8
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.Designer.cs	(revision 1270)
@@ -0,0 +1,143 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Core {
+  partial class VariableView {
+    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
+      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.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      this.valueLabel = new System.Windows.Forms.Label();
+      this.valueTextBox = new System.Windows.Forms.TextBox();
+      this.editorGroupBox = new System.Windows.Forms.GroupBox();
+      this.setVariableValueButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 3);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(38, 13);
+      this.nameLabel.TabIndex = 0;
+      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(50, 0);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.Size = new System.Drawing.Size(153, 20);
+      this.nameTextBox.TabIndex = 1;
+      this.nameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.nameTextBox_Validating);
+      // 
+      // valueLabel
+      // 
+      this.valueLabel.AutoSize = true;
+      this.valueLabel.Location = new System.Drawing.Point(3, 29);
+      this.valueLabel.Name = "valueLabel";
+      this.valueLabel.Size = new System.Drawing.Size(37, 13);
+      this.valueLabel.TabIndex = 2;
+      this.valueLabel.Text = "&Value:";
+      // 
+      // valueTextBox
+      // 
+      this.valueTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTextBox.Location = new System.Drawing.Point(50, 26);
+      this.valueTextBox.Name = "valueTextBox";
+      this.valueTextBox.ReadOnly = true;
+      this.valueTextBox.Size = new System.Drawing.Size(99, 20);
+      this.valueTextBox.TabIndex = 3;
+      // 
+      // editorGroupBox
+      // 
+      this.editorGroupBox.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.editorGroupBox.Location = new System.Drawing.Point(0, 52);
+      this.editorGroupBox.Name = "editorGroupBox";
+      this.editorGroupBox.Size = new System.Drawing.Size(203, 102);
+      this.editorGroupBox.TabIndex = 5;
+      this.editorGroupBox.TabStop = false;
+      this.editorGroupBox.Text = "&Editor:";
+      // 
+      // setVariableValueButton
+      // 
+      this.setVariableValueButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.setVariableValueButton.Location = new System.Drawing.Point(155, 26);
+      this.setVariableValueButton.Name = "setVariableValueButton";
+      this.setVariableValueButton.Size = new System.Drawing.Size(45, 20);
+      this.setVariableValueButton.TabIndex = 4;
+      this.setVariableValueButton.Text = "Set...";
+      this.setVariableValueButton.UseVisualStyleBackColor = true;
+      this.setVariableValueButton.Click += new System.EventHandler(this.setVariableValueButton_Click);
+      // 
+      // VariableView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.setVariableValueButton);
+      this.Controls.Add(this.editorGroupBox);
+      this.Controls.Add(this.valueTextBox);
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.valueLabel);
+      this.Controls.Add(this.nameLabel);
+      this.Name = "VariableView";
+      this.Size = new System.Drawing.Size(203, 154);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.Label valueLabel;
+    private System.Windows.Forms.TextBox valueTextBox;
+    private System.Windows.Forms.GroupBox editorGroupBox;
+    private System.Windows.Forms.Button setVariableValueButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.cs	(revision 1270)
@@ -0,0 +1,142 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of an <see cref="IVariable"/>.
+  /// </summary>
+  public partial class VariableView : ViewBase {
+    private ChooseItemDialog chooseItemDialog;
+
+    /// <summary>
+    /// Gets or sets the variable to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IVariable Variable {
+      get { return (IVariable)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with caption "Variable".
+    /// </summary>
+    public VariableView() {
+      InitializeComponent();
+      Caption = "Variable";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableView"/> with the given <paramref name="variable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariableView()"/>.</remarks>
+    /// <param name="variable">The variable to represent visually.</param>
+    public VariableView(IVariable variable)
+      : this() {
+      Variable = variable;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      Variable.NameChanged -= new EventHandler(Variable_NameChanged);
+      Variable.ValueChanged -= new EventHandler(Variable_ValueChanged);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IVariable"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Variable.NameChanged += new EventHandler(Variable_NameChanged);
+      Variable.ValueChanged += new EventHandler(Variable_ValueChanged);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      valueTextBox.Text = "-";
+      valueTextBox.Enabled = false;
+      editorGroupBox.Controls.Clear();
+      editorGroupBox.Enabled = false;
+      if (Variable == null) {
+        Caption = "Variable";
+        nameTextBox.Enabled = false;
+      } else {
+        Caption = Variable.Name + " (" + Variable.GetType().Name + ")";
+        nameTextBox.Text = Variable.Name;
+        nameTextBox.Enabled = true;
+        if (Variable.Value != null) {
+          valueTextBox.Text = Variable.Value.GetType().FullName;
+          valueTextBox.Enabled = true;
+          Control editor = (Control)Variable.Value.CreateView();
+          if (editor != null) {
+            editorGroupBox.Controls.Add(editor);
+            editor.Dock = DockStyle.Fill;
+            editorGroupBox.Enabled = true;
+          }
+        }
+      }
+    }
+
+    private void Variable_NameChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else
+        nameTextBox.Text = Variable.Name;
+    }
+    private void Variable_ValueChanged(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void nameTextBox_Validating(object sender, CancelEventArgs e) {
+      Variable.Name = nameTextBox.Text;
+
+      // check if variable name was set successfully
+      e.Cancel = Variable.Name != nameTextBox.Text;
+    }
+
+    private void setVariableValueButton_Click(object sender, EventArgs e) {
+      if (chooseItemDialog == null) {
+        chooseItemDialog = new ChooseItemDialog();
+        chooseItemDialog.Caption = "Set Value";
+      }
+      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK)
+        Variable.Value = chooseItemDialog.Item;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariableView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.Designer.cs	(revision 1270)
@@ -0,0 +1,175 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  partial class VariablesScopeView {
+    /// <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 (chooseItemDialog != null) chooseItemDialog.Dispose();
+      foreach (ListViewItem item in variablesListView.Items) {
+        ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
+      }
+      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.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.variablesGroupBox = new System.Windows.Forms.GroupBox();
+      this.variablesListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.addButton = new System.Windows.Forms.Button();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.variablesGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.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.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.variablesGroupBox);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer1.Size = new System.Drawing.Size(276, 155);
+      this.splitContainer1.SplitterDistance = 135;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // variablesGroupBox
+      // 
+      this.variablesGroupBox.Controls.Add(this.variablesListView);
+      this.variablesGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.variablesGroupBox.Name = "variablesGroupBox";
+      this.variablesGroupBox.Size = new System.Drawing.Size(135, 155);
+      this.variablesGroupBox.TabIndex = 0;
+      this.variablesGroupBox.TabStop = false;
+      this.variablesGroupBox.Text = "&Variables";
+      // 
+      // variablesListView
+      // 
+      this.variablesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.variablesListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.variablesListView.HideSelection = false;
+      this.variablesListView.Location = new System.Drawing.Point(3, 16);
+      this.variablesListView.Name = "variablesListView";
+      this.variablesListView.Size = new System.Drawing.Size(129, 136);
+      this.variablesListView.Sorting = System.Windows.Forms.SortOrder.Ascending;
+      this.variablesListView.TabIndex = 0;
+      this.variablesListView.UseCompatibleStateImageBehavior = false;
+      this.variablesListView.View = System.Windows.Forms.View.Details;
+      this.variablesListView.SelectedIndexChanged += new System.EventHandler(this.variablesListView_SelectedIndexChanged);
+      this.variablesListView.SizeChanged += new System.EventHandler(this.variablesListView_SizeChanged);
+      this.variablesListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.variablesListView_KeyDown);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(137, 155);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "&Details";
+      // 
+      // addButton
+      // 
+      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addButton.Location = new System.Drawing.Point(0, 161);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(75, 23);
+      this.addButton.TabIndex = 1;
+      this.addButton.Text = "&Add...";
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // removeButton
+      // 
+      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeButton.Enabled = false;
+      this.removeButton.Location = new System.Drawing.Point(81, 161);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(75, 23);
+      this.removeButton.TabIndex = 2;
+      this.removeButton.Text = "&Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // VariablesScopeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.removeButton);
+      this.Controls.Add(this.addButton);
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "VariablesScopeView";
+      this.Size = new System.Drawing.Size(276, 184);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.variablesGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.GroupBox variablesGroupBox;
+    private System.Windows.Forms.ListView variablesListView;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.Button addButton;
+    private System.Windows.Forms.Button removeButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.cs	(revision 1270)
@@ -0,0 +1,226 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// The visual representation of all variables in a specified scope.
+  /// </summary>
+  public partial class VariablesScopeView : ViewBase {
+    private ChooseItemDialog chooseItemDialog;
+
+    /// <summary>
+    /// Gets or sets the scope whose variables to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No won data storage present.</remarks>
+    public IScope Scope {
+      get { return (IScope)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with caption "Variables Scope View".
+    /// </summary>
+    public VariablesScopeView() {
+      InitializeComponent();
+      Caption = "Variables Scope View";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariablesScopeView"/> with 
+    /// the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="VariablesScopeView()"/>.</remarks>
+    /// <param name="scope">The scope whose variables should be represented visually.</param>
+    public VariablesScopeView(IScope scope)
+      : this() {
+      Scope = scope;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IScope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      Scope.VariableAdded -= new EventHandler<VariableEventArgs>(Scope_VariableAdded);
+      Scope.VariableRemoved -= new EventHandler<VariableEventArgs>(Scope_VariableRemoved);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IScope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Scope.VariableAdded += new EventHandler<VariableEventArgs>(Scope_VariableAdded);
+      Scope.VariableRemoved += new EventHandler<VariableEventArgs>(Scope_VariableRemoved);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      removeButton.Enabled = false;
+      if (Scope == null) {
+        Caption = "Variables Scope View";
+        variablesListView.Enabled = false;
+      } else {
+        Caption = "Variables Scope View of " + Scope.Name + " (" + Scope.GetType().Name + ")";
+        variablesListView.Enabled = true;
+        foreach (ListViewItem item in variablesListView.Items) {
+          ((IVariable)item.Tag).NameChanged -= new EventHandler(Variable_NameChanged);
+        }
+        variablesListView.Items.Clear();
+        foreach (IVariable variable in Scope.Variables) {
+          ListViewItem item = new ListViewItem();
+          item.Text = variable.Name;
+          item.Tag = variable;
+          variablesListView.Items.Add(item);
+          variable.NameChanged += new EventHandler(Variable_NameChanged);
+        }
+      }
+    }
+
+    private void variablesListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if (detailsGroupBox.Controls.Count > 0)
+        detailsGroupBox.Controls[0].Dispose();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      removeButton.Enabled = false;
+      if (variablesListView.SelectedItems.Count > 0) {
+        removeButton.Enabled = true;
+      }
+      if (variablesListView.SelectedItems.Count == 1) {
+        IVariable variable = (IVariable)variablesListView.SelectedItems[0].Tag;
+        Control control = (Control)new VariableView(variable);
+        detailsGroupBox.Controls.Add(control);
+        control.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+
+    #region Size Changed Events
+    private void variablesListView_SizeChanged(object sender, EventArgs e) {
+      if (variablesListView.Columns.Count > 0)
+        variablesListView.Columns[0].Width = Math.Max(0, variablesListView.Width - 25);
+    }
+    #endregion
+
+    #region Key Events
+    private void variablesListView_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        if (variablesListView.SelectedItems.Count > 0) {
+          foreach (ListViewItem item in variablesListView.SelectedItems)
+            Scope.RemoveVariable(((IVariable)item.Tag).Name);
+        }
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      if (chooseItemDialog == null) {
+        chooseItemDialog = new ChooseItemDialog();
+        chooseItemDialog.Caption = "Add Variable";
+      }
+      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK) {
+        IVariable newVariable = new Variable(chooseItemDialog.Item.GetType().Name, chooseItemDialog.Item);
+        int index = 1;
+        bool valid = true;
+        string name = null;
+        do {
+          valid = true;
+          name = newVariable.Name + " (" + index.ToString() + ")";
+          foreach (IVariable existingVariable in Scope.Variables) {
+            if (existingVariable.Name == name) {
+              valid = false;
+              index++;
+            }
+          }
+        } while (!valid);
+        newVariable.Name = name;
+        Scope.AddVariable(newVariable);
+      }
+    }
+    private void removeButton_Click(object sender, EventArgs e) {
+      if (variablesListView.SelectedItems.Count > 0) {
+        foreach (ListViewItem item in variablesListView.SelectedItems)
+          Scope.RemoveVariable(((IVariable)item.Tag).Name);
+      }
+    }
+    #endregion
+
+    #region Scope Events
+    private delegate void OnVariableEventDelegate(object sender, VariableEventArgs e);
+    private void Scope_VariableAdded(object sender, VariableEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnVariableEventDelegate(Scope_VariableAdded), sender, e);
+      else {
+        ListViewItem item = new ListViewItem();
+        item.Text = e.Variable.Name;
+        item.Tag = e.Variable;
+        variablesListView.Items.Add(item);
+        e.Variable.NameChanged += new EventHandler(Variable_NameChanged);
+      }
+    }
+    private void Scope_VariableRemoved(object sender, VariableEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnVariableEventDelegate(Scope_VariableRemoved), sender, e);
+      else {
+        ListViewItem itemToDelete = null;
+        foreach (ListViewItem item in variablesListView.Items) {
+          if (item.Tag == e.Variable)
+            itemToDelete = item;
+        }
+        e.Variable.NameChanged -= new EventHandler(Variable_NameChanged);
+        variablesListView.Items.Remove(itemToDelete);
+      }
+    }
+    #endregion
+
+    #region Variable Events
+    private delegate void OnEventDelegate(object sender, EventArgs e);
+    private void Variable_NameChanged(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnEventDelegate(Variable_NameChanged), sender, e);
+      else {
+        IVariable variable = (IVariable)sender;
+        foreach (ListViewItem item in variablesListView.Items) {
+          if (item.Tag == variable)
+            item.Text = variable.Name;
+        }
+      }
+    }
+    #endregion
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/VariablesScopeView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ViewBase.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ViewBase.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ViewBase.Designer.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+
+namespace HeuristicLab.Core {
+  partial class ViewBase {
+    /// <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 (Item != null)
+        RemoveItemEvents();
+      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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ViewBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ViewBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Core/ViewBase.cs	(revision 1270)
@@ -0,0 +1,166 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Xml;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Core {
+  /// <summary>
+  /// Base class for all visual representations.
+  /// </summary>
+  public partial class ViewBase : UserControl, IView {
+    private IItem myItem;
+    /// <summary>
+    /// Gets or sets the item to represent visually.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemChanged"/>, <see cref="Refresh"/>, 
+    /// <see cref="RemoveItemEvents"/> (if the current item is not null) and 
+    /// <see cref="AddItemEvents"/> (if the new item is not null) in the setter.</remarks>
+    public IItem Item {
+      get { return myItem; }
+      protected set {
+        if (value != myItem) {
+          if (myItem != null)
+            RemoveItemEvents();
+          myItem = value;
+          if (myItem != null)
+            AddItemEvents();
+          OnItemChanged();
+          Refresh();
+        }
+      }
+    }
+    private string myCaption;
+    /// <summary>
+    /// Gets or sets the caption of the current instance.
+    /// </summary>
+    /// <remarks>Call <see cref="OnCaptionChanged"/> in the setter if a new item is set.</remarks>
+    public string Caption {
+      get { return myCaption; }
+      set {
+        if (value != myCaption) {
+          myCaption = value;
+          OnCaptionChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ViewBase"/> with the caption "View".
+    /// </summary>
+    public ViewBase() {
+      InitializeComponent();
+      Caption = "View";
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the current instance.
+    /// </summary>
+    protected virtual void RemoveItemEvents() { }
+    /// <summary>
+    /// Adds eventhandlers to the current instance.
+    /// </summary>
+    protected virtual void AddItemEvents() { }
+
+    /// <summary>
+    /// Refreshes the current view.
+    /// </summary>
+    /// <remarks>Creates a new <see cref="MethodInvoker"/> if an invoke is required 
+    /// (see <see cref="Control.InvokeRequired"/>.<br/>
+    /// Otherwise calls <see cref="UpdateControls"/> and <see cref="Control.Refresh"/> of base class 
+    /// <see cref="System.Windows.Forms.UserControl"/>.</remarks>
+    public override void Refresh() {
+      if (InvokeRequired) {
+        Invoke(new MethodInvoker(Refresh));
+      } else {
+        UpdateControls();
+        base.Refresh();
+      }
+    }
+    /// <summary>
+    /// Updates the controls with the latest values of the model.
+    /// </summary>
+    protected virtual void UpdateControls() {
+      if (Item == null)
+        Caption = "View";
+      else
+        Caption = "View (" + Item.GetType().Name + ")";
+      
+    }
+
+    /// <summary>
+    /// Occurs when the current item was changed.
+    /// </summary>
+    public event EventHandler ItemChanged;
+    /// <summary>
+    /// Fires a new <c>ItemChanged</c> event.
+    /// </summary>
+    protected virtual void OnItemChanged() {
+      if (ItemChanged != null)
+        ItemChanged(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the current caption was changed.
+    /// </summary>
+    public event EventHandler CaptionChanged;
+    /// <summary>
+    /// Fires a new <c>CaptionChanged</c> event.
+    /// </summary>
+    protected virtual void OnCaptionChanged() {
+      if (CaptionChanged != null)
+        CaptionChanged(this, new EventArgs());
+    }
+
+    /// <summary>
+    /// Asynchron call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    protected new void Invoke(Delegate method) {
+      // enforce context switch to improve GUI response time
+      System.Threading.Thread.Sleep(0);
+
+      // prevent blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method);
+      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
+      if (!IsDisposed) EndInvoke(result);
+    }
+    /// <summary>
+    /// Asynchron call of GUI updating.
+    /// </summary>
+    /// <param name="method">The delegate to invoke.</param>
+    /// <param name="args">The invoke arguments.</param>
+    protected new void Invoke(Delegate method, params object[] args) {
+      // enforce context switch to improve GUI response time
+      System.Threading.Thread.Sleep(0);
+
+      // prevent blocking of worker thread in Invoke, if the control is disposed
+      IAsyncResult result = BeginInvoke(method, args);
+      while ((!result.AsyncWaitHandle.WaitOne(100, false)) && (!IsDisposed)) { }
+      if (!IsDisposed) EndInvoke(result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBase.cs	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// An abstract base class for all kinds of arrays.
+  /// </summary>
+  public abstract class ArrayDataBase : ObjectData {
+    /// <summary>
+    /// Gets or sets the elements of the array.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/> of base class <see cref="ObjectData"/>. 
+    /// No own data storage present.</remarks>
+    public new virtual Array Data {
+      get { return (Array)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// The string representation of the array.
+    /// </summary>
+    /// <returns>The elements of the array as a string seperated by a semicolon.</returns>
+    public override string ToString() {
+      if (Data.Length <= 0) return "Empty Array";
+      StringBuilder builder = new StringBuilder();
+      for (int i = 0; i < Data.Length; i++) {
+        builder.Append(";");
+        builder.Append(Data.GetValue(i).ToString());
+      }
+      if (builder.Length > 0) builder.Remove(0, 1);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.Designer.cs	(revision 1270)
@@ -0,0 +1,109 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+namespace HeuristicLab.Data {
+  partial class ArrayDataBaseView {
+    /// <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.sizeLabel = new System.Windows.Forms.Label();
+      this.lengthTextBox = new System.Windows.Forms.TextBox();
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // sizeLabel
+      // 
+      this.sizeLabel.AutoSize = true;
+      this.sizeLabel.Location = new System.Drawing.Point(3, 4);
+      this.sizeLabel.Name = "sizeLabel";
+      this.sizeLabel.Size = new System.Drawing.Size(30, 13);
+      this.sizeLabel.TabIndex = 0;
+      this.sizeLabel.Text = "Size:";
+      // 
+      // lengthTextBox
+      // 
+      this.lengthTextBox.AcceptsReturn = true;
+      this.lengthTextBox.Location = new System.Drawing.Point(39, 1);
+      this.lengthTextBox.Name = "lengthTextBox";
+      this.lengthTextBox.Size = new System.Drawing.Size(110, 20);
+      this.lengthTextBox.TabIndex = 1;
+      this.lengthTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.lengthTextBox_Validating);
+      this.lengthTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lengthTextBox_KeyDown);
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = 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.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.ColumnHeadersVisible = false;
+      this.dataGridView.Location = new System.Drawing.Point(3, 30);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.Size = new System.Drawing.Size(155, 226);
+      this.dataGridView.TabIndex = 2;
+      this.dataGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView_CellValidating);
+      // 
+      // ArrayDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataGridView);
+      this.Controls.Add(this.lengthTextBox);
+      this.Controls.Add(this.sizeLabel);
+      this.Name = "ArrayDataView";
+      this.Size = new System.Drawing.Size(163, 259);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label sizeLabel;
+    private System.Windows.Forms.TextBox lengthTextBox;
+    protected System.Windows.Forms.DataGridView dataGridView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.cs	(revision 1270)
@@ -0,0 +1,166 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="ArrayDataBase"/>.
+  /// </summary>
+  public partial class ArrayDataBaseView : ViewBase {
+    /// <summary>
+    /// Gets or sets the instance of the array to represent.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public ArrayDataBase ArrayDataBase {
+      get { return (ArrayDataBase)Item; }
+      protected set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ArrayDataBaseView"/>.
+    /// </summary>
+    public ArrayDataBaseView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="ArrayDataBase"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ArrayDataBase.Changed -= new EventHandler(ArrayDataBase_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="ArrayDataBase"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ArrayDataBase.Changed += new EventHandler(ArrayDataBase_Changed);
+    }
+
+    /// <summary>
+    /// Validates the given data.
+    /// <note type="caution"> Needs to be overridden in each inherited class!</note>
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when method is not 
+    /// overridden in inherited class.</exception>
+    /// <param name="element">The data to validate.</param>
+    /// <returns><c>true</c> if the data is valid, <c>false</c> otherwise.</returns>
+    protected virtual bool ValidateData(string element) {
+      throw new InvalidOperationException("ValidateData has to be overridden in each inherited class");
+    }
+    /// <summary>
+    /// Replaces an element at the given <paramref name="index"/> 
+    /// with the given <paramref name="element"/>.
+    /// <note type="caution"> Needs to be overridden in each inherited class!</note>
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when method is not 
+    /// overridden in inherited class.</exception>
+    /// <param name="index">The position where to substitute the element.</param>
+    /// <param name="element">The element to insert.</param>
+    protected virtual void SetArrayElement(int index, string element) {
+      throw new InvalidOperationException("SetArrayElement has to be overridden in each inherited class");
+    }
+
+    /// <summary>
+    /// Updates all controls and the elements of the table with the latest values.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ArrayDataBase != null) {
+        int length = ArrayDataBase.Data.Length;
+        lengthTextBox.Text = length + "";
+        dataGridView.ColumnCount = 1;
+        dataGridView.RowCount = length;
+        for (int i = 0; i < length; i++) {
+          dataGridView.Rows[i].Cells[0].Value = ArrayDataBase.Data.GetValue(i);
+        }
+      } else {
+        lengthTextBox.Text = "0";
+        dataGridView.ColumnCount = 1;
+        dataGridView.RowCount = 0;
+      }
+    }
+
+    private void lengthTextBox_Validating(object sender, CancelEventArgs e) {
+      int newLength;
+      if (int.TryParse(lengthTextBox.Text, out newLength)) {
+        if (newLength > 0) {
+          e.Cancel = false;
+          if (newLength != ArrayDataBase.Data.Length) {
+            CreateAndCopyArray(newLength);
+          }
+        } else {
+          // only allow values greater than 0
+          e.Cancel = true;
+        }
+      } else {
+        e.Cancel = true;
+      }
+    }
+
+    /// <summary>
+    /// Creates a new array having the specified number (<paramref name="newLength"/>) of elements of the 
+    /// current instance (starting from the beginning).
+    /// </summary>
+    /// <param name="newLength">The size/number of elements of the new array.</param>
+    private void CreateAndCopyArray(int newLength) {
+      Array newArray = Array.CreateInstance(ArrayDataBase.Data.GetType().GetElementType(), newLength);
+      Array.Copy(ArrayDataBase.Data, newArray, Math.Min(newLength, ArrayDataBase.Data.Length));
+      ArrayDataBase.Data = newArray;
+    }
+
+    private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
+      if (ValidateData((string)e.FormattedValue)) {
+        SetArrayElement(e.RowIndex, (string)e.FormattedValue);
+        e.Cancel = false;
+      } else {
+        e.Cancel = true;
+      }
+    }
+
+    private void lengthTextBox_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) {
+        e.SuppressKeyPress = true;
+        dataGridView.Focus();
+      }
+    }
+
+    #region ArrayDataBase Events
+    private void ArrayDataBase_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ArrayDataBaseView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayData.cs	(revision 1270)
@@ -0,0 +1,98 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// An array consisting of boolean values.
+  /// </summary>
+  public class BoolArrayData : ArrayDataBase {
+    /// <summary>
+    /// Gets or sets the boolean elements of the array.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase.Data"/> of base class <see cref="ArrayDataBase"/>. 
+    /// No own data storage present.</remarks>
+    public new bool[] Data {
+      get { return (bool[])base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="BoolArrayData"/> class.
+    /// </summary>
+    public BoolArrayData() {
+      Data = new bool[0];
+    }
+    /// <summary>
+    /// Initializes a new instance of the <see cref="BoolArrayData"/> class. 
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The boolean array the instance should represent.</param>
+    public BoolArrayData(bool[] data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of the <see cref="BoolArrayDataView"/> class.
+    /// </summary>
+    /// <returns>The created instance of the <see cref="BoolArrayDataView"/>.</returns>
+    public override IView CreateView() {
+      return new BoolArrayDataView(this);
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The boolean elements of the array are saved as string in the node's inner text, each element separated by a semicolon.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = ToString();
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted boolean array from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks> The elements of the boolean array must be saved in the node's inner 
+    /// text as a string, each element separated by a semicolon 
+    /// (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">A Dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      string[] tokens = node.InnerText.Split(';');
+      bool[] data = new bool[tokens.Length];
+      for (int i = 0; i < data.Length; i++)
+        data[i] = bool.Parse(tokens[i]);
+      Data = data;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class BoolArrayDataView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolArrayDataView.cs	(revision 1270)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="BoolArrayData"/>, 
+  /// symbolizing an array of boolean values.
+  /// </summary>
+  public partial class BoolArrayDataView : ArrayDataBaseView {
+    /// <summary>
+    /// Gets or sets the instance of the boolean array to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase"/> of 
+    /// base class <see cref="ArrayDataBaseView"/>. No own data storage present.</remarks>
+    public BoolArrayData BoolArrayData {
+      get { return (BoolArrayData)base.ArrayDataBase; }
+      set { base.ArrayDataBase = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="BoolArrayDataView"/>.
+    /// </summary>
+    public BoolArrayDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="BoolArrayDataView"/> 
+    /// with the given <paramref name="boolArrayData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="boolArrayData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="boolArrayData">The boolean array to represent visually.</param>
+    public BoolArrayDataView(BoolArrayData boolArrayData)
+      : this() {
+      BoolArrayData = boolArrayData;
+    }
+
+    /// <summary>
+    /// Sets the element on position <paramref name="index"/> to the
+    /// given <paramref name="element"/> as boolean value.
+    /// </summary>
+    /// <param name="index">The position where to substitute the element.</param>
+    /// <param name="element">The element to insert.</param>
+    protected override void SetArrayElement(int index, string element) {
+      bool result;
+      bool.TryParse(element, out result);
+
+      BoolArrayData.Data[index] = result;
+    }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="element"/> can be converted to a boolean value.
+    /// </summary>
+    /// <param name="element">The data to validate.</param>
+    /// <returns><c>true</c> if the <paramref name="element"/> could be converted,
+    /// <c>false</c> otherwise.</returns>
+    protected override bool ValidateData(string element) {
+      bool result;
+      return element != null && bool.TryParse(element, out result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolData.cs	(revision 1270)
@@ -0,0 +1,102 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Class to represent boolean values.
+  /// </summary>
+  public class BoolData : ObjectData {
+    /// <summary>
+    /// Gets or sets the boolean value.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/>
+    /// of base class <see cref="ObjectData"/>. No own data storage present.</remarks>
+    public new bool Data {
+      get { return (bool)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BoolData"/> with default value <c>false</c>.
+    /// </summary>
+    public BoolData() {
+      Data = false;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="BoolData"/> with the boolean value <paramref name="data"/>.
+    /// </summary>
+    /// <param name="data">The boolean value to assign.</param>
+    public BoolData(bool data) {
+      Data = data;
+    }
+    /// <summary>
+    /// Creates a new instance of the <see cref="BoolDataView"/> class.
+    /// </summary>
+    /// <returns>The created instance of the <see cref="BoolDataView"/>.</returns>
+    public override IView CreateView() {
+      return new BoolDataView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>The cloned instance is added to the <paramref name="dictionary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="BoolData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      BoolData clone = new BoolData();
+      clonedObjects.Add(Guid, clone);
+      clone.Data = Data;
+      return clone;
+    }
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The boolean value is saved as string in the inner text of the node.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = ToString();
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted boolean value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks> The boolean value must be saved as string in the node's inner text 
+    /// (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the boolean value is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Data = bool.Parse(node.InnerText);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class BoolDataView {
+    /// <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.dataCheckBox = new System.Windows.Forms.CheckBox();
+      this.SuspendLayout();
+      // 
+      // dataCheckBox
+      // 
+      this.dataCheckBox.AutoSize = true;
+      this.dataCheckBox.Location = new System.Drawing.Point(0, 0);
+      this.dataCheckBox.Name = "dataCheckBox";
+      this.dataCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.dataCheckBox.TabIndex = 1;
+      this.dataCheckBox.UseVisualStyleBackColor = true;
+      this.dataCheckBox.CheckedChanged += new System.EventHandler(this.dataCheckBox_CheckedChanged);
+      // 
+      // BoolDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataCheckBox);
+      this.Name = "BoolDataView";
+      this.Size = new System.Drawing.Size(19, 18);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.CheckBox dataCheckBox;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.cs	(revision 1270)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="BoolData"/>, symbolizing a boolean value. 
+  /// </summary>
+  public partial class BoolDataView : ViewBase {
+    /// <summary>
+    /// Gets or sets the boolean value to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public BoolData BoolData {
+      get { return (BoolData)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="BoolDataView"/>.
+    /// </summary>
+    public BoolDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="BoolDataView"/> with the given 
+    /// <paramref name="boolData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="boolData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="boolData">The boolean value to represent visually.</param>
+    public BoolDataView(BoolData boolData)
+      : this() {
+      BoolData = boolData;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="BoolData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      BoolData.Changed -= new EventHandler(BoolData_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="BoolData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      BoolData.Changed += new EventHandler(BoolData_Changed);
+    }
+
+    /// <summary>
+    /// Sets the <c>dataCheckBox</c> checked or unchecked according to the latest value.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (BoolData == null) {
+        dataCheckBox.Enabled = false;
+      } else {
+        dataCheckBox.Enabled = true;
+        dataCheckBox.Checked = BoolData.Data;
+      }
+    }
+
+    private void dataCheckBox_CheckedChanged(object sender, EventArgs e) {
+      BoolData.Data = dataCheckBox.Checked;
+    }
+
+    private void BoolData_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolDataView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixData.cs	(revision 1270)
@@ -0,0 +1,125 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A two-dimensional matrix consisting of boolean values.
+  /// </summary>
+  public class BoolMatrixData : ArrayDataBase {
+    /// <summary>
+    /// Gets or sets the boolean elements of the matrix.
+    /// </summary>
+    /// <remarks>Uses the property <see cref="ArrayDataBase.Data"/> of base 
+    /// class <see cref="ArrayDataBase"/>. No own data storage present.</remarks>
+    public new bool[,] Data {
+      get { return (bool[,])base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="BoolMatrixData"/> class.
+    /// </summary>
+    public BoolMatrixData() {
+      Data = new bool[1, 1];
+    }
+    /// <summary>
+    /// Initializes a new instance of the <see cref="BoolMatrixData"/> class.
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The boolean matrix the instance should represent.</param>
+    public BoolMatrixData(bool[,] data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of the <see cref="BoolMatrixDataView"/> class.
+    /// </summary>
+    /// <returns>The created instance of the <see cref="BoolMatrixDataView"/>.</returns>
+    public override IView CreateView() {
+      return new BoolMatrixDataView(this);
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The dimensions of the matrix are saved as attributes (<c>Dimension1</c>,<c>Dimension2</c>).<br/>
+    /// The elements of the matrix are saved as string in the node's inner text, 
+    /// each element separated by a semicolon, all line by line.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute dim1 = document.CreateAttribute("Dimension1");
+      dim1.Value = Data.GetLength(0).ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim1);
+      XmlAttribute dim2 = document.CreateAttribute("Dimension2");
+      dim2.Value = Data.GetLength(1).ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim2);
+      node.InnerText = ToString();
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted boolean matrix from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The dimensions of the matrix must be saved as Attributes (<c>Dimension1</c>, <c>Dimension2</c>). <br/>
+    /// The elements of the matrix must be saved in the node's inner text as string, 
+    /// each element separated by a semicolon, line by line (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      int dim1 = int.Parse(node.Attributes["Dimension1"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      int dim2 = int.Parse(node.Attributes["Dimension2"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      string[] tokens = node.InnerText.Split(';');
+      bool[,] data = new bool[dim1, dim2];
+      for (int i = 0; i < dim1; i++) {
+        for (int j = 0; j < dim2; j++) {
+          data[i, j] = bool.Parse(tokens[i * dim2 + j]);
+        }
+      }
+      Data = data;
+    }
+    /// <summary>
+    /// The string representation of the matrix.
+    /// </summary>
+    /// <returns>The elements of the matrix as a string seperated by semicolons, line by line.</returns>
+    public override string ToString() {
+      StringBuilder builder = new StringBuilder();
+      for (int i = 0; i < Data.GetLength(0); i++) {
+        for (int j = 0; j < Data.GetLength(1); j++) {
+          builder.Append(";");
+          builder.Append(Data[i, j].ToString());
+        }
+      }
+      if (builder.Length > 0) builder.Remove(0, 1);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class BoolMatrixDataView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/BoolMatrixDataView.cs	(revision 1270)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="BoolMatrixData"/>, symbolizing a two-dimensional
+  /// matrix of boolean values.
+  /// </summary>
+  public partial class BoolMatrixDataView : MatrixDataBaseView {
+    /// <summary>
+    /// Gets or sets the instance of the boolean matrix to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase"/> of 
+    /// base class <see cref="ArrayDataBaseView"/>. No own data storage present.</remarks>
+    public BoolMatrixData BoolMatrixData {
+      get { return (BoolMatrixData)base.ArrayDataBase; }
+      set { base.ArrayDataBase = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="BoolMatrixDataView"/>.
+    /// </summary>
+    public BoolMatrixDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="BoolMatrixDataView"/> with the given
+    /// <paramref name="boolMatrixData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="boolMatrixData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="boolMatrixData">The boolean matrix to represent visually.</param>
+    public BoolMatrixDataView(BoolMatrixData boolMatrixData)
+      : this() {
+      BoolMatrixData = boolMatrixData;
+    }
+
+    /// <summary>
+    /// Subsitutes an element in the given <paramref name="row"/> and the given 
+    /// <paramref name="column"/> with the given <paramref name="element"/>.
+    /// </summary>
+    /// <param name="row">The row of the element to substitute.</param>
+    /// <param name="column">The column of the element to substitute.</param>
+    /// <param name="element">The element to insert.</param>
+    protected override void SetArrayElement(int row, int column, string element) {
+      bool result;
+      bool.TryParse(element, out result);
+
+      BoolMatrixData.Data[row, column] = result;
+    }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="element"/> can be converted to a boolean value.
+    /// </summary>
+    /// <param name="element">The element to check.</param>
+    /// <returns><c>true</c> if the <paramref name="element"/> could be converted,
+    /// <c>false</c> otherwise.</returns>
+    protected override bool ValidateData(string element) {
+      bool result;
+      return element != null && bool.TryParse(element, out result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleData.cs	(revision 1270)
@@ -0,0 +1,113 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Represents a double value having some constraints (e.g. smaller than 5.3).
+  /// </summary>
+  public class ConstrainedDoubleData : ConstrainedObjectData {
+    /// <summary>
+    /// Gets or sets the double value of the current instance as <see cref="DoubleData"/>.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ConstrainedObjectData.Data"/> of base 
+    /// class <see cref="ConstrainedObjectData"/>. No own data storage present.</remarks>
+    public new double Data {
+      get { return ((DoubleData)base.Data).Data; }
+      set { ((DoubleData)base.Data).Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedDoubleData"/> with default value <c>0.0</c>.
+    /// </summary>
+    public ConstrainedDoubleData() : this (0.0) {
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedDoubleData"/> with the specified 
+    /// double value <paramref name="data"/> as <see cref="DoubleData"/>.
+    /// </summary>
+    /// <param name="data">The double value to represent.</param>
+    public ConstrainedDoubleData(double data) : base() {
+      base.Data = new DoubleData(data);
+    }
+
+    /// <inheritdoc cref="ConstrainedObjectData.TrySetData(object)"/>
+    public virtual bool TrySetData(double data) {
+      return base.TrySetData(new DoubleData(data));
+    }
+    /// <inheritdoc cref="ConstrainedObjectData.TrySetData(object, out System.Collections.Generic.ICollection&lt;HeuristicLab.Core.IConstraint&gt;)"/>
+    public virtual bool TrySetData(double data, out ICollection<IConstraint> violatedConstraints) {
+      return base.TrySetData(new DoubleData(data), out violatedConstraints);
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ConstrainedDoubleDataView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ConstrainedDoubleDataView"/>.</returns>
+    public override IView CreateView() {
+      return new ConstrainedDoubleDataView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>Uses the <see cref="ConstrainedObjectData.Clone"/> implementation of base class <see cref="ConstrainedObjectData"/>.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="ConstrainedDoubleData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ConstrainedDoubleData clone = (ConstrainedDoubleData)base.Clone(clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Uses the <see cref="ConstrainedItemBase.GetXmlNode"/> implementation of base class 
+    /// <see cref="ConstrainedObjectData"/>. The double value is saved as a <see cref="DoubleData"/> 
+    /// in a child node having the tag name <c>Value</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Value", (DoubleData) base.Data, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted double value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The double value must be saved in the child node as a persisted <see cref="DoubleData"/>
+    /// having the tag name <c>Value</c> (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the double is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      base.Data = (DoubleData)PersistenceManager.Restore(node.SelectSingleNode("Value"), restoredObjects);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class ConstrainedDoubleDataView {
+    /// <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.dataTextBox = new System.Windows.Forms.TextBox();
+      this.constrainedDataBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
+      this.SuspendLayout();
+      // 
+      // dataTextBox
+      // 
+      this.dataTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTextBox.Location = new System.Drawing.Point(0, 0);
+      this.dataTextBox.Name = "dataTextBox";
+      this.dataTextBox.Size = new System.Drawing.Size(344, 20);
+      this.dataTextBox.TabIndex = 0;
+      this.dataTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.dataTextBox_Validating);
+      // 
+      // constrainedDataBaseView
+      // 
+      this.constrainedDataBaseView.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.constrainedDataBaseView.Caption = "Constrained Data";
+      this.constrainedDataBaseView.ConstrainedItem = null;
+      this.constrainedDataBaseView.Location = new System.Drawing.Point(0, 26);
+      this.constrainedDataBaseView.Name = "constrainedDataBaseView";
+      this.constrainedDataBaseView.Size = new System.Drawing.Size(344, 204);
+      this.constrainedDataBaseView.TabIndex = 1;
+      // 
+      // ConstrainedIntDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.constrainedDataBaseView);
+      this.Controls.Add(this.dataTextBox);
+      this.Name = "ConstrainedIntDataView";
+      this.Size = new System.Drawing.Size(344, 230);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox dataTextBox;
+    private HeuristicLab.Core.ConstrainedItemBaseView constrainedDataBaseView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.cs	(revision 1270)
@@ -0,0 +1,122 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="ConstrainedDoubleData"/>, 
+  /// symbolizing a double value being restricted to some constraints.
+  /// </summary>
+  public partial class ConstrainedDoubleDataView : ViewBase {
+    /// <summary>
+    /// Gets or sets the double value to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>,
+    /// but also own data storage present.</remarks>
+    public ConstrainedDoubleData ConstrainedDoubleData {
+      get { return (ConstrainedDoubleData)Item; }
+      set {
+        base.Item = value;
+        constrainedDataBaseView.ConstrainedItem = value;
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ConstrainedDoubleDataView"/>.
+    /// </summary>
+    public ConstrainedDoubleDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ConstrainedDoubleDataView"/> with the given
+    /// <paramref name="constraintDoubleData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="constraintDoubleData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="constraintDoubleData">The double value to represent visually.</param>
+    public ConstrainedDoubleDataView(ConstrainedDoubleData constraintDoubleData)
+      : this() {
+      ConstrainedDoubleData = constraintDoubleData;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="ConstrainedDoubleData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ConstrainedDoubleData.Changed -= new EventHandler(ConstrainedDoubleData_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="ConstrainedDoubleData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ConstrainedDoubleData.Changed += new EventHandler(ConstrainedDoubleData_Changed);
+    }
+
+    /// <summary>
+    /// Updates the constrols with the latest double value.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ConstrainedDoubleData == null) {
+        dataTextBox.Enabled = false;
+      } else {
+        dataTextBox.Enabled = true;
+        dataTextBox.Text = ConstrainedDoubleData.Data.ToString("r");
+      }
+    }
+
+    private void dataTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      double value;
+      try {
+        value = double.Parse(dataTextBox.Text);
+        ICollection<IConstraint> violatedConstraints;
+        if (!ConstrainedDoubleData.TrySetData(value, out violatedConstraints)) {
+          if (Auxiliary.ShowIgnoreConstraintViolationMessageBox(violatedConstraints) == DialogResult.Yes)
+            ConstrainedDoubleData.Data = value;
+          else
+            e.Cancel = true;
+        }
+      }
+      catch (Exception) {
+        dataTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void ConstrainedDoubleData_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedDoubleDataView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntData.cs	(revision 1270)
@@ -0,0 +1,113 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The representation of an int value having some constraints (e.g. smaller than 2).
+  /// </summary>
+  public class ConstrainedIntData : ConstrainedObjectData {
+    /// <summary>
+    /// Gets or sets the int value of the current instance as <see cref="IntData"/>.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ConstrainedObjectData.Data"/> of base class 
+    /// <see cref="ConstrainedObjectData"/>. No own data storage present.</remarks>
+    public new int Data {
+      get { return ((IntData)base.Data).Data; }
+      set { ((IntData)base.Data).Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedIntData"/> with default value <c>0</c>.
+    /// </summary>
+    public ConstrainedIntData() : this (0) {
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedIntData"/> with the specified 
+    /// int value <paramref name="data"/> as <see cref="IntData"/>.
+    /// </summary>
+    /// <param name="data">The integer value to represent.</param>
+    public ConstrainedIntData(int data) : base() {
+      base.Data = new IntData(data);
+    }
+
+    /// <inheritdoc cref="ConstrainedObjectData.TrySetData(object)"/>
+    public virtual bool TrySetData(int data) {
+      return base.TrySetData(new IntData(data));
+    }
+    /// <inheritdoc cref="ConstrainedObjectData.TrySetData(object, out System.Collections.Generic.ICollection&lt;HeuristicLab.Core.IConstraint&gt;)"/>
+    public virtual bool TrySetData(int data, out ICollection<IConstraint> violatedConstraints) {
+      return base.TrySetData(new IntData(data), out violatedConstraints);
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ConstrainedIntDataView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ConstrainedIntDataView"/>.</returns>
+    public override IView CreateView() {
+      return new ConstrainedIntDataView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>Uses the <see cref="ConstrainedObjectData.Clone"/> implementation of base class <see cref="ConstrainedObjectData"/>.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The clone instance as <see cref="ConstrainedIntData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ConstrainedIntData clone = (ConstrainedIntData)base.Clone(clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Uses the <see cref="ConstrainedItemBase.GetXmlNode"/> implementation of base class 
+    /// <see cref="ConstrainedObjectData"/>. The int value is saved as a <see cref="IntData"/> 
+    /// in a child node having the tag name <c>Value</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Value", ((IntData)base.Data), document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted int value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The int value must be saved in the child node as a persisted <see cref="IntData"/>
+    /// having the tag name <c>Value</c> (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the int is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      base.Data = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Value"), restoredObjects);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class ConstrainedIntDataView {
+    /// <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.dataTextBox = new System.Windows.Forms.TextBox();
+      this.constrainedDataBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
+      this.SuspendLayout();
+      // 
+      // dataTextBox
+      // 
+      this.dataTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTextBox.Location = new System.Drawing.Point(0, 0);
+      this.dataTextBox.Name = "dataTextBox";
+      this.dataTextBox.Size = new System.Drawing.Size(344, 20);
+      this.dataTextBox.TabIndex = 0;
+      this.dataTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.dataTextBox_Validating);
+      // 
+      // constrainedDataBaseView
+      // 
+      this.constrainedDataBaseView.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.constrainedDataBaseView.Caption = "Constrained Data";
+      this.constrainedDataBaseView.ConstrainedItem = null;
+      this.constrainedDataBaseView.Location = new System.Drawing.Point(0, 26);
+      this.constrainedDataBaseView.Name = "constrainedDataBaseView";
+      this.constrainedDataBaseView.Size = new System.Drawing.Size(344, 204);
+      this.constrainedDataBaseView.TabIndex = 1;
+      // 
+      // ConstrainedIntDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.constrainedDataBaseView);
+      this.Controls.Add(this.dataTextBox);
+      this.Name = "ConstrainedIntDataView";
+      this.Size = new System.Drawing.Size(344, 230);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox dataTextBox;
+    private HeuristicLab.Core.ConstrainedItemBaseView constrainedDataBaseView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.cs	(revision 1270)
@@ -0,0 +1,122 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="ConstrainedIntDataView"/>, 
+  /// symbolizing an int value with some constraints.
+  /// </summary>
+  public partial class ConstrainedIntDataView : ViewBase {
+    /// <summary>
+    /// Gets or sets the int value to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>,
+    /// but also own data storage present.</remarks>
+    public ConstrainedIntData ConstrainedIntData {
+      get { return (ConstrainedIntData)Item; }
+      set {
+        base.Item = value;
+        constrainedDataBaseView.ConstrainedItem = value;
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of class <see cref="ConstrainedIntDataView"/>.
+    /// </summary>
+    public ConstrainedIntDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of class <see cref="ConstrainedIntDataView"/> with the given
+    /// <paramref name="constraintIntData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="constraintIntData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="constraintIntData">The int value to represent visually.</param>
+    public ConstrainedIntDataView(ConstrainedIntData constraintIntData)
+      : this() {
+      ConstrainedIntData = constraintIntData;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="ConstrainedIntData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ConstrainedIntData.Changed -= new EventHandler(ConstrainedIntData_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="ConstrainedIntData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ConstrainedIntData.Changed += new EventHandler(ConstrainedIntData_Changed);
+    }
+
+    /// <summary>
+    /// Updates the controls with the latest int value.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ConstrainedIntData == null) {
+        dataTextBox.Enabled = false;
+      } else {
+        dataTextBox.Enabled = true;
+        dataTextBox.Text = ConstrainedIntData.ToString();
+      }
+    }
+
+    private void dataTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      int value;
+      try {
+        value = int.Parse(dataTextBox.Text);
+        ICollection<IConstraint> violatedConstraints;
+        if (!ConstrainedIntData.TrySetData(value, out violatedConstraints)) {
+          if (Auxiliary.ShowIgnoreConstraintViolationMessageBox(violatedConstraints) == DialogResult.Yes)
+            ConstrainedIntData.Data = value;
+          else
+            e.Cancel = true;
+        }
+      }
+      catch (Exception) {
+        dataTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void ConstrainedIntData_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedIntDataView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemList.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemList.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemList.cs	(revision 1270)
@@ -0,0 +1,358 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A class representing a list of elements 
+  /// (which are implementing the interface <see cref="IItem"/>) having some constraints.
+  /// </summary>
+  public class ConstrainedItemList : ConstrainedItemBase, IEnumerable, IEnumerable<IItem> {
+    private List<IItem> list;
+    private bool suspendConstraintCheck;
+
+    /// <summary>
+    /// Checks whether the test for the constraints is suspended. 
+    /// </summary>
+    public bool ConstraintCheckSuspended {
+      get { return suspendConstraintCheck; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConstrainedItemList"/> with the constraint check enabled.
+    /// </summary>
+    public ConstrainedItemList()
+      : base() {
+      list = new List<IItem>();
+      suspendConstraintCheck = false;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ConstrainedItemListView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ConstrainedItemListView"/>.</returns>
+    public override IView CreateView() {
+      return new ConstrainedItemListView(this);
+    }
+
+    #region Clone & Persistence
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>The elements of the current instance are cloned with the 
+    /// <see cref="HeuristicLab.Core.Auxiliary.Clone"/> method of the class <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="ConstrainedItemList"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ConstrainedItemList clone = new ConstrainedItemList();
+      clonedObjects.Add(Guid, clone);
+      foreach (IConstraint constraint in Constraints)
+        clone.AddConstraint((IConstraint)Auxiliary.Clone(constraint, clonedObjects));
+      clone.suspendConstraintCheck = suspendConstraintCheck;
+      foreach (IItem item in list) {
+        clone.list.Add((IItem)Auxiliary.Clone(item, clonedObjects));
+      }
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The basic instance is saved through the call of 
+    /// <see cref="HeuristicLab.Core.ConstrainedItemBase.GetXmlNode"/> of base class 
+    /// <see cref="ConstrainedItemBase"/>. <br/>
+    /// The list itself is saved as child node having the tag name <c>ListItems</c> 
+    /// and each element is saved as a child node of the <c>ListItems</c> node. 
+    /// The <c>suspendConstraintCheck</c> attribute is saved as an attribute of the list node 
+    /// having the tag name <c>SuspendConstraintCheck</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode listNode = document.CreateNode(XmlNodeType.Element, "ListItems", null);
+      for (int i = 0; i < list.Count; i++)
+        listNode.AppendChild(PersistenceManager.Persist(list[i], document, persistedObjects));
+      XmlAttribute sccAttrib = document.CreateAttribute("SuspendConstraintCheck");
+      sccAttrib.Value = suspendConstraintCheck.ToString();
+      listNode.Attributes.Append(sccAttrib);
+      node.AppendChild(listNode);
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted int value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The elements of the list must be saved as child nodes of 
+    /// the node with the tag name <c>ListItems</c>, which itself is a child node of the current instance.<br/>
+    /// The <c>suspendConstraintCheck</c> must be saved as attribute of the list node 
+    /// with the tag name <c>SuspendConstraintCheck</c> (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the int is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode listNode = node.SelectSingleNode("ListItems");
+      list = new List<IItem>();
+      for (int i = 0; i < listNode.ChildNodes.Count; i++)
+        list.Add((IItem)PersistenceManager.Restore(listNode.ChildNodes[i], restoredObjects));
+      suspendConstraintCheck = bool.Parse(listNode.Attributes["SuspendConstraintCheck"].Value);
+    }
+    #endregion
+
+    /// <summary>
+    /// The string representation of the current list instance.
+    /// </summary>
+    /// <returns>The current list as string, each element separated by a semicolon. 
+    /// "Empty List" if the list has no elements.</returns>
+    public override string ToString() {
+      if (list.Count > 0) {
+        StringBuilder builder = new StringBuilder();
+        builder.Append(list[0].ToString());
+        for (int i = 1; i < list.Count; i++) {
+          builder.Append(";");
+          builder.Append(list[i].ToString());
+        }
+        return builder.ToString();
+      } else {
+        return "Empty List";
+      }
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.IndexOf(T)"/>
+    public int IndexOf(IItem item) {
+      return list.IndexOf(item);
+    }
+
+    /// <summary>
+    /// Sets <c>suspendConstraintCheck</c> to <c>true</c>.
+    /// </summary>
+    public void BeginCombinedOperation() {
+      suspendConstraintCheck = true;
+    }
+
+    /// <summary>
+    /// Checks whether the current instance fulfills all constraints.
+    /// </summary>
+    /// <param name="violatedConstraints">Output parameter, 
+    /// contains all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if all constraints could be fulfilled, <c>false</c> otherwise.</returns>
+    public bool EndCombinedOperation(out ICollection<IConstraint> violatedConstraints) {
+      if (IsValid(out violatedConstraints))
+        suspendConstraintCheck = false;
+      else
+        suspendConstraintCheck = true;
+
+      return !suspendConstraintCheck;
+    }
+
+    /// <summary>
+    /// Adds a new <paramref name="item"/> at a specified <paramref name="index"/> to the current instance if all constraints are fulfilled.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemAdded"/> if the insertion was successful.</remarks>
+    /// <param name="index">The position where to insert the new element.</param>
+    /// <param name="item">The new element to insert.</param>
+    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if the insertion was successful, <c>false</c> otherwise.</returns>
+    public bool TryInsert(int index, IItem item, out ICollection<IConstraint> violatedConstraints) {
+      list.Insert(index, item);
+      violatedConstraints = new List<IConstraint>();
+      if (suspendConstraintCheck || IsValid(out violatedConstraints)) {
+        OnItemAdded(item, index);
+        return true;
+      } else {
+        list.RemoveAt(index);
+        return false;
+      }
+    }
+
+    /// <summary>
+    /// Removes an element at the specified <paramref name="index"/> 
+    /// from the current instance if all constraints are fulfilled.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemRemoved"/> if the deletion was successful.</remarks>
+    /// <param name="index">The position where to remove the element.</param>
+    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if the element could be removed successfully, <c>false</c> otherwise.</returns>
+    public bool TryRemoveAt(int index, out ICollection<IConstraint> violatedConstraints) {
+      IItem item = list[index];
+      list.RemoveAt(index);
+      violatedConstraints = new List<IConstraint>();
+      if (suspendConstraintCheck || IsValid(out violatedConstraints)) {
+        OnItemRemoved(item, index);
+        return true;
+      } else {
+        list.Insert(index, item);
+        return false;
+      }
+    }
+
+    /// <summary>
+    /// Gets the element of the current instance at the specified <paramref name="index"/>.
+    /// </summary>
+    /// <param name="index">The position of the searched element.</param>
+    /// <returns>The searched element as <see cref="IItem"/>.</returns>
+    public IItem this[int index] {
+      get { return list[index]; }
+    }
+
+    /// <summary>
+    /// Changes the element at a specified position if all constraints are fulfilled.
+    /// </summary>
+    /// <param name="index">The position where to change the element.</param>
+    /// <param name="item">The element that replaces the current one.</param>
+    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if the substitution was successful, <c>false</c> otherwise.</returns>
+    public bool TrySetAt(int index, IItem item, out ICollection<IConstraint> violatedConstraints) {
+      IItem backup = this[index];
+      list[index] = item;
+      violatedConstraints = new List<IConstraint>();
+      if (suspendConstraintCheck || IsValid(out violatedConstraints)) {
+        return true;
+      } else {
+        list[index] = backup;
+        return false;
+      }
+    }
+
+    /// <summary>
+    /// Adds a new <paramref name="item"/> to the current list if all constraints are fulfilled.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemAdded"/> if the add was successful.</remarks>
+    /// <param name="item">The element to add.</param>
+    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if the element could be successfully added, <c>false</c> otherwise.</returns>
+    public bool TryAdd(IItem item, out ICollection<IConstraint> violatedConstraints) {
+      list.Add(item);
+      violatedConstraints = new List<IConstraint>();
+      if (suspendConstraintCheck || IsValid(out violatedConstraints)) {
+        OnItemAdded(item, list.Count - 1);
+        return true;
+      } else {
+        list.RemoveAt(list.Count - 1);
+        return false;
+      }
+    }
+    /// <summary>
+    /// Empties the current list.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnCleared"/>.</remarks>
+    public void Clear() {
+      list.Clear();
+      OnCleared();
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.Contains"/>
+    public bool Contains(IItem item) {
+      return list.Contains(item);
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.CopyTo(T[],int)"/>
+    public void CopyTo(IItem[] array, int arrayIndex) {
+      list.CopyTo(array, arrayIndex);
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.Count"/>
+    public int Count {
+      get { return list.Count; }
+    }
+    /// <summary>
+    /// Checks whether the current instance is read-only.
+    /// </summary>
+    /// <remarks>Always returns <c>false</c>.</remarks>
+    public bool IsReadOnly {
+      get { return false; }
+    }
+    /// <summary>
+    /// Removes a specified <paramref name="item"/> from the 
+    /// current instance if all constraints are fulfilled.
+    /// </summary>
+    /// <param name="item">The element to remove.</param>
+    /// <param name="violatedConstraints">Output parameter, all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if the deletion was successful, <c>false</c> otherwise.</returns>
+    public bool TryRemove(IItem item, out ICollection<IConstraint> violatedConstraints) {
+      int index = list.IndexOf(item);
+      if (index >= 0) {
+        return TryRemoveAt(index, out violatedConstraints);
+      } else {
+        violatedConstraints = new List<IConstraint>();
+        return false;
+      }
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.GetEnumerator"/>
+    public IEnumerator<IItem> GetEnumerator() {
+      return list.GetEnumerator();
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.GetEnumerator"/>
+    IEnumerator IEnumerable.GetEnumerator() {
+      return list.GetEnumerator();
+    }
+
+    /// <summary>
+    /// Occurs when a new item is added.
+    /// </summary>
+    public event EventHandler<ItemIndexEventArgs> ItemAdded;
+    /// <summary>
+    /// Fires a new <c>ItemAdded</c> event.
+    /// </summary>         
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    /// <param name="item">The element that was added.</param>
+    /// <param name="index">The position where the element was added.</param>
+    protected virtual void OnItemAdded(IItem item, int index) {
+      if (ItemAdded != null)
+        ItemAdded(this, new ItemIndexEventArgs(item, index));
+      OnChanged();
+    }
+    /// <summary>
+    /// Occurs when an element is removed from the current instance.
+    /// </summary>
+    public event EventHandler<ItemIndexEventArgs> ItemRemoved;
+    /// <summary>
+    /// Fires a new <c>ItemRemoved</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    /// <param name="item">The element that has been removed.</param>
+    /// <param name="index">The position from where it has been removed.</param>
+    protected virtual void OnItemRemoved(IItem item, int index) {
+      if (ItemRemoved != null)
+        ItemRemoved(this, new ItemIndexEventArgs(item, index));
+      OnChanged();
+    }
+    /// <summary>
+    /// Occurs when the current list is emptied.
+    /// </summary>
+    public event EventHandler Cleared;
+    /// <summary>
+    /// Fires a new <c>Cleared</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    protected virtual void OnCleared() {
+      if (Cleared != null)
+        Cleared(this, new EventArgs());
+      OnChanged();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.Designer.cs	(revision 1270)
@@ -0,0 +1,218 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class ConstrainedItemListView {
+    /// <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.itemsSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.itemsGroupBox = new System.Windows.Forms.GroupBox();
+      this.itemsListView = new System.Windows.Forms.ListView();
+      this.removeItemButton = new System.Windows.Forms.Button();
+      this.addItemButton = new System.Windows.Forms.Button();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.itemsTabPage = new System.Windows.Forms.TabPage();
+      this.constraintsTabPage = new System.Windows.Forms.TabPage();
+      this.constraintsConstrainedItemBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
+      this.itemsSplitContainer.Panel1.SuspendLayout();
+      this.itemsSplitContainer.Panel2.SuspendLayout();
+      this.itemsSplitContainer.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.itemsTabPage.SuspendLayout();
+      this.constraintsTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // itemsSplitContainer
+      // 
+      this.itemsSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemsSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.itemsSplitContainer.Name = "itemsSplitContainer";
+      // 
+      // itemsSplitContainer.Panel1
+      // 
+      this.itemsSplitContainer.Panel1.Controls.Add(this.itemsGroupBox);
+      // 
+      // itemsSplitContainer.Panel2
+      // 
+      this.itemsSplitContainer.Panel2.Controls.Add(this.detailsGroupBox);
+      this.itemsSplitContainer.Size = new System.Drawing.Size(367, 378);
+      this.itemsSplitContainer.SplitterDistance = 162;
+      this.itemsSplitContainer.TabIndex = 2;
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Controls.Add(this.itemsListView);
+      this.itemsGroupBox.Controls.Add(this.removeItemButton);
+      this.itemsGroupBox.Controls.Add(this.addItemButton);
+      this.itemsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.itemsGroupBox.Name = "itemsGroupBox";
+      this.itemsGroupBox.Size = new System.Drawing.Size(162, 378);
+      this.itemsGroupBox.TabIndex = 0;
+      this.itemsGroupBox.TabStop = false;
+      this.itemsGroupBox.Text = "Items";
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.itemsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.itemsListView.Location = new System.Drawing.Point(6, 19);
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.ShowGroups = false;
+      this.itemsListView.Size = new System.Drawing.Size(153, 324);
+      this.itemsListView.TabIndex = 0;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.List;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.itemsListView_SelectedIndexChanged);
+      this.itemsListView.KeyUp += new System.Windows.Forms.KeyEventHandler(this.itemsListView_KeyUp);
+      // 
+      // removeItemButton
+      // 
+      this.removeItemButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeItemButton.Location = new System.Drawing.Point(84, 349);
+      this.removeItemButton.Name = "removeItemButton";
+      this.removeItemButton.Size = new System.Drawing.Size(75, 23);
+      this.removeItemButton.TabIndex = 4;
+      this.removeItemButton.Text = "Remove";
+      this.removeItemButton.UseVisualStyleBackColor = true;
+      this.removeItemButton.Click += new System.EventHandler(this.removeItemButton_Click);
+      // 
+      // addItemButton
+      // 
+      this.addItemButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addItemButton.Location = new System.Drawing.Point(3, 349);
+      this.addItemButton.Name = "addItemButton";
+      this.addItemButton.Size = new System.Drawing.Size(75, 23);
+      this.addItemButton.TabIndex = 3;
+      this.addItemButton.Text = "Add";
+      this.addItemButton.UseVisualStyleBackColor = true;
+      this.addItemButton.Click += new System.EventHandler(this.addItemButton_Click);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(201, 378);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "Details";
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.itemsTabPage);
+      this.tabControl.Controls.Add(this.constraintsTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(381, 410);
+      this.tabControl.TabIndex = 5;
+      // 
+      // itemsTabPage
+      // 
+      this.itemsTabPage.Controls.Add(this.itemsSplitContainer);
+      this.itemsTabPage.Location = new System.Drawing.Point(4, 22);
+      this.itemsTabPage.Name = "itemsTabPage";
+      this.itemsTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.itemsTabPage.Size = new System.Drawing.Size(373, 384);
+      this.itemsTabPage.TabIndex = 0;
+      this.itemsTabPage.Text = "Items";
+      this.itemsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // constraintsTabPage
+      // 
+      this.constraintsTabPage.Controls.Add(this.constraintsConstrainedItemBaseView);
+      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(373, 384);
+      this.constraintsTabPage.TabIndex = 1;
+      this.constraintsTabPage.Text = "Constraints";
+      this.constraintsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // constraintsConstrainedItemBaseView
+      // 
+      this.constraintsConstrainedItemBaseView.Caption = "Constrained Item";
+      this.constraintsConstrainedItemBaseView.ConstrainedItem = null;
+      this.constraintsConstrainedItemBaseView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constraintsConstrainedItemBaseView.Location = new System.Drawing.Point(3, 3);
+      this.constraintsConstrainedItemBaseView.Name = "constraintsConstrainedItemBaseView";
+      this.constraintsConstrainedItemBaseView.Size = new System.Drawing.Size(367, 378);
+      this.constraintsConstrainedItemBaseView.TabIndex = 0;
+      // 
+      // ConstrainedItemListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "ConstrainedItemListView";
+      this.Size = new System.Drawing.Size(381, 410);
+      this.itemsSplitContainer.Panel1.ResumeLayout(false);
+      this.itemsSplitContainer.Panel2.ResumeLayout(false);
+      this.itemsSplitContainer.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.tabControl.ResumeLayout(false);
+      this.itemsTabPage.ResumeLayout(false);
+      this.constraintsTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer itemsSplitContainer;
+    private System.Windows.Forms.Button addItemButton;
+    private System.Windows.Forms.Button removeItemButton;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage itemsTabPage;
+    private System.Windows.Forms.TabPage constraintsTabPage;
+    private System.Windows.Forms.GroupBox itemsGroupBox;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private HeuristicLab.Core.ConstrainedItemBaseView constraintsConstrainedItemBaseView;
+    private System.Windows.Forms.ListView itemsListView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.cs	(revision 1270)
@@ -0,0 +1,208 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="ConstrainedItemList"/>.
+  /// </summary>
+  public partial class ConstrainedItemListView : ViewBase {
+    private ChooseItemDialog chooseItemDialog;
+
+
+    /// <summary>
+    /// Gets or sets the item list to represent.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.</remarks>
+    public ConstrainedItemList ConstrainedItemList {
+      get { return (ConstrainedItemList)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ConstrainedItemListView"/>.
+    /// </summary>
+    public ConstrainedItemListView() {
+      InitializeComponent();
+      //itemsListView.Columns[0].Width = Math.Max(0, itemsListView.Width - 25);
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ConstrainedItemListView"/> with the given
+    /// <paramref name="constrainedItemList"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="constrainedItemList"/> is not copied!</note>
+    /// </summary>
+    /// <param name="constrainedItemList">The item list to represent visually.</param>
+    public ConstrainedItemListView(ConstrainedItemList constrainedItemList)
+      : this() {
+      ConstrainedItemList = constrainedItemList;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="ConstrainedItemList"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ConstrainedItemList.ItemAdded -= new EventHandler<ItemIndexEventArgs>(ConstrainedItemList_ItemAdded);
+      ConstrainedItemList.ItemRemoved -= new EventHandler<ItemIndexEventArgs>(ConstrainedItemList_ItemRemoved);
+      ConstrainedItemList.Cleared -= new EventHandler(ConstrainedItemList_Cleared);
+      base.RemoveItemEvents();
+    }
+    
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="ConstrainedItemList"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ConstrainedItemList.ItemAdded += new EventHandler<ItemIndexEventArgs>(ConstrainedItemList_ItemAdded);
+      ConstrainedItemList.ItemRemoved += new EventHandler<ItemIndexEventArgs>(ConstrainedItemList_ItemRemoved);
+      ConstrainedItemList.Cleared += new EventHandler(ConstrainedItemList_Cleared);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest elements in the list.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Enabled = false;
+      detailsGroupBox.Controls.Clear();
+      removeItemButton.Enabled = false;
+
+      if (ConstrainedItemList == null) {
+        itemsGroupBox.Enabled = false;
+        itemsSplitContainer.Enabled = false;
+        constraintsConstrainedItemBaseView.Enabled = false;
+      } else {
+        foreach (ListViewItem item in itemsListView.Items) {
+          ((IItem)item.Tag).Changed -= new EventHandler(Item_Changed);
+        }
+        itemsListView.Items.Clear();
+        foreach (IItem data in ConstrainedItemList) {
+          ListViewItem item = new ListViewItem();
+          item.Text = data.ToString();
+          item.Tag = data;
+          itemsListView.Items.Add(item);
+          data.Changed += new EventHandler(Item_Changed);
+        }
+        itemsSplitContainer.Enabled = true;
+        constraintsConstrainedItemBaseView.ConstrainedItem = ConstrainedItemList;
+        constraintsConstrainedItemBaseView.Enabled = true;
+      }
+    }
+
+    private void itemsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      detailsGroupBox.Enabled = false;
+      if (detailsGroupBox.Controls.Count > 0) detailsGroupBox.Controls[0].Dispose();
+      detailsGroupBox.Controls.Clear();
+      if (itemsListView.SelectedItems.Count == 1) {
+        IItem data = (IItem)itemsListView.SelectedItems[0].Tag;
+        Control view = (Control)data.CreateView();
+        detailsGroupBox.Controls.Add(view);
+        view.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+      removeItemButton.Enabled = (itemsListView.SelectedItems.Count == 1);
+    }
+
+    #region ConstrainedItemList changes
+    void ConstrainedItemList_ItemAdded(object sender, ItemIndexEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<ItemIndexEventArgs>(ConstrainedItemList_ItemAdded), sender, e);
+      else {
+        ListViewItem item = new ListViewItem();
+        item.Text = e.Item.ToString();
+        item.Tag = e.Item;
+        itemsListView.Items.Insert(e.Index, item);
+        e.Item.Changed += new EventHandler(Item_Changed);
+      }
+    }
+
+    void ConstrainedItemList_ItemRemoved(object sender, ItemIndexEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<ItemIndexEventArgs>(ConstrainedItemList_ItemRemoved), sender, e);
+      else {
+        itemsListView.Items.RemoveAt(e.Index);
+        e.Item.Changed -= new EventHandler(Item_Changed);
+      }
+    }
+
+    void ConstrainedItemList_Cleared(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    void Item_Changed(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_Changed), sender, e);
+      else {
+        IItem data = (IItem)sender;
+        foreach (ListViewItem item in itemsListView.Items) {
+          if (item.Tag == data)
+            item.Text = data.ToString();
+        }
+      }
+    }
+    #endregion
+
+    #region Button events
+    private void addItemButton_Click(object sender, EventArgs e) {
+      if (chooseItemDialog == null) {
+        chooseItemDialog = new ChooseItemDialog();
+        chooseItemDialog.Caption = "Add Item";
+      }
+      if (chooseItemDialog.ShowDialog(this) == DialogResult.OK) {
+        ICollection<IConstraint> violatedConstraints;
+        if (!ConstrainedItemList.TryAdd(chooseItemDialog.Item, out violatedConstraints)) {
+          Auxiliary.ShowConstraintViolationMessageBox(violatedConstraints);
+        }
+      }
+    }
+
+    private void removeItemButton_Click(object sender, EventArgs e) {
+      ICollection<IConstraint> violatedConstraints;
+      if (!ConstrainedItemList.TryRemoveAt(itemsListView.SelectedIndices[0], out violatedConstraints)) {
+        Auxiliary.ShowConstraintViolationMessageBox(violatedConstraints);
+      }
+    }
+    #endregion
+
+    #region Key events
+    private void itemsListView_KeyUp(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Delete) {
+        ICollection<IConstraint> violatedConstraints;
+        if (!ConstrainedItemList.TryRemoveAt(itemsListView.SelectedIndices[0], out violatedConstraints)) {
+          Auxiliary.ShowConstraintViolationMessageBox(violatedConstraints);
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedItemListView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedObjectData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedObjectData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ConstrainedObjectData.cs	(revision 1270)
@@ -0,0 +1,140 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A class representing all basic data types having some constraints.
+  /// </summary>
+  public class ConstrainedObjectData : ConstrainedItemBase, IObjectData {
+    private object myData;
+    /// <summary>
+    /// Gets or sets the object with constraints to represent.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/> in the setter.
+    /// </remarks>
+    public virtual object Data {
+      get { return myData; }
+      set {
+        if (myData != value) {
+          myData = value;
+          OnChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Assigns the new <paramref name="data"/> if it is valid according to the constraints.
+    /// </summary>
+    /// <param name="data">The data to assign.</param>
+    /// <returns><c>true</c> if the new <paramref name="data"/> could be assigned, <c>false</c> otherwise.</returns>
+    public virtual bool TrySetData(object data) {
+      if (myData != data) {
+        object backup = myData;
+        myData = data;
+        if (IsValid()) {
+          OnChanged();
+          return true;
+        } else {
+          myData = backup;
+          return false;
+        }
+      }
+      return true;
+    }
+    /// <summary>
+    /// Assigns the new object <paramref name="data"/> if it is valid according to the constraints.
+    /// </summary>
+    /// <param name="data">The data to assign.</param>
+    /// <param name="violatedConstraints">Output parameter, containing all constraints that could not be fulfilled.</param>
+    /// <returns><c>true</c> if the new <paramref name="data"/> could be assigned, <c>false</c> otherwise.</returns>
+    public virtual bool TrySetData(object data, out ICollection<IConstraint> violatedConstraints) {
+      if (myData != data) {
+        object backup = myData;
+        myData = data;
+        if (IsValid(out violatedConstraints)) {
+          OnChanged();
+          return true;
+        } else {
+          myData = backup;
+          return false;
+        }
+      }
+      violatedConstraints = new List<IConstraint>();
+      return true;
+    }
+
+    /// <summary>
+    /// Clones the current object.
+    /// </summary>
+    /// <remarks>HeuristicLab data items are cloned with the <see cref="HeuristicLab.Core.Auxiliary.Clone"/> method of 
+    /// class <see cref="Auxiliary"/> (deep copy), all other items (like basic data types) 
+    /// are cloned with their own <c>Clone</c> methods (shadow copy).</remarks>
+    /// <param name="clonedObjects">All already cloned objects.</param>
+    /// <returns>The cloned object as <see cref="ConstrainedObjectData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ConstrainedObjectData clone = (ConstrainedObjectData)base.Clone(clonedObjects);
+      if (Data is IStorable)
+        clone.myData = Auxiliary.Clone((IStorable)Data, clonedObjects);
+      else if (Data is ICloneable)
+        clone.myData = ((ICloneable)Data).Clone();
+      else
+        throw new InvalidOperationException("contained object is not cloneable");
+      return clone;
+    }
+
+    /// <summary>
+    /// Compares the current instance to the given <paramref name="obj"/>.
+    /// </summary>
+    /// <remarks>Can also compare basic data types with their representing HeuristicLab data types 
+    /// (e.g. a <see cref="ConstrainedDoubleData"/> with a double value).</remarks>
+    /// <exception cref="InvalidOperationException">Thrown when the current 
+    /// instance does not implement the interface <see cref="IComparable"/></exception>
+    /// <param name="obj">The object to compare the current instance to.</param>
+    /// <returns><c>0</c> if the objects are the same, a value smaller than zero when the current instance
+    /// is smaller than the given <paramref name="obj"/> and a value greater than zero 
+    /// when the current instance is greater than the given <paramref name="obj"/>.</returns>
+    public int CompareTo(object obj) {
+      IComparable comparable = Data as IComparable;
+      if (comparable != null) {
+        IObjectData other = obj as IObjectData;
+        if (other != null)
+          return comparable.CompareTo(other.Data);
+        else
+          return comparable.CompareTo(obj);
+      }
+      throw new InvalidOperationException("Cannot compare as contained object doesn't implement IComparable");
+    }
+
+    /// <summary>
+    /// The string representation of the current instance.
+    /// </summary>
+    /// <returns>The current instance as a string.</returns>
+    public override string ToString() {
+      return Data.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayData.cs	(revision 1270)
@@ -0,0 +1,120 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The representation of an array of double values.
+  /// </summary>
+  public class DoubleArrayData : ArrayDataBase {
+    /// <summary>
+    /// Gets or sets the double elements of the array.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase.Data"/> of base class 
+    /// <see cref="ArrayDataBase"/>. No own data storage present.</remarks>
+    public new double[] Data {
+      get { return (double[])base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="DoubleArrayData"/> class.
+    /// </summary>
+    public DoubleArrayData() {
+      Data = new double[0];
+    }
+    /// <summary>
+    /// Initializes a new instance of the <see cref="DoubleArrayData"/> class.
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The double array the instance should represent.</param>
+    public DoubleArrayData(double[] data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of the <see cref="DoubleArrayDataView"/> class.
+    /// </summary>
+    /// <returns>The created instance of the <see cref="DoubleArrayDataView"/>.</returns>
+    public override IView CreateView() {
+      return new DoubleArrayDataView(this);
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The double elements of the array are saved in the node's inner text as string, 
+    /// each element, whose format depends on the locale culture info, separated by a semicolon.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"></see>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = ToString(CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+    
+    /// <summary>
+    /// Loads the persisted double array from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The double elemets of the array must be saved in the inner text of the node as string, 
+    /// each element separated by a semicolon and formatted according to the locale culture info and 
+    /// its number format (see <see cref="GetXmlNode"/>).</remarks>
+    /// <exception cref="System.FormatException">Thrown when a saved element cannot be parsed as a double value.</exception>
+    /// <param name="node">The <see cref="XmlNode"></see> where the instance is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      string[] tokens = node.InnerText.Split(';');
+      double[] data = new double[tokens.Length];
+      for(int i = 0; i < data.Length; i++)
+        if(double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) == false) {
+          throw new FormatException("Can't parse " + tokens[i] + " as double value.");
+        }
+      Data = data;
+    }
+
+    /// <summary>
+    /// The string representation of the array, formatted according to the given <paramref name="format"/>.
+    /// </summary>
+    /// <param name="format">The <see cref="NumberFormatInfo"></see> the single double 
+    /// values should be formatted accordingly.</param>
+    /// <returns>The elements of the array as string, each element separated by a semicolon and 
+    /// formatted according to the parameter <paramref name="format"/>.</returns>
+    private string ToString(NumberFormatInfo format) {
+      StringBuilder builder = new StringBuilder();
+      for(int i = 0; i < Data.Length; i++) {
+        builder.Append(";");
+        builder.Append(Data[i].ToString("r", format));
+      }
+      if(builder.Length > 0)
+        builder.Remove(0, 1);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class DoubleArrayDataView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleArrayDataView.cs	(revision 1270)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="DoubleArrayData"/>, 
+  /// symbolizing an array of double values.
+  /// </summary>
+  public partial class DoubleArrayDataView : ArrayDataBaseView {
+    /// <summary>
+    /// Gets or sets the double array to represent as <see cref="DoubleArrayData"/>.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase"/> of 
+    /// base class <see cref="ArrayDataBaseView"/>. No own data storage present.</remarks>
+    public DoubleArrayData DoubleArrayData {
+      get { return (DoubleArrayData)base.ArrayDataBase; }
+      set { base.ArrayDataBase = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="DoubleArrayDataView"/>.
+    /// </summary>
+    public DoubleArrayDataView() {
+      InitializeComponent();
+      // round-trip format for all cells
+      dataGridView.DefaultCellStyle.Format = "r";
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="DoubleArrayDataView"/> with the given
+    /// <paramref name="doubleArrayData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="doubleArrayData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="doubleArrayData">The double array to represent visually.</param>
+    public DoubleArrayDataView(DoubleArrayData doubleArrayData)
+      : this() {
+      DoubleArrayData = doubleArrayData;
+    }
+
+    /// <summary>
+    /// Sets the element on position <paramref name="index"/> to the
+    /// given <paramref name="element"/> as double value.
+    /// </summary>
+    /// <param name="index">The position where to substitute the element.</param>
+    /// <param name="element">The element to insert.</param>
+    protected override void SetArrayElement(int index, string element) {
+      double result;
+      double.TryParse(element, out result);
+
+      DoubleArrayData.Data[index] = result;
+    }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="element"/> can be converted to a double value.
+    /// </summary>
+    /// <param name="element">The data to validate.</param>
+    /// <returns><c>true</c> if the <paramref name="element"/> could be converted,
+    /// <c>false</c> otherwise.</returns>
+    protected override bool ValidateData(string element) {
+      double result;
+      return element != null && double.TryParse(element, out result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleData.cs	(revision 1270)
@@ -0,0 +1,112 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Class to represent double values.
+  /// </summary>
+  public class DoubleData : ObjectData {
+    /// <summary>
+    /// Gets or sets the double value.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/> of base class <see cref="ObjectData"></see>. 
+    /// No own data storage present.</remarks>
+    public new double Data {
+      get { return (double)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleData"/> with default value <c>0.0</c>.
+    /// </summary>
+    public DoubleData() {
+      Data = 0.0;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The double value the instance should represent.</param>
+    public DoubleData(double data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of the <see cref="DoubleDataView"/> class.
+    /// </summary>
+    /// <returns>The created instance of <see cref="DoubleDataView"/>.</returns>
+    public override IView CreateView() {
+      return new DoubleDataView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance and adds it to the dictionary <paramref name="clonedObjects"/>.
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="DoubleData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      DoubleData clone = new DoubleData();
+      clonedObjects.Add(Guid, clone);
+      clone.Data = Data;
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The double value is saved in the node's inner text as string, 
+    /// its format depending on the local culture info and its number format.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = Data.ToString("r", CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted double value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The double value must be saved in the node's inner text as a string and 
+    /// formatted according to the locale culture info and 
+    /// its number format (see <see cref="GetXmlNode"/>).</remarks>
+    /// <exception cref="System.FormatException">Thrown when the saved value cannot be parsed as a double value.</exception>
+    /// <param name="node">The <see cref="XmlNode"/> where the double is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      double data;
+      if(double.TryParse(node.InnerText, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data) == true) {
+        Data = data;
+      } else {
+        throw new FormatException("Can't parse " + node.InnerText + " as double value.");       
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class DoubleDataView {
+    /// <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.dataTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // dataTextBox
+      // 
+      this.dataTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTextBox.Location = new System.Drawing.Point(0, 0);
+      this.dataTextBox.Name = "dataTextBox";
+      this.dataTextBox.Size = new System.Drawing.Size(274, 20);
+      this.dataTextBox.TabIndex = 1;
+      this.dataTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.dataTextBox_Validating);
+      // 
+      // DoubleDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataTextBox);
+      this.Name = "DoubleDataView";
+      this.Size = new System.Drawing.Size(274, 26);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox dataTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.cs	(revision 1270)
@@ -0,0 +1,110 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="DoubleData"/>, symbolizing a double value.
+  /// </summary>
+  public partial class DoubleDataView : ViewBase {
+    /// <summary>
+    /// Gets or sets the double value to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class 
+    /// <see cref="ViewBase"/>. No own data storage present.</remarks>
+    public DoubleData DoubleData {
+      get { return (DoubleData)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="DoubleDataView"/>.
+    /// </summary>
+    public DoubleDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="DoubleDataView"/> with the given 
+    /// <paramref name="doubleData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="doubleData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="doubleData">The double value to represent visually.</param>
+    public DoubleDataView(DoubleData doubleData)
+      : this() {
+      DoubleData = doubleData;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="DoubleData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      DoubleData.Changed -= new EventHandler(DoubleData_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="DoubleData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      DoubleData.Changed += new EventHandler(DoubleData_Changed);
+    }
+
+    /// <summary>
+    /// Updates the controls with the latest double value.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (DoubleData == null) {
+        dataTextBox.Enabled = false;
+      } else {
+        dataTextBox.Enabled = true;
+        dataTextBox.Text = DoubleData.Data.ToString("r");
+      }
+    }
+
+    private void dataTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        DoubleData.Data = double.Parse(dataTextBox.Text);
+      }
+      catch (Exception) {
+        dataTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void DoubleData_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleDataView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixData.cs	(revision 1270)
@@ -0,0 +1,144 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A two-dimensional matrix consisting of double values.
+  /// </summary>
+  public class DoubleMatrixData : ArrayDataBase {
+    /// <summary>
+    /// Gets or sets the double elements of the matrix.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase.Data"/> of base 
+    /// class <see cref="ArrayDataBase"/>. No own data storage present.</remarks>
+    public new double[,] Data {
+      get { return (double[,])base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="DoubleMatrixData"/> class.
+    /// </summary>
+    public DoubleMatrixData() {
+      Data = new double[1, 1];
+    }
+    /// <summary>
+    /// Initializes a new instance of the <see cref="DoubleMatrixData"/> class.
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The two-dimensional double matrix the instance should represent.</param>
+    public DoubleMatrixData(double[,] data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of the <see cref="DoubleMatrixDataView"/> class.
+    /// </summary>
+    /// <returns>The created instance as <see cref="DoubleMatrixDataView"/>.</returns>
+    public override IView CreateView() {
+      return new DoubleMatrixDataView(this);
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The dimensions of the matrix are saved as attributes (<c>Dimension1</c>,<c>Dimension2</c>), 
+    /// formatted according to the local culture info and its number format.<br/>
+    /// The elements of the matrix are saved as string in the node's inner text, 
+    /// each element separated by a semicolon, all line by line, formatted according to the 
+    /// local number format.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute dim1 = document.CreateAttribute("Dimension1");
+      dim1.Value = Data.GetLength(0).ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim1);
+      XmlAttribute dim2 = document.CreateAttribute("Dimension2");
+      dim2.Value = Data.GetLength(1).ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim2);
+      node.InnerText = ToString(CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted matrix from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The dimensions of the matrix must be saved as Attributes (<c>Dimension1</c>, <c>Dimension2</c>),
+    /// formatted in the local number format. <br/>
+    /// The elements of the matrix must be saved in the node's inner text as string, 
+    /// each element separated by a semicolon, line by line, formatted according to the local 
+    /// culture info and its number format (see <see cref="GetXmlNode"/>).</remarks>
+    /// <exception cref="System.FormatException">Thrown when a saved element cannot be parsed as a double value.</exception>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      int dim1 = int.Parse(node.Attributes["Dimension1"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      int dim2 = int.Parse(node.Attributes["Dimension2"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      string[] tokens = node.InnerText.Split(';');
+      double[,] data = new double[dim1, dim2];
+      for (int i = 0; i < dim1; i++) {
+        for (int j = 0; j < dim2; j++) {
+          if(double.TryParse(tokens[i * dim2 + j], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i, j])==false) {
+            throw new FormatException("Can't parse " + tokens[i * dim2 + j] + " as double value.");
+          }
+        }
+      }
+      Data = data;
+    }
+
+    /// <summary>
+    /// The string representation of the matrix.
+    /// </summary>
+    /// <returns>The elements of the matrix as a string, line by line, each element separated by a 
+    /// semicolon and formatted according to local number format.</returns>
+    public override string ToString() {
+      return ToString(CultureInfo.CurrentCulture.NumberFormat);
+    }
+    
+    /// <summary>
+    /// The string representation of the matrix, considering a specified <paramref name="format"/>.
+    /// </summary>
+    /// <param name="format">The <see cref="NumberFormatInfo"/> the double values are formatted accordingly.</param>
+    /// <returns>The elements of the matrix as a string, line by line, each element separated by a 
+    /// semicolon and formatted according to the specified <paramref name="format"/>.</returns>
+    private string ToString(NumberFormatInfo format) {
+      StringBuilder builder = new StringBuilder();
+      for (int i = 0; i < Data.GetLength(0); i++) {
+        for (int j = 0; j < Data.GetLength(1); j++) {
+          builder.Append(";");
+          builder.Append(Data[i, j].ToString("r", format));
+        }
+      }
+      if (builder.Length > 0) builder.Remove(0, 1);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class DoubleMatrixDataView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/DoubleMatrixDataView.cs	(revision 1270)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="DoubleMatrixData"/>, symbolizing a two-dimensional
+  /// matrix of double values.
+  /// </summary>
+  public partial class DoubleMatrixDataView : MatrixDataBaseView {
+    /// <summary>
+    /// Gets or sets the double matrix to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase"/> of base class 
+    /// <see cref="MatrixDataBaseView"/>. No own data storage present.</remarks>
+    public DoubleMatrixData DoubleMatrixData {
+      get { return (DoubleMatrixData)base.ArrayDataBase; }
+      set { base.ArrayDataBase = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="DoubleMatrixDataView"/>.
+    /// </summary>
+    public DoubleMatrixDataView() {
+      InitializeComponent();
+      // round-trip format for all cells
+      dataGridView.DefaultCellStyle.Format = "r";
+    }   
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="DoubleMatrixDataView"/> with the given
+    /// <paramref name="doubleMatrixData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="doubleMatrixData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="doubleMatrixData">The matrix of doubles to represent visually.</param>
+    public DoubleMatrixDataView(DoubleMatrixData doubleMatrixData)
+      : this() {
+      DoubleMatrixData = doubleMatrixData;
+    }
+
+    /// <summary>
+    /// Subsitutes an element in the given <paramref name="row"/> and the given 
+    /// <paramref name="column"/> with the given <paramref name="element"/>.
+    /// </summary>
+    /// <param name="row">The row of the element to substitute.</param>
+    /// <param name="column">The column of the element to substitute.</param>
+    /// <param name="element">The element to insert.</param>
+    protected override void SetArrayElement(int row, int column, string element) {
+      double result;
+      double.TryParse(element, out result);
+      if(result != DoubleMatrixData.Data[row, column]) {
+        DoubleMatrixData.Data[row, column] = result;
+        DoubleMatrixData.FireChanged();
+      }
+    }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="element"/> can be converted to a double value.
+    /// </summary>
+    /// <param name="element">The element to check.</param>
+    /// <returns><c>true</c> if the <paramref name="element"/> could be converted,
+    /// <c>false</c> otherwise.</returns>
+    protected override bool ValidateData(string element) {
+      double result;
+      return element != null && double.TryParse(element, out result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.cs	(revision 1270)
@@ -0,0 +1,48 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core; 
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A visual representation to visualize a key-value pair.
+  /// </summary>
+  public partial class EditKeyValueDialog : Form {
+    private IItem key; 
+    /// <summary>
+    /// Gets the current key.
+    /// </summary>
+    public IItem Key {
+      get { return key; }
+    }
+
+    private IItem value;
+    /// <summary>
+    /// Gets the current value.
+    /// </summary>
+    public IItem Value {
+      get { return value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="EditKeyValueDialog"/> with the given types of 
+    /// key and value.
+    /// </summary>
+    /// <param name="keyType">The type of the key.</param>
+    /// <param name="valueType">The type of the value.</param>
+    public EditKeyValueDialog(Type keyType, Type valueType) {
+      InitializeComponent();
+      key = (IItem) Activator.CreateInstance(keyType);
+      value = (IItem) Activator.CreateInstance(valueType); 
+      keyPanel.Controls.Add((Control) key.CreateView());
+      valuePanel.Controls.Add((Control) value.CreateView()); 
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      this.DialogResult = DialogResult.OK;
+      this.Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.designer.cs	(revision 1270)
@@ -0,0 +1,131 @@
+﻿namespace HeuristicLab.Data {
+  partial class EditKeyValueDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.keyPanel = new System.Windows.Forms.Panel();
+      this.valuePanel = new System.Windows.Forms.Panel();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Location = new System.Drawing.Point(135, 198);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles) ((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(216, 198);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 1;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // keyPanel
+      // 
+      this.keyPanel.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.keyPanel.AutoScroll = true;
+      this.keyPanel.Location = new System.Drawing.Point(15, 31);
+      this.keyPanel.Name = "keyPanel";
+      this.keyPanel.Size = new System.Drawing.Size(276, 39);
+      this.keyPanel.TabIndex = 2;
+      // 
+      // valuePanel
+      // 
+      this.valuePanel.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.valuePanel.AutoScroll = true;
+      this.valuePanel.Location = new System.Drawing.Point(9, 19);
+      this.valuePanel.Name = "valuePanel";
+      this.valuePanel.Size = new System.Drawing.Size(270, 80);
+      this.valuePanel.TabIndex = 3;
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.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.groupBox1.Controls.Add(this.valuePanel);
+      this.groupBox1.Location = new System.Drawing.Point(12, 82);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(283, 109);
+      this.groupBox1.TabIndex = 4;
+      this.groupBox1.TabStop = false;
+      this.groupBox1.Text = "Value: ";
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.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.groupBox2.Location = new System.Drawing.Point(12, 12);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(283, 64);
+      this.groupBox2.TabIndex = 5;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Key:";
+      // 
+      // EditKeyValueDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(301, 233);
+      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.keyPanel);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.Controls.Add(this.groupBox2);
+      this.Name = "EditKeyValueDialog";
+      this.Text = "KeyValuePair";
+      this.groupBox1.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Panel keyPanel;
+    private System.Windows.Forms.Panel valuePanel;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.GroupBox groupBox2;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/EditKeyValueDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/HeuristicLab.Data.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/HeuristicLab.Data.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/HeuristicLab.Data.csproj	(revision 1270)
@@ -0,0 +1,314 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Data</RootNamespace>
+    <AssemblyName>HeuristicLab.Data-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <PublishUrl>http://localhost/HeuristicLab.Data/</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Web</InstallFrom>
+    <UpdateEnabled>true</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>true</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Data-3.2.XML</DocumentationFile>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Data-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ArrayDataBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ArrayDataBaseView.Designer.cs">
+      <DependentUpon>ArrayDataBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="BoolArrayData.cs" />
+    <Compile Include="BoolArrayDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BoolArrayDataView.Designer.cs">
+      <DependentUpon>BoolArrayDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="BoolData.cs" />
+    <Compile Include="BoolDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BoolDataView.Designer.cs">
+      <DependentUpon>BoolDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="BoolMatrixData.cs" />
+    <Compile Include="ArrayDataBase.cs" />
+    <Compile Include="BoolMatrixDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="BoolMatrixDataView.Designer.cs">
+      <DependentUpon>BoolMatrixDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ConstrainedItemList.cs" />
+    <Compile Include="ConstrainedItemListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ConstrainedItemListView.Designer.cs">
+      <DependentUpon>ConstrainedItemListView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ConstrainedObjectData.cs" />
+    <Compile Include="ConstrainedIntData.cs" />
+    <Compile Include="ConstrainedIntDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ConstrainedIntDataView.Designer.cs">
+      <DependentUpon>ConstrainedIntDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ConstrainedDoubleData.cs" />
+    <Compile Include="ConstrainedDoubleDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ConstrainedDoubleDataView.Designer.cs">
+      <DependentUpon>ConstrainedDoubleDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EditKeyValueDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="EditKeyValueDialog.designer.cs">
+      <DependentUpon>EditKeyValueDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemDictionaryView_T.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemDictionaryView_T.designer.cs">
+      <DependentUpon>ItemDictionaryView_T.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemDictionary_T.cs" />
+    <Compile Include="NullData.cs" />
+    <Compile Include="IntMatrixDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IntMatrixDataView.Designer.cs">
+      <DependentUpon>IntMatrixDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DoubleMatrixDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DoubleMatrixDataView.Designer.cs">
+      <DependentUpon>DoubleMatrixDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IntArrayDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IntArrayDataView.Designer.cs">
+      <DependentUpon>IntArrayDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DoubleArrayDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DoubleArrayDataView.Designer.cs">
+      <DependentUpon>DoubleArrayDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DoubleDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DoubleDataView.Designer.cs">
+      <DependentUpon>DoubleDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IntDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="IntDataView.Designer.cs">
+      <DependentUpon>IntDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="IObjectData.cs" />
+    <Compile Include="ItemList.cs" />
+    <Compile Include="ItemListView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemListView_T.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ItemListView_T.Designer.cs">
+      <DependentUpon>ItemListView_T.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ItemList_T.cs">
+    </Compile>
+    <Compile Include="MatrixDataBaseView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="MatrixDataBaseView.Designer.cs">
+      <DependentUpon>MatrixDataBaseView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ObjectData.cs" />
+    <Compile Include="StringDataView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StringDataView.Designer.cs">
+      <DependentUpon>StringDataView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DoubleArrayData.cs" />
+    <Compile Include="DoubleData.cs" />
+    <Compile Include="DoubleMatrixData.cs" />
+    <Compile Include="HeuristicLabDataPlugin.cs" />
+    <Compile Include="IntArrayData.cs" />
+    <Compile Include="IntData.cs" />
+    <Compile Include="IntMatrixData.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StringData.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ArrayDataBaseView.resx">
+      <DependentUpon>ArrayDataBaseView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="BoolDataView.resx">
+      <DependentUpon>BoolDataView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConstrainedIntDataView.resx">
+      <DependentUpon>ConstrainedIntDataView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConstrainedDoubleDataView.resx">
+      <DependentUpon>ConstrainedDoubleDataView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ConstrainedItemListView.resx">
+      <DependentUpon>ConstrainedItemListView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DoubleDataView.resx">
+      <DependentUpon>DoubleDataView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EditKeyValueDialog.resx">
+      <DependentUpon>EditKeyValueDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="IntDataView.resx">
+      <DependentUpon>IntDataView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ItemDictionaryView_T.resx">
+      <DependentUpon>ItemDictionaryView_T.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ItemListView_T.resx">
+      <DependentUpon>ItemListView_T.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MatrixDataBaseView.resx">
+      <DependentUpon>MatrixDataBaseView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="StringDataView.resx">
+      <DependentUpon>StringDataView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/HeuristicLabDataPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/HeuristicLabDataPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/HeuristicLabDataPlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Data plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Data-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Data-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabDataPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IObjectData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IObjectData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IObjectData.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Public interface to represent basic data types
+  /// </summary>
+  public interface IObjectData : IItem, IComparable {
+    /// <summary>
+    /// Gets or sets the value of the object.
+    /// </summary>
+    object Data { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayData.cs	(revision 1270)
@@ -0,0 +1,117 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The representation of an array of integer values.
+  /// </summary>
+  public class IntArrayData : ArrayDataBase {
+    /// <summary>
+    /// Gets or sets the int elements of the array.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase.Data"/> of base class <see cref="ArrayDataBase"/>. 
+    /// No own data storage present.</remarks>
+    public new int[] Data {
+      get { return (int[])base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntArrayData"/>.
+    /// </summary>
+    public IntArrayData() {
+      Data = new int[0];
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntArrayData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The array of integers to represent.</param>
+    public IntArrayData(int[] data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a enw instance of <see cref="IntArrayDataView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="IntArrayDataView"/>.</returns>
+    public override IView CreateView() {
+      return new IntArrayDataView(this);
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The int elements of the array are saved in the node's inner text as string, 
+    /// each element, whose format depends on the locale culture info, separated by a semicolon.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"></see>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = ToString(CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted int array from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The int elemets of the array must be saved in the inner text of the node as string, 
+    /// each element separated by a semicolon and formatted according to the locale culture info and 
+    /// its number format (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"></see> where the instance is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      if (!node.InnerText.Equals("")) {
+        string[] tokens = node.InnerText.Split(';');
+        int[] data = new int[tokens.Length];
+        for (int i = 0; i < data.Length; i++)
+          data[i] = int.Parse(tokens[i], CultureInfo.InvariantCulture.NumberFormat);
+        Data = data;
+      }
+    }
+
+    /// <summary>
+    /// The string representation of the array, formatted according to the given <paramref name="format"/>.
+    /// </summary>
+    /// <param name="format">The <see cref="NumberFormatInfo"></see> the single int values 
+    /// should be formatted accordingly.</param>
+    /// <returns>The elements of the array as string, each element separated by a semicolon 
+    /// and formatted according to the parameter <paramref name="format"/>.</returns>
+    private string ToString(NumberFormatInfo format) {
+      StringBuilder builder = new StringBuilder();
+      for (int i = 0; i < Data.Length; i++) {
+        builder.Append(";");
+        builder.Append(Data[i].ToString(format));
+      }
+      if (builder.Length > 0) builder.Remove(0, 1);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class IntArrayDataView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntArrayDataView.cs	(revision 1270)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="IntArrayData"/>, 
+  /// symbolizing an array of int values.
+  /// </summary>
+  public partial class IntArrayDataView : ArrayDataBaseView {
+    /// <summary>
+    /// Gets or set the int array to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase"/> of base class
+    /// <see cref="ArrayDataBaseView"/>. No own data storage present.</remarks>
+    public IntArrayData IntArrayData {
+      get { return (IntArrayData)base.ArrayDataBase; }
+      set { base.ArrayDataBase = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="IntArrayDataView"/>.
+    /// </summary>
+    public IntArrayDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="IntArrayDataView"/> with the given
+    /// <paramref name="intArrayData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="intArrayData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="intArrayData">The int array to represent visually.</param>
+    public IntArrayDataView(IntArrayData intArrayData)
+      : this() {
+      IntArrayData = intArrayData;
+    }
+
+    /// <summary>
+    /// Subsitutes an element at the given 
+    /// <paramref name="index"/> with the given <paramref name="element"/>.
+    /// </summary>
+    /// <param name="index">The position of the element to substitute.</param>
+    /// <param name="element">The element to insert.</param>
+    protected override void SetArrayElement(int index, string element) {
+      int result;
+      int.TryParse(element, out result);
+
+      IntArrayData.Data[index] = result;
+    }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="element"/> can be converted into a bool value.
+    /// </summary>
+    /// <param name="element">The element to check.</param>
+    /// <returns><c>true</c> if the <paramref name="element"/> could be converted,
+    /// <c>false</c> otherwise.</returns>
+    protected override bool ValidateData(string element) {
+      int result;
+      return element != null && int.TryParse(element, out result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntData.cs	(revision 1270)
@@ -0,0 +1,106 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The representation of an int value.
+  /// </summary>
+  public class IntData : ObjectData {
+    /// <summary>
+    /// Gets or sets the int value.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/> of base class <see cref="ObjectData"/>. 
+    /// No own data storage present.</remarks>
+    public new int Data {
+      get { return (int)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntData"/> with default value <c>0</c>.
+    /// </summary>
+    public IntData() {
+      Data = 0;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntData"/>.
+    /// </summary>
+    /// <param name="data">The int value the current instance should represent.</param>
+    public IntData(int data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of the class <see cref="IntDataView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="IntDataView"/>.</returns>
+    public override IView CreateView() {
+      return new IntDataView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance. 
+    /// </summary>
+    /// <remarks>Adds the cloned instance to the dictionary <paramref name="clonedObjects"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="IntData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      IntData clone = new IntData();
+      clonedObjects.Add(Guid, clone);
+      clone.Data = Data;
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The int value is saved as string in the node's inner text, 
+    /// formatted according to the local culture info and its number format.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects.(Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = Data.ToString(CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+    /// <summary>
+    ///  Loads the persisted int value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The int value must be saved in the node's inner text as a string and 
+    /// formatted according to the locale culture info and 
+    /// its number format (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the int is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Data = int.Parse(node.InnerText, CultureInfo.InvariantCulture.NumberFormat);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class IntDataView {
+    /// <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.dataTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // dataTextBox
+      // 
+      this.dataTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTextBox.Location = new System.Drawing.Point(0, 0);
+      this.dataTextBox.Name = "dataTextBox";
+      this.dataTextBox.Size = new System.Drawing.Size(265, 20);
+      this.dataTextBox.TabIndex = 1;
+      this.dataTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.dataTextBox_Validating);
+      // 
+      // IntDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataTextBox);
+      this.Name = "IntDataView";
+      this.Size = new System.Drawing.Size(265, 26);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox dataTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.cs	(revision 1270)
@@ -0,0 +1,110 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="IntData"/>, symbolizing an int value.
+  /// </summary>
+  public partial class IntDataView : ViewBase {
+    /// <summary>
+    /// Gets or set the int value to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public IntData IntData {
+      get { return (IntData)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="IntDataView"/>.
+    /// </summary>
+    public IntDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="IntDataView"/> with the 
+    /// given <paramref name="intData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="intData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="intData">The integer value to represent visually.</param>
+    public IntDataView(IntData intData)
+      : this() {
+      IntData = intData;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="IntData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      IntData.Changed -= new EventHandler(IntData_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="IntData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      IntData.Changed += new EventHandler(IntData_Changed);
+    }
+
+    /// <summary>
+    /// Updates the controls with the latest int value.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (IntData == null) {
+        dataTextBox.Enabled = false;
+      } else {
+        dataTextBox.Enabled = true;
+        dataTextBox.Text = IntData.ToString();
+      }
+    }
+
+    private void dataTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        IntData.Data = int.Parse(dataTextBox.Text);
+      }
+      catch (Exception) {
+        dataTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void IntData_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntDataView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixData.cs	(revision 1270)
@@ -0,0 +1,142 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Globalization;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A two-dimensional matrix of integer values.
+  /// </summary>
+  public class IntMatrixData : ArrayDataBase {
+    /// <summary>
+    /// Gets or sets the int values of the matrix.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase.Data"/> of base class <see cref="ArrayDataBase"/>. 
+    /// No own data storage present.</remarks>
+    public new int[,] Data {
+      get { return (int[,])base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntMatrixData"/>.
+    /// </summary>
+    public IntMatrixData() {
+      Data = new int[1, 1];
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntMatrixData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="data"/> is not copied!</note>
+    /// </summary>
+    /// <param name="data">The two-dimensional int matrix the instance should represent.</param>
+    public IntMatrixData(int[,] data) {
+      Data = data;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="IntMatrixDataView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="IntMatrixDataView"/>.</returns>
+    public override IView CreateView() {
+      return new IntMatrixDataView(this);
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The dimensions of the matrix are saved as attributes (<c>Dimension1</c>,<c>Dimension2</c>),
+    /// formatted according to the local culture info and its number format.<br/>
+    /// The elements of the matrix are saved as string in the node's inner text, 
+    /// each element separated by a semicolon, all line by line, formatted according to 
+    /// the local number format.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute dim1 = document.CreateAttribute("Dimension1");
+      dim1.Value = Data.GetLength(0).ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim1);
+      XmlAttribute dim2 = document.CreateAttribute("Dimension2");
+      dim2.Value = Data.GetLength(1).ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim2);
+      node.InnerText = ToString(CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted int matrix from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The dimensions of the matrix must be saved as Attributes 
+    /// (<c>Dimension1</c>, <c>Dimension2</c>), formatted in the local number format. <br/>
+    /// The elements of the matrix must be saved in the node's inner text as string, 
+    /// each element separated by a semicolon, line by line, formatted according to 
+    /// the local number format (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      int dim1 = int.Parse(node.Attributes["Dimension1"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      int dim2 = int.Parse(node.Attributes["Dimension2"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      string[] tokens = node.InnerText.Split(';');
+      int[,] data = new int[dim1, dim2];
+      for (int i = 0; i < dim1; i++) {
+        for (int j = 0; j < dim2; j++) {
+          data[i, j] = int.Parse(tokens[i * dim2 + j], CultureInfo.InvariantCulture.NumberFormat);
+        }
+      }
+      Data = data;
+    }
+
+    /// <summary>
+    /// The string representation of the matrix.
+    /// </summary> 
+    /// <returns>The elements of the matrix as a string, line by line, each element separated by a 
+    /// semicolon and formatted according to the local number format.</returns>
+    public override string ToString() {
+      return ToString(CultureInfo.CurrentCulture.NumberFormat);
+    }
+
+    /// <summary>
+    /// The string representation of the matrix, considering a specified <paramref name="format"/>.
+    /// </summary>
+    /// <param name="format">The <see cref="NumberFormatInfo"/> the int values are formatted accordingly.</param>
+    /// <returns>The elements of the matrix as a string, line by line, each element separated by a 
+    /// semicolon and formatted according to the specified <paramref name="format"/>.</returns>
+    private string ToString(NumberFormatInfo format) {
+      StringBuilder builder = new StringBuilder();
+      for (int i = 0; i < Data.GetLength(0); i++) {
+        for (int j = 0; j < Data.GetLength(1); j++) {
+          builder.Append(";");
+          builder.Append(Data[i, j].ToString(format));
+        }
+      }
+      if (builder.Length > 0) builder.Remove(0, 1);
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class IntMatrixDataView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/IntMatrixDataView.cs	(revision 1270)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="IntMatrixData"/>, symbolizing a two-dimensional
+  /// matrix of int values.
+  /// </summary>
+  public partial class IntMatrixDataView : MatrixDataBaseView {
+    /// <summary>
+    /// Gets or set the int matrix to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ArrayDataBase"/> of base class 
+    /// <see cref="MatrixDataBaseView"/>. No own data storage present.</remarks>
+    public IntMatrixData IntMatrixData {
+      get { return (IntMatrixData)base.ArrayDataBase; }
+      set { base.ArrayDataBase = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="IntMatrixDataView"/>.
+    /// </summary>
+    public IntMatrixDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="IntMatrixDataView"/> with the given
+    /// <paramref name="intMatrixData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="intMatrixData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="intMatrixData">The matrix of integers to represent visually.</param>
+    public IntMatrixDataView(IntMatrixData intMatrixData)
+      : this() {
+      IntMatrixData = intMatrixData;
+    }
+
+    /// <summary>
+    /// Subsitutes an element in the given <paramref name="row"/> and the given 
+    /// <paramref name="column"/> with the given <paramref name="element"/>.
+    /// </summary>
+    /// <param name="row">The row of the element to substitute.</param>
+    /// <param name="column">The column of the element to substitute.</param>
+    /// <param name="element">The element to insert.</param>
+    protected override void SetArrayElement(int row, int column, string element) {
+      int result;
+      int.TryParse(element, out result);
+
+      IntMatrixData.Data[row, column] = result;
+    }
+
+    /// <summary>
+    /// Checks whether the given <paramref name="element"/> can be converted to an int value.
+    /// </summary>
+    /// <param name="element">The element to check.</param>
+    /// <returns><c>true</c> if the <paramref name="element"/> could be converted,
+    /// <c>false</c> otherwise.</returns>
+    protected override bool ValidateData(string element) {
+      int result;
+      return element != null && int.TryParse(element, out result);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.cs	(revision 1270)
@@ -0,0 +1,215 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="HeuristicLab.Data.ItemDictionary&lt;K,V&gt;"/>.
+  /// </summary>
+  /// <typeparam name="K">The type of the keys of the dictionary.</typeparam>
+  /// <typeparam name="V">The type of the values of the dictionary.</typeparam>
+  public partial class ItemDictionaryView<K, V> : ViewBase
+    where K : IItem
+    where V : IItem {
+
+    private EditKeyValueDialog editKeyValueDialog;
+
+    /// <summary>
+    /// Gets or sets the dictionary to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public ItemDictionary<K, V> ItemDictionary {
+      get { return (ItemDictionary<K, V>) Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Creates a new list view item with the given <paramref name="key"/> and <paramref name="value"/>.
+    /// </summary>
+    /// <param name="key">The key to show in the list item.</param>
+    /// <param name="value">The value to show in the list item.</param>
+    /// <returns>The created list item as <see cref="ListViewItem"/>.</returns>
+    private ListViewItem CreateListViewItem(K key, V value) {
+      ListViewItem item = new ListViewItem(key.ToString());
+      item.Name = key.ToString();
+      item.SubItems.Add(value.ToString());
+      item.SubItems[0].Tag = key;
+      item.SubItems[1].Tag = value;
+      return item;
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ItemDictionaryView&lt;K,V&gt;"/>.
+    /// </summary>
+    public ItemDictionaryView() {
+      InitializeComponent();
+      listView.View = View.Details;
+      listView.Columns[0].Text = "Key";
+      listView.Columns[1].Text = "Value";
+      valueTypeTextBox.Text = typeof(V).ToString();
+      keyTypeTextBox.Text = typeof(K).ToString();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ItemDictionaryView&lt;K,V&gt;"/> with the given
+    /// <paramref name="dictionary"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="dictionary"/> is not copied!</note>
+    /// </summary>
+    /// <param name="dictionary">The dictionary to represent visually.</param>
+    public ItemDictionaryView(ItemDictionary<K, V> dictionary)
+      : this() {
+      ItemDictionary = dictionary;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying 
+    /// <see cref="HeuristicLab.Data.ItemDictionary&lt;K,V&gt;"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ItemDictionary.ItemAdded -= new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted);
+      ItemDictionary.ItemRemoved -= new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved);
+      ItemDictionary.Cleared -= new EventHandler(ItemDictionary_Cleared);
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="HeuristicLab.Data.ItemDictionary&lt;K,V&gt;"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ItemDictionary.ItemAdded += new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted);
+      ItemDictionary.ItemRemoved += new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved);
+      ItemDictionary.Cleared += new EventHandler(ItemDictionary_Cleared);
+    }
+
+    private void listView_SelectedIndexChanged(object sender, EventArgs e) {
+      if (detailsPanel.Controls.Count > 0)
+        detailsPanel.Controls[0].Dispose();
+      if (keyPanel.Controls.Count > 0)
+        keyPanel.Controls[0].Dispose();
+      detailsPanel.Controls.Clear();
+      keyPanel.Controls.Clear();
+      detailsPanel.Enabled = false;
+      keyPanel.Enabled = false;
+      removeButton.Enabled = false;
+      if (listView.SelectedItems.Count > 0) {
+        removeButton.Enabled = true;
+      }
+      if (listView.SelectedItems.Count == 1) {
+        K key = (K) listView.SelectedItems[0].SubItems[0].Tag;
+        V data = (V) listView.SelectedItems[0].SubItems[1].Tag;
+        Control keyView = (Control) key.CreateView();
+        Control dataView = (Control) data.CreateView();
+        keyPanel.Controls.Add(keyView);
+        detailsPanel.Controls.Add(dataView);
+        detailsPanel.Enabled = true;
+      }
+      keyPanel.Enabled = false;
+    }
+
+    #region Item and ItemDictionary Events
+    private void ItemDictionary_ItemInserted(object sender, KeyValueEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemInserted), sender, e);
+      else {
+        ListViewItem item = CreateListViewItem((K) e.Key, (V) e.Value);
+        listView.Items.Insert(listView.Items.Count, item);
+        item.Name = e.Key.ToString();
+        e.Value.Changed += new EventHandler(Item_Changed);
+        e.Key.Changed += new EventHandler(Item_Changed);
+      }
+    }
+
+    private void ItemDictionary_ItemRemoved(object sender, KeyValueEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler<KeyValueEventArgs>(ItemDictionary_ItemRemoved), sender, e);
+      else {
+        int index = listView.Items.IndexOfKey(e.Key.ToString());
+        listView.Items.RemoveAt(index);
+        e.Key.Changed -= new EventHandler(Item_Changed);
+        e.Value.Changed += new EventHandler(Item_Changed);
+      }
+    }
+
+    private void ItemDictionary_Cleared(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void Item_Changed(object sender, EventArgs e) {
+      if (InvokeRequired)
+        Invoke(new EventHandler(Item_Changed), sender, e);
+      else {
+        IItem data = (IItem) sender;
+        foreach (ListViewItem item in listView.Items) {
+          if (item.SubItems[0].Tag == data) {
+            item.SubItems[0].Text = data.ToString();
+            item.Name = data.ToString();
+          } else if (item.SubItems[1].Tag == data) {
+            item.SubItems[1].Text = data.ToString();
+          }
+        }
+      }
+    }
+    #endregion
+
+    #region Update Controls
+    /// <summary>
+    /// Updates the controls with the latest elements of the dictionary.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsPanel.Controls.Clear();
+      keyPanel.Controls.Clear();
+      detailsPanel.Enabled = false;
+      keyPanel.Enabled = false;
+      removeButton.Enabled = false;
+      if (ItemDictionary != null) {
+        foreach (ListViewItem item in listView.Items) {
+          ((IItem) item.SubItems[0]).Changed -= new EventHandler(Item_Changed);
+          ((IItem) item.SubItems[1]).Changed -= new EventHandler(Item_Changed);
+        }
+        listView.Items.Clear();
+        foreach (KeyValuePair<K, V> data in ItemDictionary) {
+          ListViewItem item = CreateListViewItem(data.Key, data.Value);
+          listView.Items.Add(item);
+          data.Key.Changed += new EventHandler(Item_Changed);
+          data.Value.Changed += new EventHandler(Item_Changed);
+        }
+        addButton.Enabled = true; 
+      } else {
+        addButton.Enabled = false; 
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      editKeyValueDialog = new EditKeyValueDialog(typeof(K), typeof(V));
+      if (editKeyValueDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          if (!ItemDictionary.ContainsKey((K) editKeyValueDialog.Key)) {
+            ItemDictionary.Add((K) editKeyValueDialog.Key, (V) editKeyValueDialog.Value);
+          }
+        } catch (Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+    }
+
+    private void removeButton_Click(object sender, EventArgs e) {
+      while (listView.SelectedIndices.Count > 0)
+        ItemDictionary.Remove((K) listView.SelectedItems[0].SubItems[0].Tag);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.designer.cs	(revision 1270)
@@ -0,0 +1,210 @@
+﻿namespace HeuristicLab.Data {
+  partial class ItemDictionaryView<K, V> {
+    /// <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.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.listView = new System.Windows.Forms.ListView();
+      this.keyHeader = new System.Windows.Forms.ColumnHeader();
+      this.valueHeader = new System.Windows.Forms.ColumnHeader();
+      this.label1 = new System.Windows.Forms.Label();
+      this.label2 = new System.Windows.Forms.Label();
+      this.keyTypeTextBox = new System.Windows.Forms.TextBox();
+      this.valueTypeTextBox = new System.Windows.Forms.TextBox();
+      this.detailsPanel = new System.Windows.Forms.Panel();
+      this.keyPanel = new System.Windows.Forms.Panel();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.groupBox3 = new System.Windows.Forms.GroupBox();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.groupBox1.Controls.Add(this.removeButton);
+      this.groupBox1.Controls.Add(this.addButton);
+      this.groupBox1.Controls.Add(this.listView);
+      this.groupBox1.Location = new System.Drawing.Point(5, 70);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(170, 175);
+      this.groupBox1.TabIndex = 0;
+      this.groupBox1.TabStop = false;
+      this.groupBox1.Text = "KeyValuePairs:";
+      // 
+      // removeButton
+      // 
+      this.removeButton.Location = new System.Drawing.Point(89, 145);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(75, 23);
+      this.removeButton.TabIndex = 2;
+      this.removeButton.Text = "&Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Location = new System.Drawing.Point(8, 145);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(75, 23);
+      this.addButton.TabIndex = 1;
+      this.addButton.Text = "&Add...";
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // listView
+      // 
+      this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.keyHeader,
+            this.valueHeader});
+      this.listView.Location = new System.Drawing.Point(7, 19);
+      this.listView.Name = "listView";
+      this.listView.Size = new System.Drawing.Size(157, 120);
+      this.listView.TabIndex = 0;
+      this.listView.UseCompatibleStateImageBehavior = false;
+      this.listView.SelectedIndexChanged += new System.EventHandler(this.listView_SelectedIndexChanged);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(11, 12);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(52, 13);
+      this.label1.TabIndex = 1;
+      this.label1.Text = "KeyType:";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(11, 40);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(61, 13);
+      this.label2.TabIndex = 2;
+      this.label2.Text = "ValueType:";
+      // 
+      // keyTypeTextBox
+      // 
+      this.keyTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.keyTypeTextBox.BackColor = System.Drawing.SystemColors.ControlLight;
+      this.keyTypeTextBox.Location = new System.Drawing.Point(73, 5);
+      this.keyTypeTextBox.Name = "keyTypeTextBox";
+      this.keyTypeTextBox.Size = new System.Drawing.Size(301, 20);
+      this.keyTypeTextBox.TabIndex = 3;
+      // 
+      // valueTypeTextBox
+      // 
+      this.valueTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.valueTypeTextBox.BackColor = System.Drawing.SystemColors.ControlLight;
+      this.valueTypeTextBox.Location = new System.Drawing.Point(73, 33);
+      this.valueTypeTextBox.Name = "valueTypeTextBox";
+      this.valueTypeTextBox.Size = new System.Drawing.Size(301, 20);
+      this.valueTypeTextBox.TabIndex = 4;
+      // 
+      // detailsPanel
+      // 
+      this.detailsPanel.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.detailsPanel.AutoScroll = true;
+      this.detailsPanel.ForeColor = System.Drawing.SystemColors.ControlText;
+      this.detailsPanel.Location = new System.Drawing.Point(187, 164);
+      this.detailsPanel.Name = "detailsPanel";
+      this.detailsPanel.Size = new System.Drawing.Size(187, 76);
+      this.detailsPanel.TabIndex = 9;
+      // 
+      // keyPanel
+      // 
+      this.keyPanel.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.keyPanel.AutoScroll = true;
+      this.keyPanel.ForeColor = System.Drawing.SystemColors.ControlText;
+      this.keyPanel.Location = new System.Drawing.Point(187, 90);
+      this.keyPanel.Name = "keyPanel";
+      this.keyPanel.Size = new System.Drawing.Size(187, 43);
+      this.keyPanel.TabIndex = 0;
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBox2.Location = new System.Drawing.Point(180, 70);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(198, 69);
+      this.groupBox2.TabIndex = 10;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Key:";
+      // 
+      // groupBox3
+      // 
+      this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles) (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.groupBox3.Location = new System.Drawing.Point(181, 145);
+      this.groupBox3.Name = "groupBox3";
+      this.groupBox3.Size = new System.Drawing.Size(197, 100);
+      this.groupBox3.TabIndex = 11;
+      this.groupBox3.TabStop = false;
+      this.groupBox3.Text = "Value:";
+      // 
+      // ItemDictionaryView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.keyPanel);
+      this.Controls.Add(this.detailsPanel);
+      this.Controls.Add(this.valueTypeTextBox);
+      this.Controls.Add(this.keyTypeTextBox);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.groupBox2);
+      this.Controls.Add(this.groupBox3);
+      this.Name = "ItemDictionaryView";
+      this.Size = new System.Drawing.Size(381, 253);
+      this.groupBox1.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.Button removeButton;
+    private System.Windows.Forms.Button addButton;
+    private System.Windows.Forms.ListView listView;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.TextBox keyTypeTextBox;
+    private System.Windows.Forms.TextBox valueTypeTextBox;
+    private System.Windows.Forms.ColumnHeader keyHeader;
+    private System.Windows.Forms.ColumnHeader valueHeader;
+    private System.Windows.Forms.Panel detailsPanel;
+    private System.Windows.Forms.Panel keyPanel;
+    private System.Windows.Forms.GroupBox groupBox2;
+    private System.Windows.Forms.GroupBox groupBox3;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionaryView_T.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionary_T.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionary_T.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemDictionary_T.cs	(revision 1270)
@@ -0,0 +1,352 @@
+﻿using System;
+using System.Collections; 
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A dictionary having key-value pairs of the type <see cref="IItem"/>.
+  /// </summary>
+  /// <typeparam name="K">The type of the keys, which must implement the interface <see cref="IItem"/>.</typeparam>
+  /// <typeparam name="V">The type of the values, which must imlement the interface <see cref="IItem"/>.</typeparam>
+  public class ItemDictionary<K,V> : ItemBase, IDictionary<K,V> 
+    where K : IItem
+    where V : IItem{
+    private Dictionary<K, V> dict;
+
+    /// <summary>
+    /// Gets the dictionary of key-value pairs.
+    /// </summary>
+    public Dictionary<K, V> Dictionary {
+      get { return dict; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ItemDictionary&lt;TKey,TValue&gt;"/>.
+    /// </summary>
+    /// <remarks>Creates a new <see cref="Dictionary"/> 
+    /// having <see cref="IItem"/> as type of keys and values 
+    /// and a new <see cref="IItemKeyComparer&lt;T&gt;"/> as <see cref="IEqualityComparer"/>.</remarks>
+    public ItemDictionary() {
+      dict = new Dictionary<K, V>(new IItemKeyComparer<K>());
+    }
+
+    #region ItemBase Members
+    /// <summary>
+    /// Creates a new instance of <see cref="ItemDictionaryView&lt;K,V&gt;"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ItemDictionaryView&lt;K,V&gt;"/>.</returns>
+    public override IView CreateView() {
+      return new ItemDictionaryView<K,V>(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance and adds it to the dictionary <paramref name="clonedObjects"/>.
+    /// </summary>
+    /// <remarks>Also the keys and values in the dictionary are cloned and saved to the dictionary <paramref name="clonedObjects"/>,
+    /// when they are not already contained (deep copy).</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="ItemDictionary&lt;K,V&gt;"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ItemDictionary<K,V> clone = new ItemDictionary<K,V>();
+      clonedObjects.Add(Guid, clone);
+      foreach (KeyValuePair<K, V> item in dict) {
+        clone.dict.Add((K) Auxiliary.Clone(item.Key, clonedObjects), (V) Auxiliary.Clone(item.Value, clonedObjects));
+      }
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Every key-value pair is saved as new child node with the tag name "KeyValuePair".<br/>
+    /// In the child node the key is saved as a new child node with the tag name "Key".<br/>
+    /// The value is also saved as new child node with the tag name "Val".
+    /// </remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      foreach (KeyValuePair<K, V> item in dict) {
+        XmlNode keyNode = PersistenceManager.Persist("Key", item.Key, document, persistedObjects);
+        XmlNode valueNode = PersistenceManager.Persist("Val", item.Value, document, persistedObjects); 
+        XmlNode pairNode = document.CreateNode(XmlNodeType.Element, "KeyValuePair", null); 
+        pairNode.AppendChild(keyNode); 
+        pairNode.AppendChild(valueNode); 
+        node.AppendChild(pairNode); 
+      }
+      return node; 
+    }
+
+    /// <summary>
+    /// Loads the persisted matrix from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>All key-value pairs must be saved as child nodes of the node. <br/>
+    /// Every child node has to contain two child nodes itself, one for the key, having the tag name "Key",
+    /// and one for the value, having the tag name "Val" (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      for (int i = 0; i < node.ChildNodes.Count; i++) {
+        K key = (K) PersistenceManager.Restore(node.ChildNodes[i].SelectSingleNode("Key"), restoredObjects);
+        V val = (V) PersistenceManager.Restore(node.ChildNodes[i].SelectSingleNode("Val"), restoredObjects);
+        dict[key] = val; 
+      }
+    }
+
+    /// <summary>
+    /// The string representation of the dictionary
+    /// </summary>
+    /// <returns>The elements of the dictionary as string, each key-value pair in the format 
+    /// <c>Key:Value</c>, separated by a semicolon. <br/>
+    /// If the dictionary contains no entries, "Empty Dictionary" is returned.</returns>
+    public override string ToString() {
+      if (dict.Count > 0) {
+        StringBuilder builder = new StringBuilder();
+        foreach (KeyValuePair<K, V> item in dict) {
+          builder.Append(item.Key.ToString());
+          builder.Append(":");
+          builder.Append(item.Value.ToString());
+          builder.Append("; ");
+        }
+        return builder.ToString();
+      } else {
+        return "Empty Dictionary";
+      }
+    }
+    #endregion
+
+    #region IDictionary<K,V> Members
+
+    ///// <summary>
+    ///// Adds a new key value pair to the dictionary.
+    ///// </summary>
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;K,V&gt;.Add"/>
+    /// <remarks>Calls <see cref="OnItemAdded"/>.</remarks>
+    ///// <param name="key">The key to add.</param>
+    ///// <param name="value">The value to add.</param>
+    public void Add(K key, V value) {
+      dict.Add(key, value);
+      OnItemAdded(key, value);
+    }
+
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;.ContainsKey"/>
+    public bool ContainsKey(K key) {
+      return dict.ContainsKey(key);
+    }
+
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;.Keys"/>
+    public ICollection<K> Keys {
+      get { return dict.Keys; }
+    }
+
+    /// <summary>
+    /// Removes a key-value pair having the specified <paramref name="key"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemRemoved"/>.</remarks>
+    /// <param name="key">The key of the key-value pair, which should be removed.</param>
+    /// <returns><c>true</c> if the key was found and successfully removed, 
+    /// <c>false</c> if the key was not found.</returns>
+    public bool Remove(K key) {
+      V value = dict[key]; 
+      bool removed = dict.Remove(key);
+      OnItemRemoved(key, value); 
+      return removed; 
+    }
+
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;K,V&gt;.TryGetValue"/>
+    public bool TryGetValue(K key, out V value) {
+      return dict.TryGetValue(key, out value);
+    }
+
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;TKey,TValue&gt;.Values"/>
+    public ICollection<V> Values {
+      get { return dict.Values; }
+    }
+
+    /// <summary>
+    /// Gets or sets the value of a specified <paramref name="key"/>.
+    /// </summary>
+    /// <param name="key">The key of the value which should be received or changed.</param>
+    /// <returns>The value of the <paramref name="key"/>.</returns>
+    public V this[K key] {
+      get { return dict[key]; }
+      set { dict[key] = value; }
+    }
+
+    #endregion
+
+    #region ICollection<KeyValuePair<K,V>> Members
+
+    /// <summary>
+    /// Adds a key-value pair to the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemAdded"/>.</remarks>
+    /// <param name="item">The key-value pair to add.</param>
+    public void Add(KeyValuePair<K, V> item) {
+      dict.Add(item.Key, item.Value);
+      OnItemAdded(item.Key, item.Value); 
+    }
+
+    ///// <summary>
+    ///// Empties the dictionary.
+    ///// </summary>
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;K,V&gt;.Clear"/>
+    /// <remarks>Calls <see cref="OnCleared"/>.</remarks>
+    public void Clear() {
+      dict.Clear();
+      OnCleared(); 
+    }
+
+    /// <summary>
+    /// Checks whether the specified key-value pair exists in the current instance of the dictionary.
+    /// </summary>
+    /// <param name="item">The key-value pair to check.</param>
+    /// <returns><c>true</c> if both, the key and the value exist in the dictionary, 
+    /// <c>false</c> otherwise.</returns>
+    public bool Contains(KeyValuePair<K, V> item) {
+      return (dict.ContainsKey(item.Key) && dict[item.Key].Equals(item.Value));
+    }
+
+    /// <summary>
+    /// TODO
+    /// </summary>
+    /// <param name="array"></param>
+    /// <param name="arrayIndex"></param>
+    public void CopyTo(KeyValuePair<K, V>[] array, int arrayIndex) {
+      throw new NotImplementedException(); 
+    }
+
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;K,V&gt;.Count"/>
+    public int Count {
+      get { return dict.Count; }
+    }
+
+    /// <summary>
+    /// Checks whether the dictionary is read-only.
+    /// </summary>
+    /// <remarks>Always returns <c>false</c>.</remarks>
+    public bool IsReadOnly {
+      get { return false; }
+    }
+
+    /// <summary>
+    /// Removes the specified key-value pair.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnItemRemoved"/> when the removal was successful.</remarks>
+    /// <param name="item">The key-value pair to remove.</param>
+    /// <returns><c>true</c> if the removal was successful, <c>false</c> otherwise.</returns>
+    public bool Remove(KeyValuePair<K, V> item) {
+      bool removed = dict.Remove(item.Key);
+      if (removed) {
+        OnItemRemoved(item.Key, item.Value);
+      } 
+      return removed; 
+    }
+    #endregion
+
+    #region IEnumerable<KeyValuePair<K,V>> Members
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;K,V&gt;.GetEnumerator"/>
+    public IEnumerator<KeyValuePair<K, V>> GetEnumerator() {
+      return dict.GetEnumerator();
+    }
+    #endregion
+
+    #region IEnumerable Members
+    /// <inheritdoc cref="System.Collections.Generic.Dictionary&lt;K,V&gt;.GetEnumerator"/>
+    IEnumerator IEnumerable.GetEnumerator() {
+      return dict.GetEnumerator();
+    }
+    #endregion
+
+    #region Event Handler
+    /// <summary>
+    /// Occurs when a new item is added to the dictionary.
+    /// </summary>
+    public event EventHandler<KeyValueEventArgs> ItemAdded;
+    /// <summary>
+    /// Fires a new <c>ItemAdded</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    /// <param name="key">The key that was added.</param>
+    /// <param name="value">The value that was added.</param>
+    protected virtual void OnItemAdded(K key, V value) {
+      if (ItemAdded != null)
+        ItemAdded(this, new KeyValueEventArgs(key, value));
+      OnChanged();
+    }
+
+    /// <summary>
+    /// Occurs when an item is removed from the dictionary.
+    /// </summary>
+    public event EventHandler<KeyValueEventArgs> ItemRemoved;
+    /// <summary>
+    /// Fires a new <c>ItemRemoved</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    /// <param name="key">The key that was removed.</param>
+    /// <param name="value">The value that was removed</param>
+    protected virtual void OnItemRemoved(K key, V value) {
+      if (ItemRemoved != null)
+        ItemRemoved(this, new KeyValueEventArgs(key, value));
+      OnChanged();
+    }
+
+    /// <summary>
+    /// Occurs when the dictionary is emptied.
+    /// </summary>
+    public event EventHandler Cleared;
+    /// <summary>
+    /// Fires a new <c>Cleared</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    protected virtual void OnCleared() {
+      if (Cleared != null)
+        Cleared(this, new EventArgs());
+      OnChanged();
+    }
+    #endregion
+
+    #region IEqualityComparer
+    /// <summary>
+    /// Compares two keys with each other.
+    /// </summary>
+    /// <typeparam name="T">The type of the keys.</typeparam>
+    internal sealed class IItemKeyComparer<T> : IEqualityComparer<T>
+        where T : IItem {
+      /// <summary>
+      /// Checks whether two keys are equal to each other.
+      /// </summary>
+      /// <param name="x">Key number one.</param>
+      /// <param name="y">Key number two.</param>
+      /// <returns><c>true</c> if the two keys are the same, <c>false</c> otherwise.</returns>
+      public bool Equals(T x, T y) {
+        if (x is IComparable) {
+          return (((IComparable) x).CompareTo(y) == 0); 
+        }
+        if (y is IComparable) {
+          return (((IComparable) y).CompareTo(x) == 0); 
+        }
+        return x.Equals(y); 
+      }
+
+      /// <summary>
+      /// Serves as a hash function for a particular type.
+      /// </summary>
+      /// <param name="obj">The object where the hash code is searched for.</param>
+      /// <returns>A hash code for the given <paramref name="obj"/>.</returns>
+      public int GetHashCode(T obj) {
+        if (obj is IObjectData) {
+          return ((IObjectData) obj).Data.GetHashCode(); 
+        }
+        return obj.Guid.GetHashCode(); 
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemList.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemList.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemList.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Generic list of elements that implement the interface <see cref="IItem"/>.
+  /// </summary>
+  public class ItemList : ItemList<IItem> {
+    /// <summary>
+    /// Clones the current list and all its elements.
+    /// </summary>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="ItemList"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ItemList clone = new ItemList();
+      clonedObjects.Add(Guid, clone);
+      base.CloneElements(clone, clonedObjects);
+      return clone;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="ItemList"/>.
+  /// </summary>
+  public class ItemListView : ItemListView<IItem> {
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ItemListView"/>.
+    /// </summary>
+    public ItemListView() { }
+    /// <summary>
+    /// Initializes a new instnace of the class <see cref="ItemListView"/> with the given 
+    /// <paramref name="itemList"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="itemList"/> is not copied!</note>
+    /// </summary>
+    /// <param name="itemList">The list of items to represent.</param>
+    public ItemListView(ItemList itemList)
+      : this() {
+      ItemList = itemList;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.Designer.cs	(revision 1270)
@@ -0,0 +1,209 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  partial class ItemListView<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 (chooseItemDialog != null) chooseItemDialog.Dispose();
+      foreach (ListViewItem item in itemsListView.Items)
+        ((IItem)item.Tag).Changed -= new EventHandler(Item_Changed);
+      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.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.itemsGroupBox = new System.Windows.Forms.GroupBox();
+      this.removeButton = new System.Windows.Forms.Button();
+      this.addButton = new System.Windows.Forms.Button();
+      this.itemsListView = new System.Windows.Forms.ListView();
+      this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
+      this.detailsGroupBox = new System.Windows.Forms.GroupBox();
+      this.itemTypeLabel = new System.Windows.Forms.Label();
+      this.typeTextBox = new System.Windows.Forms.TextBox();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // 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.Enabled = false;
+      this.splitContainer.Location = new System.Drawing.Point(0, 27);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.itemsGroupBox);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.detailsGroupBox);
+      this.splitContainer.Size = new System.Drawing.Size(423, 246);
+      this.splitContainer.SplitterDistance = 198;
+      this.splitContainer.TabIndex = 2;
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Controls.Add(this.removeButton);
+      this.itemsGroupBox.Controls.Add(this.addButton);
+      this.itemsGroupBox.Controls.Add(this.itemsListView);
+      this.itemsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.itemsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.itemsGroupBox.Name = "itemsGroupBox";
+      this.itemsGroupBox.Size = new System.Drawing.Size(198, 246);
+      this.itemsGroupBox.TabIndex = 0;
+      this.itemsGroupBox.TabStop = false;
+      this.itemsGroupBox.Text = "&Items:";
+      // 
+      // removeButton
+      // 
+      this.removeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeButton.Location = new System.Drawing.Point(87, 217);
+      this.removeButton.Name = "removeButton";
+      this.removeButton.Size = new System.Drawing.Size(75, 23);
+      this.removeButton.TabIndex = 2;
+      this.removeButton.Text = "&Remove";
+      this.removeButton.UseVisualStyleBackColor = true;
+      this.removeButton.Click += new System.EventHandler(this.removeButton_Click);
+      // 
+      // addButton
+      // 
+      this.addButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addButton.Location = new System.Drawing.Point(6, 217);
+      this.addButton.Name = "addButton";
+      this.addButton.Size = new System.Drawing.Size(75, 23);
+      this.addButton.TabIndex = 1;
+      this.addButton.Text = "&Add...";
+      this.addButton.UseVisualStyleBackColor = true;
+      this.addButton.Click += new System.EventHandler(this.addButton_Click);
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.AllowDrop = true;
+      this.itemsListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.itemsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1});
+      this.itemsListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
+      this.itemsListView.HideSelection = false;
+      this.itemsListView.Location = new System.Drawing.Point(6, 19);
+      this.itemsListView.Name = "itemsListView";
+      this.itemsListView.Size = new System.Drawing.Size(186, 192);
+      this.itemsListView.TabIndex = 0;
+      this.itemsListView.UseCompatibleStateImageBehavior = false;
+      this.itemsListView.View = System.Windows.Forms.View.Details;
+      this.itemsListView.SelectedIndexChanged += new System.EventHandler(this.elementsListView_SelectedIndexChanged);
+      this.itemsListView.SizeChanged += new System.EventHandler(this.elementsListView_SizeChanged);
+      this.itemsListView.DragDrop += new System.Windows.Forms.DragEventHandler(this.elementsListView_DragDrop);
+      this.itemsListView.DragEnter += new System.Windows.Forms.DragEventHandler(this.elementsListView_DragEnter);
+      this.itemsListView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.elementsListView_KeyDown);
+      this.itemsListView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.elementsListView_ItemDrag);
+      this.itemsListView.DragOver += new System.Windows.Forms.DragEventHandler(this.elementsListView_DragOver);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.detailsGroupBox.Enabled = false;
+      this.detailsGroupBox.Location = new System.Drawing.Point(0, 0);
+      this.detailsGroupBox.Name = "detailsGroupBox";
+      this.detailsGroupBox.Size = new System.Drawing.Size(221, 246);
+      this.detailsGroupBox.TabIndex = 0;
+      this.detailsGroupBox.TabStop = false;
+      this.detailsGroupBox.Text = "&Details:";
+      // 
+      // itemTypeLabel
+      // 
+      this.itemTypeLabel.AutoSize = true;
+      this.itemTypeLabel.Location = new System.Drawing.Point(3, 3);
+      this.itemTypeLabel.Name = "itemTypeLabel";
+      this.itemTypeLabel.Size = new System.Drawing.Size(57, 13);
+      this.itemTypeLabel.TabIndex = 0;
+      this.itemTypeLabel.Text = "&Item Type:";
+      // 
+      // typeTextBox
+      // 
+      this.typeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.typeTextBox.Location = new System.Drawing.Point(66, 0);
+      this.typeTextBox.Name = "typeTextBox";
+      this.typeTextBox.ReadOnly = true;
+      this.typeTextBox.Size = new System.Drawing.Size(357, 20);
+      this.typeTextBox.TabIndex = 1;
+      // 
+      // ItemListView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.typeTextBox);
+      this.Controls.Add(this.itemTypeLabel);
+      this.Controls.Add(this.splitContainer);
+      this.Name = "ItemListView";
+      this.Size = new System.Drawing.Size(423, 273);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.GroupBox itemsGroupBox;
+    private System.Windows.Forms.GroupBox detailsGroupBox;
+    private System.Windows.Forms.Button removeButton;
+    private System.Windows.Forms.Button addButton;
+    private System.Windows.Forms.ListView itemsListView;
+    private System.Windows.Forms.ColumnHeader columnHeader1;
+    private Label itemTypeLabel;
+    private TextBox typeTextBox;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.cs	(revision 1270)
@@ -0,0 +1,263 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="HeuristicLab.Data.ItemList&lt;T&gt;"/>.
+  /// </summary>
+  /// <typeparam name="T">The type of the items in the list.</typeparam>
+  public partial class ItemListView<T> : ViewBase where T : IItem {
+    private ChooseItemDialog chooseItemDialog;
+
+    /// <summary>
+    /// Gets or sets the item list to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public ItemList<T> ItemList {
+      get { return (ItemList<T>)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="HeuristicLab.Data.ItemListView&lt;T&gt;"/>.
+    /// </summary>
+    public ItemListView() {
+      InitializeComponent();
+      itemsListView.Columns[0].Width = Math.Max(0, itemsListView.Width - 25);
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="HeuristicLab.Data.ItemListView&lt;T&gt;"/> with the given
+    /// <paramref name="itemList"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="itemList"/> is not copied!</note>
+    /// </summary>
+    /// <param name="itemList">The list of items to represent visually.</param>
+    public ItemListView(ItemList<T> itemList)
+      : this() {
+      ItemList = itemList;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="HeuristicLab.Data.ItemList&lt;T&gt;"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ItemList.ItemAdded -= new EventHandler<ItemIndexEventArgs>(ItemList_ItemInserted);
+      ItemList.ItemRemoved -= new EventHandler<ItemIndexEventArgs>(ItemList_ItemRemoved);
+      ItemList.Cleared -= new EventHandler(ItemList_Cleared);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="HeuristicLab.Data.ItemList&lt;T&gt;"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ItemList.ItemAdded += new EventHandler<ItemIndexEventArgs>(ItemList_ItemInserted);
+      ItemList.ItemRemoved += new EventHandler<ItemIndexEventArgs>(ItemList_ItemRemoved);
+      ItemList.Cleared += new EventHandler(ItemList_Cleared);
+    }
+
+    /// <summary>
+    /// Update all controls with the lastest elements in the list.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      removeButton.Enabled = false;
+      if(ItemList == null) {
+        typeTextBox.Text = "";
+        splitContainer.Enabled = false;
+      } else {
+        typeTextBox.Text = typeof(T).FullName;
+        splitContainer.Enabled = true;
+        foreach(ListViewItem item in itemsListView.Items) {
+          ((IItem)item.Tag).Changed -= new EventHandler(Item_Changed);
+        }
+        itemsListView.Items.Clear();
+        foreach(IItem data in ItemList) {
+          ListViewItem item = new ListViewItem();
+          item.Text = data.ToString();
+          item.Tag = data;
+          itemsListView.Items.Add(item);
+          data.Changed += new EventHandler(Item_Changed);
+        }
+      }
+    }
+
+    private void elementsListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(detailsGroupBox.Controls.Count > 0)
+        detailsGroupBox.Controls[0].Dispose();
+      detailsGroupBox.Controls.Clear();
+      detailsGroupBox.Enabled = false;
+      removeButton.Enabled = false;
+      if(itemsListView.SelectedItems.Count > 0) {
+        removeButton.Enabled = true;
+      }
+      if(itemsListView.SelectedItems.Count == 1) {
+        IItem data = (IItem)itemsListView.SelectedItems[0].Tag;
+        Control view = (Control)data.CreateView();
+        detailsGroupBox.Controls.Add(view);
+        view.Dock = DockStyle.Fill;
+        detailsGroupBox.Enabled = true;
+      }
+    }
+
+    #region Size Changed Events
+    private void elementsListView_SizeChanged(object sender, EventArgs e) {
+      if(itemsListView.Columns.Count > 0)
+        itemsListView.Columns[0].Width = Math.Max(0, itemsListView.Width - 25);
+    }
+    #endregion
+
+    #region Key Events
+    private void elementsListView_KeyDown(object sender, KeyEventArgs e) {
+      if(e.KeyCode == Keys.Delete) {
+        while(itemsListView.SelectedIndices.Count > 0)
+          ItemList.RemoveAt(itemsListView.SelectedIndices[0]);
+        e.Handled = true;
+      } else if((e.KeyCode == Keys.C) && (e.Modifiers == Keys.Control)) {
+        // copy contents of itemlist to clipboard
+        StringBuilder buffer = new StringBuilder();
+        for(int i = 0; i < itemsListView.Items.Count; i++) {
+          buffer.Append(itemsListView.Items[i].Text);
+          buffer.Append("\n");
+        }
+        Clipboard.SetText(buffer.ToString());
+        e.Handled = true;
+      }
+    }
+    #endregion
+
+    #region Button Events
+    private void addButton_Click(object sender, EventArgs e) {
+      if(chooseItemDialog == null) {
+        chooseItemDialog = new ChooseItemDialog(typeof(T));
+        chooseItemDialog.Caption = "Add Item";
+      }
+      if(chooseItemDialog.ShowDialog(this) == DialogResult.OK) {
+        try {
+          ItemList.Add((T)chooseItemDialog.Item);
+        } catch(Exception ex) {
+          Auxiliary.ShowErrorMessageBox(ex);
+        }
+      }
+    }
+    private void removeButton_Click(object sender, EventArgs e) {
+      while(itemsListView.SelectedIndices.Count > 0)
+        ItemList.RemoveAt(itemsListView.SelectedIndices[0]);
+    }
+    #endregion
+
+    #region Drag and Drop Events
+    private void elementsListView_ItemDrag(object sender, ItemDragEventArgs e) {
+      ListViewItem item = (ListViewItem)e.Item;
+      IItem data = (IItem)item.Tag;
+      DataObject dataObject = new DataObject();
+      dataObject.SetData("IItem", data);
+      dataObject.SetData("DragSource", itemsListView);
+      DoDragDrop(dataObject, DragDropEffects.Move);
+    }
+    private void elementsListView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if(e.Data.GetDataPresent("IItem")) {
+        Point p = itemsListView.PointToClient(new Point(e.X, e.Y));
+        ListViewItem item = itemsListView.GetItemAt(p.X, p.Y);
+        if(item != null)
+          e.Effect = DragDropEffects.Move;
+      }
+    }
+    private void elementsListView_DragOver(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.None;
+      if(e.Data.GetDataPresent("IItem")) {
+        Point p = itemsListView.PointToClient(new Point(e.X, e.Y));
+        ListViewItem item = itemsListView.GetItemAt(p.X, p.Y);
+        if(item != null)
+          e.Effect = DragDropEffects.Move;
+      }
+    }
+    private void elementsListView_DragDrop(object sender, DragEventArgs e) {
+      if(e.Effect != DragDropEffects.None) {
+        if(e.Data.GetDataPresent("IItem")) {
+          IItem data = (IItem)e.Data.GetData("IItem");
+          Point p = itemsListView.PointToClient(new Point(e.X, e.Y));
+          ListViewItem item = itemsListView.GetItemAt(p.X, p.Y);
+          if(item != null) {
+            int index = item.Index;
+            ItemList.Remove((T)data);
+            ItemList.Insert(index, (T)data);
+            itemsListView.SelectedIndices.Clear();
+            itemsListView.SelectedIndices.Add(index);
+          }
+        }
+      }
+    }
+    #endregion
+
+    #region Item and Item List Events
+    private void ItemList_ItemInserted(object sender, ItemIndexEventArgs e) {
+      if(InvokeRequired)
+        Invoke(new EventHandler<ItemIndexEventArgs>(ItemList_ItemInserted), sender, e);
+      else {
+        ListViewItem item = new ListViewItem();
+        item.Text = e.Item.ToString();
+        item.Tag = e.Item;
+        itemsListView.Items.Insert(e.Index, item);
+        e.Item.Changed += new EventHandler(Item_Changed);
+      }
+    }
+    private void ItemList_ItemRemoved(object sender, ItemIndexEventArgs e) {
+      if(InvokeRequired)
+        Invoke(new EventHandler<ItemIndexEventArgs>(ItemList_ItemRemoved), sender, e);
+      else {
+        itemsListView.Items.RemoveAt(e.Index);
+        e.Item.Changed -= new EventHandler(Item_Changed);
+      }
+    }
+    private void ItemList_Cleared(object sender, EventArgs e) {
+      Refresh();
+    }
+    private void Item_Changed(object sender, EventArgs e) {
+      if(InvokeRequired)
+        Invoke(new EventHandler(Item_Changed), sender, e);
+      else {
+        IItem data = (IItem)sender;
+        foreach(ListViewItem item in itemsListView.Items) {
+          if(item.Tag == data)
+            item.Text = data.ToString();
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemListView_T.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemList_T.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemList_T.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ItemList_T.cs	(revision 1270)
@@ -0,0 +1,400 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Represents a list of items where the items are of the type <typeparamref name="T"/>.
+  /// </summary>
+  /// <typeparam name="T">The type of the items in this list. <paramref name="T"/> must implement <see cref="IItem"/>.</typeparam>
+  public class ItemList<T> : ItemBase, IList<T> where T : IItem {
+    private List<T> list;
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="ItemList&lt;T&gt;"/>.
+    /// </summary>
+    public ItemList() {
+      list = new List<T>();
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ItemListView&lt;T&gt;"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ItemListView&lt;T&gt;"/>.</returns>
+    public override IView CreateView() {
+      return new ItemListView<T>(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>Saves the cloned instance in the dictionary <paramref name="clonedObjects"/>.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="ItemList&lt;T&gt;"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ItemList<T> clone = new ItemList<T>();
+      clonedObjects.Add(Guid, clone);
+      CloneElements(clone, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Clones all elements in the current list.
+    /// </summary>
+    /// <remarks>Clones only elements that have not already been cloned 
+    /// (and therefore exist in the dictionary <paramref name="clonedObjects"/>).</remarks>
+    /// <param name="destination">The <see cref="ItemList&lt;T&gt;"/> where to save the cloned objects.</param>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    protected void CloneElements(ItemList<T> destination, IDictionary<Guid, object> clonedObjects) {
+      for (int i = 0; i < list.Count; i++)
+        destination.list.Add((T) Auxiliary.Clone(list[i], clonedObjects));
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Each element in the list is saved as child node.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      for (int i = 0; i < list.Count; i++)
+        node.AppendChild(PersistenceManager.Persist(list[i], document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted item list from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The single elements of the list must be saved as child nodes (see <see cref="GetXmlNode"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      for (int i = 0; i < node.ChildNodes.Count; i++)
+        list.Add((T) PersistenceManager.Restore(node.ChildNodes[i], restoredObjects));
+    }
+
+    /// <summary>
+    /// The string representation of the list.
+    /// </summary>
+    /// <returns>The elements of the list as string, each element separated by a semicolon. <br/>
+    /// If the list is empty, "Empty List" is returned.</returns>
+    public override string ToString() {
+      if (list.Count > 0) {
+        StringBuilder builder = new StringBuilder();
+        builder.Append(list[0].ToString());
+        for (int i = 1; i < list.Count; i++) {
+          builder.Append(";");
+          builder.Append(list[i].ToString());
+        }
+        return builder.ToString();
+      } else {
+        return "Empty List";
+      }
+    }
+
+    #region IList<T> Members
+    /// <inheritdoc cref="List&lt;T&gt;.IndexOf(T)"/>
+    public int IndexOf(T item) {
+      return list.IndexOf(item);
+    }
+    ///// <summary>
+    ///// Inserts a specified <paramref name="item"/> at a specific position <paramref name="index"/>.
+    ///// </summary>
+    ///// <remarks>Calls <see cref="M:ItemList&lt;T&gt;.OnItemAdded"/>.</remarks>
+    ///// <param name="index">The position where to insert the <paramref name="item"/>.</param>
+    ///// <param name="item">The element to insert.</param>
+    /// <inheritdoc cref="List&lt;T&gt;.Insert"/>
+    /// <remarks>Calls <see cref="OnItemAdded"/>.</remarks>
+    public void Insert(int index, T item) {
+      list.Insert(index, item);
+      OnItemAdded(item, index);
+    }
+    ///// <summary>
+    ///// Removes the element at the specified <paramref name="index"/>.
+    ///// </summary>
+    ///// <remarks>Calls <see cref="M:ItemList&lt;T&gt;.OnItemRemoved"/>.</remarks>
+    ///// <param name="index">The position where to remove the element.</param>
+    /// <inheritdoc cref="List&lt;T&gt;.RemoveAt"/>
+    /// <remarks>Calls <see cref="OnItemRemoved"/>.</remarks>
+    public void RemoveAt(int index) {
+      IItem item = list[index];
+      list.RemoveAt(index);
+      OnItemRemoved(item, index);
+    }
+    /// <summary>
+    /// Gets or sets the element at the specified <paramref name="index"/>.
+    /// </summary>
+    /// <param name="index">The position where to get or set the element.</param>
+    /// <returns>The element at the specified <paramref name="index"/>.</returns>
+    public T this[int index] {
+      get { return list[index]; }
+      set { list[index] = value; }
+    }
+    #endregion
+
+    #region ICollection<T> Members
+    ///// <summary>
+    ///// Adds an item to the current list.
+    ///// </summary>
+    ///// <remarks>Calls <see cref="M:ItemList&lt;T&gt;.OnItemAdded"/>.</remarks>
+    ///// <param name="item">The element to add.</param>
+    /// <inheritdoc cref="List&lt;T&gt;.Add"/>
+    /// <remarks>Calls <see cref="OnItemAdded"/>.</remarks>
+    public void Add(T item) {
+      list.Add(item);
+      OnItemAdded(item, list.Count - 1);
+    }
+    ///// <summary>
+    ///// Empties the list.
+    ///// </summary>
+    ///// <remarks>Calls <see cref="M:ItemList&lt;T&gt;.OnCleared"/>.</remarks>
+    /// <inheritdoc cref="List&lt;T&gt;.Clear"/>
+    /// <remarks>Calls <see cref="OnCleared"/>.</remarks>
+    public void Clear() {
+      list.Clear();
+      OnCleared();
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.Contains"/>
+    public bool Contains(T item) {
+      return list.Contains(item);
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.CopyTo(T[], int)"/>
+    public void CopyTo(T[] array, int arrayIndex) {
+      list.CopyTo(array, arrayIndex);
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.Count"/>
+    public int Count {
+      get { return list.Count; }
+    }
+    /// <summary>
+    /// Checks whether the current list is read-only.
+    /// </summary>
+    /// <remarks>Always returns <c>false</c>.</remarks>
+    public bool IsReadOnly {
+      get { return false; }
+    }
+    /// <summary>
+    /// Removes the specified <paramref name="item"/>.
+    /// </summary>
+    /// <remarks>If the <paramref name="item"/> can be successfully removed, 
+    /// <see cref="OnItemRemoved"/> is called.</remarks>
+    /// <param name="item">The element to remove.</param>
+    /// <returns><c>true</c>, if the element could be removed successfully, <c>false</c> otherwise.</returns>
+    public bool Remove(T item) {
+      int index = list.IndexOf(item);
+      if (list.Remove(item)) {
+        OnItemRemoved(item, index);
+        return true;
+      } else {
+        return false;
+      }
+    }
+    #endregion
+
+    #region IEnumerable<T> Members
+    /// <inheritdoc cref="List&lt;T&gt;.GetEnumerator"/>
+    public IEnumerator<T> GetEnumerator() {
+      return list.GetEnumerator();
+    }
+    #endregion
+
+    #region IEnumerable Members
+    /// <inheritdoc cref="List&lt;T&gt;.GetEnumerator"/>
+    IEnumerator IEnumerable.GetEnumerator() {
+      return list.GetEnumerator();
+    }
+    #endregion
+
+    #region List<T> Methods
+    /// <inheritdoc cref="List&lt;T&gt;.LastIndexOf(T)"/>
+    public int LastIndexOf(T item) {
+      return list.LastIndexOf(item);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.LastIndexOf(T, int)"/>
+    public int LastIndexOf(T item, int index) {
+      return list.LastIndexOf(item, index);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.LastIndexOf(T, int, int)"/>
+    public int LastIndexOf(T item, int index, int count) {
+      return list.LastIndexOf(item, index, count);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.IndexOf(T, int)"/>
+    public int IndexOf(T item, int index) {
+      return list.IndexOf(item, index);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.IndexOf(T, int, int)"/>
+    public int IndexOf(T item, int index, int count) {
+      return list.IndexOf(item, index, count);
+    }
+    /// <summary>
+    /// Adds all the elements in the specified <paramref name="collection"/> to the current list.
+    /// </summary>
+    /// <param name="collection">The elements to add to the current list.</param>
+    public void AddRange(IEnumerable<T> collection) {
+      foreach (T obj in collection) {
+        this.Add(obj);
+      }
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.Exists"/>
+    public bool Exists(Predicate<T> match) {
+      return list.Exists(match);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.BinarySearch(T)"/>
+    public int BinarySearch(T item) {
+      return list.BinarySearch(item);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.BinarySearch(T, System.Collections.Generic.IComparer&lt;T&gt;)"/>
+    public int BinarySearch(T item, IComparer<T> comparer) {
+      return list.BinarySearch(item, comparer);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.BinarySearch(int, int, T, System.Collections.Generic.IComparer&lt;T&gt;)"/>
+    public int BinarySearch(int index, int count, T item, IComparer<T> comparer) {
+      return list.BinarySearch(index, count, item, comparer);
+    }
+    /// <inheritdoc cref="List&lt;T&gt;.Find"/>
+    public T Find(Predicate<T> match) {
+      return list.Find(match);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.FindAll"/>
+    public List<T> FindAll(Predicate<T> match) {
+      return list.FindAll(match);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.FindIndex(System.Predicate&lt;T&gt;)"/>
+    public int FindIndex(Predicate<T> match) {
+      return list.FindIndex(match);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.FindLast"/>
+    public T FindLast(Predicate<T> match) {
+      return list.FindLast(match);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.FindLastIndex(System.Predicate&lt;T&gt;)"/>
+    public int FindLastIndex(Predicate<T> match) {
+      return list.FindLastIndex(match);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.Sort()"/>
+    public void Sort() {
+      list.Sort();
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.Sort(System.Collections.Generic.IComparer&lt;T&gt;)"/>
+    public void Sort(IComparer<T> comparer) {
+      list.Sort(comparer);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.Sort(System.Comparison&lt;T&gt;)"/>
+    public void Sort(Comparison<T> comparison) {
+      list.Sort(comparison);
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.Reverse()"/>
+    public void Reverse() {
+      list.Reverse();
+    }
+
+    /// <summary>
+    /// Converts all elements in the current list to a specified type <typeparamref name="TOutput"/>.
+    /// </summary>
+    /// <typeparam name="TOutput">The type to convert the items to, which must implement <see cref="IItem"/>.</typeparam>
+    /// <param name="converter">A delegate that converts elements from type <c>T</c> to type <typeparamref name="TOutput"/>.</param>
+    /// <returns>A list containing the converted elements.</returns>
+    public ItemList<TOutput> ConvertAll<TOutput>(Converter<T, TOutput> converter) where TOutput : IItem {
+      ItemList<TOutput> targetList = new ItemList<TOutput>();
+      foreach (T item in list) {
+        targetList.Add(converter.Invoke(item));
+      }
+      return targetList;
+    }
+
+    /// <inheritdoc cref="List&lt;T&gt;.TrueForAll"/>
+    public bool TrueForAll(Predicate<T> match) {
+      return list.TrueForAll(match);
+    }
+
+    #endregion
+
+    /// <summary>
+    /// Occurs where a new item is added to the list.
+    /// </summary>
+    public event EventHandler<ItemIndexEventArgs> ItemAdded;
+    /// <summary>
+    /// Fires a new <c>ItemAdded</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    /// <param name="item">The added element.</param>
+    /// <param name="index">The position where the new element was added.</param>
+    protected virtual void OnItemAdded(IItem item, int index) {
+      if (ItemAdded != null)
+        ItemAdded(this, new ItemIndexEventArgs(item, index));
+      OnChanged();
+    }
+    /// <summary>
+    /// Occurs when an element is deleted from the list.
+    /// </summary>
+    public event EventHandler<ItemIndexEventArgs> ItemRemoved;
+    /// <summary>
+    /// Fires a new <c>ItemRemoved</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    /// <param name="item">The removed element.</param>
+    /// <param name="index">The position from where the element was removed.</param>
+    protected virtual void OnItemRemoved(IItem item, int index) {
+      if (ItemRemoved != null)
+        ItemRemoved(this, new ItemIndexEventArgs(item, index));
+      OnChanged();
+    }
+    /// <summary>
+    /// Occurs when the list is emptied.
+    /// </summary>
+    public event EventHandler Cleared;
+    /// <summary>
+    /// Fires a new <c>Cleared</c> event.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    protected virtual void OnCleared() {
+      if (Cleared != null)
+        Cleared(this, new EventArgs());
+      OnChanged();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.Designer.cs	(revision 1270)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+namespace HeuristicLab.Data {
+  partial class MatrixDataBaseView {
+    /// <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.rowsLabel = new System.Windows.Forms.Label();
+      this.rowsTextBox = new System.Windows.Forms.TextBox();
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      this.columnsTextBox = new System.Windows.Forms.TextBox();
+      this.columnsLabel = new System.Windows.Forms.Label();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // rowsLabel
+      // 
+      this.rowsLabel.AutoSize = true;
+      this.rowsLabel.Location = new System.Drawing.Point(3, 4);
+      this.rowsLabel.Name = "rowsLabel";
+      this.rowsLabel.Size = new System.Drawing.Size(37, 13);
+      this.rowsLabel.TabIndex = 0;
+      this.rowsLabel.Text = "Rows:";
+      // 
+      // rowsTextBox
+      // 
+      this.rowsTextBox.AcceptsReturn = true;
+      this.rowsTextBox.Location = new System.Drawing.Point(39, 1);
+      this.rowsTextBox.Name = "rowsTextBox";
+      this.rowsTextBox.Size = new System.Drawing.Size(110, 20);
+      this.rowsTextBox.TabIndex = 1;
+      this.rowsTextBox.Text = "0";
+      this.rowsTextBox.Validated += new System.EventHandler(this.textBox_Validated);
+      this.rowsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox_KeyDown);
+      this.rowsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.textBox_Validating);
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = 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.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.ColumnHeadersVisible = false;
+      this.dataGridView.Location = new System.Drawing.Point(3, 27);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.Size = new System.Drawing.Size(383, 293);
+      this.dataGridView.TabIndex = 2;
+      this.dataGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView_CellValidating);
+      // 
+      // columnsTextBox
+      // 
+      this.columnsTextBox.AcceptsReturn = true;
+      this.columnsTextBox.Location = new System.Drawing.Point(215, 1);
+      this.columnsTextBox.Name = "columnsTextBox";
+      this.columnsTextBox.Size = new System.Drawing.Size(110, 20);
+      this.columnsTextBox.TabIndex = 4;
+      this.columnsTextBox.Text = "0";
+      this.columnsTextBox.Validated += new System.EventHandler(this.textBox_Validated);
+      this.columnsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox_KeyDown);
+      this.columnsTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.textBox_Validating);
+      // 
+      // columnsLabel
+      // 
+      this.columnsLabel.AutoSize = true;
+      this.columnsLabel.Location = new System.Drawing.Point(159, 4);
+      this.columnsLabel.Name = "columnsLabel";
+      this.columnsLabel.Size = new System.Drawing.Size(50, 13);
+      this.columnsLabel.TabIndex = 3;
+      this.columnsLabel.Text = "Columns:";
+      // 
+      // MatrixDataBaseView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.columnsTextBox);
+      this.Controls.Add(this.columnsLabel);
+      this.Controls.Add(this.dataGridView);
+      this.Controls.Add(this.rowsTextBox);
+      this.Controls.Add(this.rowsLabel);
+      this.Name = "MatrixDataBaseView";
+      this.Size = new System.Drawing.Size(391, 323);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label rowsLabel;
+    private System.Windows.Forms.TextBox rowsTextBox;
+    protected System.Windows.Forms.DataGridView dataGridView;
+    private System.Windows.Forms.TextBox columnsTextBox;
+    private System.Windows.Forms.Label columnsLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.cs	(revision 1270)
@@ -0,0 +1,184 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The basic visual representation of a two-dimensional matrix.
+  /// </summary>
+  public partial class MatrixDataBaseView : ViewBase {
+
+    /// <summary>
+    /// Gets or sets the matrix to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public ArrayDataBase ArrayDataBase {
+      get { return (ArrayDataBase)Item; }
+      protected set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="MatrixDataBaseView"/>.
+    /// </summary>
+    public MatrixDataBaseView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="ArrayDataBase"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ArrayDataBase.Changed -= new EventHandler(ArrayDataBase_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="ArrayDataBase"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ArrayDataBase.Changed += new EventHandler(ArrayDataBase_Changed);
+    }
+
+    /// <summary>
+    /// Validates the given data.
+    /// <note type="caution"> Needs to be overriden in each inherited class!</note>
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when method is not 
+    /// overridden in inherited class.</exception>
+    /// <param name="element">The data to validate.</param>
+    /// <returns><c>true</c> if the data is valid, <c>false</c> otherwise.</returns>
+    protected virtual bool ValidateData(string element) {
+      throw new InvalidOperationException("ValidateData has to be overridden in each inherited class");
+    }
+    /// <summary>
+    /// Sets an element of the current instance at the given <paramref name="index"/> 
+    /// to the given <paramref name="element"/>.
+    /// <note type="caution"> Needs to be overridden in each inherited class!</note>
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when method is not 
+    /// overridden in inherited class.</exception>
+    /// <param name="row">The row where to substitute the element.</param>
+    /// <param name="column">The column where to substitute the element.</param>
+    /// <param name="element">The element to insert.</param>        
+    protected virtual void SetArrayElement(int row, int column, string element) {
+      throw new InvalidOperationException("SetArrayElement has to be overridden in each inherited class");
+    }
+
+    /// <summary>
+    /// Update all controls with the latest element of the matrix.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ArrayDataBase != null) {
+        int rows = ArrayDataBase.Data.GetLength(0);
+        int columns = ArrayDataBase.Data.GetLength(1);
+
+        rowsTextBox.Text = rows + "";
+        columnsTextBox.Text = columns + "";
+        dataGridView.ColumnCount = columns;
+        dataGridView.RowCount = rows;
+        for (int i = 0; i < rows; i++) {
+          for (int j = 0; j < columns; j++) {
+            dataGridView.Rows[i].Cells[j].Value = ArrayDataBase.Data.GetValue(i, j);
+          }
+        }
+      } else {
+        rowsTextBox.Text = "1";
+        columnsTextBox.Text = "1";
+        dataGridView.ColumnCount = 1;
+        dataGridView.RowCount = 1;
+      }
+    }
+
+    private void textBox_Validating(object sender, CancelEventArgs e) {
+      int newValue;
+      TextBox source = (TextBox)sender;
+      if (int.TryParse(source.Text, out newValue)) {
+        if (newValue > 0) {
+          e.Cancel = false;
+        } else {
+          e.Cancel = true;
+        }
+      } else {
+        e.Cancel = true;
+      }
+    }
+
+    /// <summary>
+    /// Creates a new matrix having the specified number (<paramref name="newRows"/>) 
+    /// of rows and the specified number (<paramref name="newColumns"/>) of columns of the 
+    /// current instance.
+    /// </summary>
+    /// <param name="newRows">The number of rows of the new matrix.</param>
+    /// <param name="newColumns">The number of columns of the new matrix</param>
+    private void CreateAndCopyArray(int newRows, int newColumns) {
+      Array newArray = Array.CreateInstance(ArrayDataBase.Data.GetType().GetElementType(), newRows, newColumns);
+      Array.Copy(ArrayDataBase.Data, newArray, Math.Min(newArray.Length, ArrayDataBase.Data.Length));
+      ArrayDataBase.Data = newArray;
+    }
+
+    private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
+      if (ValidateData((string)e.FormattedValue)) {
+        SetArrayElement(e.RowIndex, e.ColumnIndex, (string)e.FormattedValue);
+        e.Cancel = false;
+        Refresh();
+      } else {
+        e.Cancel = true;
+      }
+    }
+
+    private void textBox_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return) {
+        e.SuppressKeyPress = true;
+        dataGridView.Focus();
+      }
+    }
+
+    private void textBox_Validated(object sender, EventArgs e) {
+      int newRows;
+      int newColumns;
+      if (int.TryParse(columnsTextBox.Text, out newColumns) && int.TryParse(rowsTextBox.Text, out newRows)) {
+        CreateAndCopyArray(newRows, newColumns);
+      } else {
+        throw new FormatException();
+      }
+    }
+
+    #region ArrayDataBase Events
+    private void ArrayDataBase_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/MatrixDataBaseView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/NullData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/NullData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/NullData.cs	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// A class that represents <c>null</c>.
+  /// </summary>
+  public class NullData : ObjectData {
+    /// <summary>
+    /// Gets <c>null</c> and throws an exception in the setter.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the setter is called.</exception>
+    public override object Data {
+      get { return null; }
+      set { throw new InvalidOperationException("Data property of NullData cannot be set"); }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NullData"/> with <c>null</c>.
+    /// </summary>
+    public NullData() {
+      base.Data = null;
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>Adds the cloned instance to the dictionary <paramref name="clonedObjects"/>.</remarks>
+    /// <param name="clonedObjects">All already cloned objects.</param>
+    /// <returns>The cloned instance as <see cref="NullData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      NullData clone = new NullData();
+      clonedObjects.Add(Guid, clone);
+      return clone;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ObjectData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ObjectData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/ObjectData.cs	(revision 1270)
@@ -0,0 +1,123 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// Represents the base class for all base data types.
+  /// </summary>
+  public class ObjectData : ItemBase, IObjectData {
+    private object myData;
+    /// <summary>
+    /// Gets or sets the data to represent.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ItemBase.OnChanged"/>.</remarks>
+    public virtual object Data {
+      get { return myData; }
+      set {
+        if (myData != value) {
+          myData = value;
+          OnChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>HeuristicLab data items are cloned with the <see cref="HeuristicLab.Core.Auxiliary.Clone"/> method of 
+    /// class <see cref="Auxiliary"/> (deep copy), all other items (like basic data types) 
+    /// are cloned with their own <c>Clone</c> methods (shadow copy).</remarks>
+    /// <exception cref="InvalidOperationException">Thrown when the current instance is not cloneable.</exception>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The clone instance.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ObjectData clone = (ObjectData)base.Clone(clonedObjects);
+      if (Data is IStorable)
+        clone.myData = Auxiliary.Clone((IStorable)Data, clonedObjects);
+      else if (Data is ICloneable)
+        clone.myData = ((ICloneable)Data).Clone();
+      else
+        throw new InvalidOperationException("contained object is not cloneable");
+      return clone;
+    }
+
+    /// <summary>
+    /// Checks whether the current instance equals the specified <paramref name="obj"/>.
+    /// </summary>
+    /// <param name="obj">The object to compare with.</param>
+    /// <returns><c>true</c>, if both objects are the same or 
+    /// the contained data is the same, <c>false</c> otherwise.</returns>
+    public override bool Equals(object obj) {
+      if(obj == this) return true; // same instance
+      IObjectData other = obj as IObjectData;
+      if(other != null)
+        return Data.Equals(other.Data); // are the contained Data the same?
+      else
+        return false;
+    }
+
+    /// <inheritdoc cref="object.GetHashCode"/>
+    public override int GetHashCode() {
+      return Data.GetHashCode();
+    }
+
+    /// <summary>
+    /// Compares the current instance to the given <paramref name="obj"/>.
+    /// </summary>
+    /// <remarks>Can also compare basic data types with their representing HeuristicLab data types 
+    /// (e.g. a <see cref="BoolData"/> with a boolean value).</remarks>
+    /// <exception cref="InvalidOperationException">Thrown when the current 
+    /// instance does not implement the interface <see cref="IComparable"/></exception>
+    /// <param name="obj">The object to compare the current instance to.</param>
+    /// <returns><c>0</c> if the objects are the same, a value smaller than zero when the current instance
+    /// is smaller than the given <paramref name="obj"/> and a value greater than zero 
+    /// when the current instance is greater than the given <paramref name="obj"/>.</returns>
+    public int CompareTo(object obj) {
+      IComparable comparable = Data as IComparable;
+      if (comparable != null) {
+        IObjectData other = obj as IObjectData;
+        if (other != null)
+          return comparable.CompareTo(other.Data);
+        else
+          return comparable.CompareTo(obj);
+      }
+      throw new InvalidOperationException("Cannot compare as contained object doesn't implement IComparable");
+    }
+
+    /// <summary>
+    /// The string representation of the current instance.
+    /// </summary>
+    /// <returns>"null" if property <see cref="Data"/> is <c>null</c>, else 
+    /// the string representation of the current instance.</returns>
+    public override string ToString() {
+      if (Data == null)
+        return "null";
+      else
+        return Data.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Data")]
+[assembly: AssemblyDescription("HeuristicLab data classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("f1be1f44-c421-4749-9d25-160611dc18b3")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringData.cs	(revision 1270)
@@ -0,0 +1,112 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The representation of a string.
+  /// </summary>
+  public class StringData : ObjectData {
+    /// <summary>
+    /// Gets or sets the string value.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ObjectData.Data"/> of base class <see cref="ObjectData"/>. 
+    /// No own data storage present.</remarks>
+    public new string Data {
+      get { return (string)base.Data; }
+      set { base.Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="StringData"/> 
+    /// with the name of the type of the current instance as default value.
+    /// </summary>
+    public StringData() {
+      Data = this.GetType().Name;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="StringData"/> with the specified <paramref name="data"/>.
+    /// </summary>
+    /// <param name="data">The string value the current instance should represent.</param>
+    public StringData(string data) {
+      Data = data;
+    }
+    
+    /// <summary>
+    /// Creates a new instance of <see cref="StringDataView"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="StringDataView"/>.</returns>
+    public override IView CreateView() {
+      return new StringDataView(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <remarks>The current instance is added to the dictionary <paramref name="clonedObjects"/>.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects.</param>
+    /// <returns>The coned instance as <see cref="StringData"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      StringData clone = new StringData();
+      clonedObjects.Add(Guid, clone);
+      clone.Data = Data;
+      return clone;
+    }
+
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The string value is saved in the node's inner text.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects.(Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = Data;
+      return node;
+    }
+    /// <summary>
+    ///  Loads the persisted string value from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The string value must be saved in the node's inner text 
+    /// (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the string is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Data = node.InnerText;
+    }
+
+    /// <summary>
+    /// The string representation of the current instance.
+    /// </summary>
+    /// <returns>The string value.</returns>
+    public override string ToString() {
+      return Data;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.Designer.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Data {
+  partial class StringDataView {
+    /// <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.dataTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // dataTextBox
+      // 
+      this.dataTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTextBox.Location = new System.Drawing.Point(0, 0);
+      this.dataTextBox.Name = "dataTextBox";
+      this.dataTextBox.Size = new System.Drawing.Size(200, 20);
+      this.dataTextBox.TabIndex = 1;
+      this.dataTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.dataTextBox_Validating);
+      // 
+      // StringDataView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataTextBox);
+      this.Name = "StringDataView";
+      this.Size = new System.Drawing.Size(200, 25);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox dataTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.cs	(revision 1270)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Data {
+  /// <summary>
+  /// The visual representation of the class <see cref="StringData"/>, symbolizing a string value.
+  /// </summary>
+  public partial class StringDataView : ViewBase {
+    /// <summary>
+    /// Gets or sets the string value to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="HeuristicLab.Core.ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public StringData StringData {
+      get { return (StringData)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="StringDataView"/>.
+    /// </summary>
+    public StringDataView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of the class <see cref="StringDataView"/> with the given
+    /// <paramref name="stringData"/>.
+    /// <note type="caution"> No CopyConstructor! <paramref name="stringData"/> is not copied!</note>
+    /// </summary>
+    /// <param name="stringData">The string value to represent visually.</param>
+    public StringDataView(StringData stringData)
+      : this() {
+      StringData = stringData;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying <see cref="StringData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      StringData.Changed -= new EventHandler(StringData_Changed);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds an eventhandler to the underlying <see cref="StringData"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="HeuristicLab.Core.ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      StringData.Changed += new EventHandler(StringData_Changed);
+    }
+
+    /// <summary>
+    /// Update the controls with the latest string value.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (StringData == null) {
+        dataTextBox.Enabled = false;
+      } else {
+        dataTextBox.Enabled = true;
+        dataTextBox.Text = StringData.ToString();
+      }
+    }
+
+    private void dataTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      StringData.Data = dataTextBox.Text;
+    }
+
+    private void StringData_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Data/StringDataView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DataFormatException.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DataFormatException.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DataFormatException.cs	(revision 1270)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataAnalysis {
+  public class DataFormatException : Exception{
+    private int line;
+    public int Line {
+      get { return line; }
+    }
+    private string token;
+    public string Token {
+      get { return token; }
+    }
+    public DataFormatException(string message, string token, int line) : base(message+"\nToken: " + token + " (line: " + line + ")"){
+      this.token = token;
+      this.line = line;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Dataset.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Dataset.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Dataset.cs	(revision 1270)
@@ -0,0 +1,339 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Globalization;
+using System.Text;
+
+namespace HeuristicLab.DataAnalysis {
+  public sealed class Dataset : ItemBase {
+
+    private string name;
+    private double[] samples;
+    private int rows;
+    private int columns;
+    private Dictionary<int, Dictionary<int, double>>[] cachedMeans;
+    private Dictionary<int, Dictionary<int, double>>[] cachedRanges;
+    private double[] scalingFactor;
+    private double[] scalingOffset;
+
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    public int Rows {
+      get { return rows; }
+      set { rows = value; }
+    }
+
+    public int Columns {
+      get { return columns; }
+      set { columns = value; }
+    }
+
+    public double[] ScalingFactor {
+      get { return scalingFactor; }
+    }
+    public double[] ScalingOffset {
+      get { return scalingOffset; }
+    }
+
+    public double GetValue(int i, int j) {
+      return samples[columns * i + j];
+    }
+
+    public void SetValue(int i, int j, double v) {
+      if(v != samples[columns * i + j]) {
+        samples[columns * i + j] = v;
+        CreateDictionaries();
+        FireChanged();
+      }
+    }
+
+    public double[] Samples {
+      get { return samples; }
+      set {
+        scalingFactor = new double[columns];
+        scalingOffset = new double[columns];
+        for(int i = 0; i < scalingFactor.Length; i++) {
+          scalingFactor[i] = 1.0;
+          scalingOffset[i] = 0.0;
+        }
+        samples = value;
+        CreateDictionaries();
+        FireChanged();
+      }
+    }
+
+    private string[] variableNames;
+    public string[] VariableNames {
+      get { return variableNames; }
+      set { variableNames = value; }
+    }
+
+    public Dataset() {
+      Name = "-";
+      VariableNames = new string[] { "Var0" };
+      Columns = 1;
+      Rows = 1;
+      Samples = new double[1];
+      scalingOffset = new double[] { 0.0 };
+      scalingFactor = new double[] { 1.0 };
+    }
+
+    private void CreateDictionaries() {
+      // keep a means and ranges dictionary for each column (possible target variable) of the dataset.
+      cachedMeans = new Dictionary<int, Dictionary<int, double>>[columns];
+      cachedRanges = new Dictionary<int, Dictionary<int, double>>[columns];
+      for(int i = 0; i < columns; i++) {
+        cachedMeans[i] = new Dictionary<int, Dictionary<int, double>>();
+        cachedRanges[i] = new Dictionary<int, Dictionary<int, double>>();
+      }
+    }
+
+    public override IView CreateView() {
+      return new DatasetView(this);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Dataset clone = new Dataset();
+      clonedObjects.Add(Guid, clone);
+      double[] cloneSamples = new double[rows * columns];
+      Array.Copy(samples, cloneSamples, samples.Length);
+      clone.rows = rows;
+      clone.columns = columns;
+      clone.Samples = cloneSamples;
+      clone.Name = Name;
+      clone.VariableNames = new string[VariableNames.Length];
+      Array.Copy(VariableNames, clone.VariableNames, VariableNames.Length);
+      Array.Copy(scalingFactor, clone.scalingFactor, columns);
+      Array.Copy(scalingOffset, clone.scalingOffset, columns);
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute problemName = document.CreateAttribute("Name");
+      problemName.Value = Name;
+      node.Attributes.Append(problemName);
+      XmlAttribute dim1 = document.CreateAttribute("Dimension1");
+      dim1.Value = rows.ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim1);
+      XmlAttribute dim2 = document.CreateAttribute("Dimension2");
+      dim2.Value = columns.ToString(CultureInfo.InvariantCulture.NumberFormat);
+      node.Attributes.Append(dim2);
+      XmlAttribute variableNames = document.CreateAttribute("VariableNames");
+      variableNames.Value = GetVariableNamesString();
+      node.Attributes.Append(variableNames);
+      XmlAttribute scalingFactorsAttribute = document.CreateAttribute("ScalingFactors");
+      scalingFactorsAttribute.Value = GetString(scalingFactor);
+      node.Attributes.Append(scalingFactorsAttribute);
+      XmlAttribute scalingOffsetsAttribute = document.CreateAttribute("ScalingOffsets");
+      scalingOffsetsAttribute.Value = GetString(scalingOffset);
+      node.Attributes.Append(scalingOffsetsAttribute);
+      node.InnerText = ToString(CultureInfo.InvariantCulture.NumberFormat);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      Name = node.Attributes["Name"].Value;
+      rows = int.Parse(node.Attributes["Dimension1"].Value, CultureInfo.InvariantCulture.NumberFormat);
+      columns = int.Parse(node.Attributes["Dimension2"].Value, CultureInfo.InvariantCulture.NumberFormat);
+
+      VariableNames = ParseVariableNamesString(node.Attributes["VariableNames"].Value);
+      if(node.Attributes["ScalingFactors"] != null)
+        scalingFactor = ParseDoubleString(node.Attributes["ScalingFactors"].Value);
+      else {
+        scalingFactor = new double[columns]; // compatibility with old serialization format
+        for(int i = 0; i < scalingFactor.Length; i++) scalingFactor[i] = 1.0;
+      }
+      if(node.Attributes["ScalingOffsets"] != null)
+        scalingOffset = ParseDoubleString(node.Attributes["ScalingOffsets"].Value);
+      else {
+        scalingOffset = new double[columns]; // compatibility with old serialization format
+        for(int i = 0; i < scalingOffset.Length; i++) scalingOffset[i] = 0.0;
+      }
+
+      string[] tokens = node.InnerText.Split(';');
+      if(tokens.Length != rows * columns) throw new FormatException();
+      samples = new double[rows * columns];
+      for(int row = 0; row < rows; row++) {
+        for(int column = 0; column < columns; column++) {
+          if(double.TryParse(tokens[row * columns + column], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out samples[row * columns + column]) == false) {
+            throw new FormatException("Can't parse " + tokens[row * columns + column] + " as double value.");
+          }
+        }
+      }
+      CreateDictionaries();
+    }
+
+    public override string ToString() {
+      return ToString(CultureInfo.CurrentCulture.NumberFormat);
+    }
+
+    private string ToString(NumberFormatInfo format) {
+      StringBuilder builder = new StringBuilder();
+      for(int row = 0; row < rows; row++) {
+        for(int column = 0; column < columns; column++) {
+          builder.Append(";");
+          builder.Append(samples[row * columns + column].ToString("r", format));
+        }
+      }
+      if(builder.Length > 0) builder.Remove(0, 1);
+      return builder.ToString();
+    }
+
+    private string GetVariableNamesString() {
+      string s = "";
+      for(int i = 0; i < variableNames.Length; i++) {
+        s += variableNames[i] + "; ";
+      }
+
+      if(variableNames.Length > 0) {
+        s = s.TrimEnd(';', ' ');
+      }
+      return s;
+    }
+    private string GetString(double[] xs) {
+      string s = "";
+      for(int i = 0; i < xs.Length; i++) {
+        s += xs[i].ToString("r", CultureInfo.InvariantCulture) + "; ";
+      }
+
+      if(xs.Length > 0) {
+        s = s.TrimEnd(';', ' ');
+      }
+      return s;
+    }
+
+    private string[] ParseVariableNamesString(string p) {
+      p = p.Trim();
+      string[] tokens = p.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
+      for(int i = 0; i < tokens.Length; i++) tokens[i] = tokens[i].Trim();
+      return tokens;
+    }
+    private double[] ParseDoubleString(string s) {
+      s = s.Trim();
+      string[] ss = s.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
+      double[] xs = new double[ss.Length];
+      for(int i = 0; i < xs.Length; i++) {
+        xs[i] = double.Parse(ss[i], CultureInfo.InvariantCulture);
+      }
+      return xs;
+    }
+
+    public double GetMean(int column) {
+      return GetMean(column, 0, Rows - 1);
+    }
+
+    public double GetMean(int column, int from, int to) {
+      if(!cachedMeans[column].ContainsKey(from) || !cachedMeans[column][from].ContainsKey(to)) {
+        double[] values = new double[to - from + 1];
+        for(int sample = from; sample <= to; sample++) {
+          values[sample - from] = GetValue(sample, column);
+        }
+        double mean = Statistics.Mean(values);
+        if(!cachedMeans[column].ContainsKey(from)) cachedMeans[column][from] = new Dictionary<int, double>();
+        cachedMeans[column][from][to] = mean;
+        return mean;
+      } else {
+        return cachedMeans[column][from][to];
+      }
+    }
+
+    public double GetRange(int column) {
+      return GetRange(column, 0, Rows - 1);
+    }
+
+    public double GetRange(int column, int from, int to) {
+      if(!cachedRanges[column].ContainsKey(from) || !cachedRanges[column][from].ContainsKey(to)) {
+        double[] values = new double[to - from + 1];
+        for(int sample = from; sample <= to; sample++) {
+          values[sample - from] = GetValue(sample, column);
+        }
+        double range = Statistics.Range(values);
+        if(!cachedRanges[column].ContainsKey(from)) cachedRanges[column][from] = new Dictionary<int, double>();
+        cachedRanges[column][from][to] = range;
+        return range;
+      } else {
+        return cachedRanges[column][from][to];
+      }
+    }
+
+    public double GetMaximum(int column) {
+      double max = Double.NegativeInfinity;
+      for(int i = 0; i < Rows; i++) {
+        double val = GetValue(i, column);
+        if(val > max) max = val;
+      }
+      return max;
+    }
+
+    public double GetMinimum(int column) {
+      double min = Double.PositiveInfinity;
+      for(int i = 0; i < Rows; i++) {
+        double val = GetValue(i, column);
+        if(val < min) min = val;
+      }
+      return min;
+    }
+
+    internal void ScaleVariable(int column) {
+      if(scalingFactor[column] == 1.0 && scalingOffset[column] == 0.0) {
+        double min = GetMinimum(column);
+        double max = GetMaximum(column);
+        double range = max - min;
+        if(range == 0) ScaleVariable(column, 1.0, -min);
+        else ScaleVariable(column, 1.0 / range, -min);
+      }
+      CreateDictionaries();
+      FireChanged();
+    }
+
+    internal void ScaleVariable(int column, double factor, double offset) {
+      scalingFactor[column] = factor;
+      scalingOffset[column] = offset;
+      for(int i = 0; i < Rows; i++) {
+        double origValue = samples[i * columns + column];
+        samples[i * columns + column] = (origValue + offset) * factor;
+      }
+      CreateDictionaries();
+      FireChanged();
+    }
+
+    internal void UnscaleVariable(int column) {
+      if(scalingFactor[column] != 1.0 || scalingOffset[column]!=0.0) {
+        for(int i = 0; i < rows; i++) {
+          double scaledValue = samples[i * columns + column];
+          samples[i * columns + column] = scaledValue / scalingFactor[column] - scalingOffset[column];
+        }
+        scalingFactor[column] = 1.0;
+        scalingOffset[column] = 0.0;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetParser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetParser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetParser.cs	(revision 1270)
@@ -0,0 +1,414 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.DataAnalysis {
+  public class DatasetParser {
+    private const string PROBLEMNAME = "PROBLEMNAME";
+    private const string VARIABLENAMES = "VARIABLENAMES";
+    private const string TARGETVARIABLE = "TARGETVARIABLE";
+    private const string MAXIMUMTREEHEIGHT = "MAXIMUMTREEHEIGHT";
+    private const string MAXIMUMTREESIZE = "MAXIMUMTREESIZE";
+    private const string TRAININGSAMPLESSTART = "TRAININGSAMPLESSTART";
+    private const string TRAININGSAMPLESEND = "TRAININGSAMPLESEND";
+    private const string VALIDATIONSAMPLESSTART = "VALIDATIONSAMPLESSTART";
+    private const string VALIDATIONSAMPLESEND = "VALIDATIONSAMPLESEND";
+    private const string TESTSAMPLESSTART = "TESTSAMPLESSTART";
+    private const string TESTSAMPLESEND = "TESTSAMPLESEND";
+    private const string NONINPUTVARIABLES = "NONINPUTVARIABLES";
+    private Tokenizer tokenizer;
+    private Dictionary<string, List<Token>> metadata;
+    private List<List<double>> samplesList;
+
+    private int rows;
+    public int Rows {
+      get { return rows; }
+      set { rows = value; }
+    }
+
+    private int columns;
+    public int Columns {
+      get { return columns; }
+      set { columns = value; }
+    }
+
+    private double[] samples;
+    public double[] Samples {
+      get {
+        return samples;
+      }
+    }
+
+    public string ProblemName {
+      get {
+        if (metadata.ContainsKey(PROBLEMNAME)) {
+          return metadata[PROBLEMNAME][0].stringValue;
+        } else return "-";
+      }
+    }
+
+    public string[] VariableNames {
+      get {
+        if (metadata.ContainsKey(VARIABLENAMES)) {
+          List<Token> nameList = metadata[VARIABLENAMES];
+          string[] names = new string[nameList.Count];
+          for (int i = 0; i < names.Length; i++) {
+            names[i] = nameList[i].stringValue;
+          }
+          return names;
+        } else {
+          string[] names = new string[columns];
+          for (int i = 0; i < names.Length; i++) {
+            names[i] = "X" + i.ToString("000");
+          }
+          return names;
+        }
+      }
+    }
+
+    public int TargetVariable {
+      get {
+        if (metadata.ContainsKey(TARGETVARIABLE)) {
+          return metadata[TARGETVARIABLE][0].intValue;
+        } else return 0; // default is the first column
+      }
+    }
+
+    public int MaxTreeHeight {
+      get {
+        if (metadata.ContainsKey(MAXIMUMTREEHEIGHT)) {
+          return metadata[MAXIMUMTREEHEIGHT][0].intValue;
+        } else return 0;
+      }
+    }
+
+    public int MaxTreeSize {
+      get {
+        if (metadata.ContainsKey(MAXIMUMTREESIZE)) {
+          return metadata[MAXIMUMTREESIZE][0].intValue;
+        } else return 0;
+      }
+    }
+
+    public int TrainingSamplesStart {
+      get {
+        if (metadata.ContainsKey(TRAININGSAMPLESSTART)) {
+          return metadata[TRAININGSAMPLESSTART][0].intValue;
+        } else return 0;
+      }
+    }
+
+    public int TrainingSamplesEnd {
+      get {
+        if (metadata.ContainsKey(TRAININGSAMPLESEND)) {
+          return metadata[TRAININGSAMPLESEND][0].intValue;
+        } else return rows;
+      }
+    }
+    public int ValidationSamplesStart {
+      get {
+        if (metadata.ContainsKey(VALIDATIONSAMPLESSTART)) {
+          return metadata[VALIDATIONSAMPLESSTART][0].intValue;
+        } else return 0;
+      }
+    }
+
+    public int ValidationSamplesEnd {
+      get {
+        if (metadata.ContainsKey(VALIDATIONSAMPLESEND)) {
+          return metadata[VALIDATIONSAMPLESEND][0].intValue;
+        } else return rows;
+      }
+    }
+    public int TestSamplesStart {
+      get {
+        if (metadata.ContainsKey(TESTSAMPLESSTART)) {
+          return metadata[TESTSAMPLESSTART][0].intValue;
+        } else return 0;
+      }
+    }
+
+    public int TestSamplesEnd {
+      get {
+        if (metadata.ContainsKey(TESTSAMPLESEND)) {
+          return metadata[TESTSAMPLESEND][0].intValue;
+        } else return rows;
+      }
+    }
+
+    public List<int> NonInputVariables {
+      get {
+        List<int> disallowedVariables = new List<int>();
+        if (metadata.ContainsKey(NONINPUTVARIABLES)) {
+          foreach (Token t in metadata[NONINPUTVARIABLES]) {
+            disallowedVariables.Add(t.intValue);
+          }
+        }
+        return disallowedVariables;
+      }
+    }
+
+    public DatasetParser() {
+      this.metadata = new Dictionary<string, List<Token>>();
+      samplesList = new List<List<double>>();
+    }
+
+    public void Reset() {
+      metadata.Clear();
+      samplesList.Clear();
+    }
+
+    public void Import(string importFileName, bool strict) {
+      TryParse(importFileName, strict);
+      // translate the list of samples into a DoubleMatrixData item
+      samples = new double[samplesList.Count * samplesList[0].Count];
+      rows = samplesList.Count;
+      columns = samplesList[0].Count;
+
+      int i = 0;
+      int j = 0;
+      foreach (List<double> row in samplesList) {
+        j = 0;
+        foreach (double element in row) {
+          samples[i * columns + j] = element;
+          j++;
+        }
+        i++;
+      }
+    }
+
+    private void TryParse(string importFileName, bool strict) {
+      Exception lastEx = null;
+      NumberFormatInfo[] possibleFormats = new NumberFormatInfo[] { NumberFormatInfo.InvariantInfo, CultureInfo.GetCultureInfo("de-DE").NumberFormat, NumberFormatInfo.CurrentInfo };
+      foreach (NumberFormatInfo numberFormat in possibleFormats) {
+        using (StreamReader reader = new StreamReader(importFileName)) {
+          tokenizer = new Tokenizer(reader, numberFormat);
+          try {
+            // parse the file
+            Parse(strict);
+            return; // parsed without errors -> return;
+          }
+          catch (DataFormatException ex) {
+            lastEx = ex;
+          }
+        }
+      }
+      // all number formats threw an exception -> rethrow the last exception
+      throw lastEx;
+    }
+
+    #region tokenizer
+    internal enum TokenTypeEnum {
+      At, Assign, NewLine, String, Double, Int, WhiteSpace
+    }
+
+    internal class Token {
+      public TokenTypeEnum type;
+      public string stringValue;
+      public double doubleValue;
+      public int intValue;
+
+      public Token(TokenTypeEnum type, string value) {
+        this.type = type;
+        stringValue = value;
+        doubleValue = 0.0;
+        intValue = 0;
+      }
+
+      public override string ToString() {
+        return stringValue;
+      }
+    }
+
+
+    class Tokenizer {
+      private StreamReader reader;
+      private List<Token> tokens;
+      private string[] separators = new string[] { "@", "=", ";", "\t" };
+      private NumberFormatInfo numberFormatInfo;
+
+      public int CurrentLineNumber = 0;
+      public string CurrentLine;
+
+      public static Token NewlineToken = new Token(TokenTypeEnum.NewLine, "\n");
+      public static Token AtToken = new Token(TokenTypeEnum.At, "@");
+      public static Token AssignmentToken = new Token(TokenTypeEnum.Assign, "=");
+      public static Token SeparatorToken = new Token(TokenTypeEnum.WhiteSpace, "");
+      public string[] Separators {
+        get { return separators; }
+        set { separators = value; }
+      }
+
+
+      public Tokenizer(StreamReader reader, NumberFormatInfo numberFormatInfo) {
+        this.reader = reader;
+        this.numberFormatInfo = numberFormatInfo;
+        tokens = new List<Token>();
+        ReadNextTokens();
+      }
+
+      private void ReadNextTokens() {
+        if (!reader.EndOfStream) {
+          CurrentLine = reader.ReadLine();
+          Token[] newTokens = Array.ConvertAll(CurrentLine.Split(separators, StringSplitOptions.None), delegate(string str) {
+            return MakeToken(str.Trim());
+          });
+
+          foreach (Token tok in newTokens) {
+            if (tok != SeparatorToken) tokens.Add(tok);
+          }
+          tokens.Add(NewlineToken);
+          CurrentLineNumber++;
+        }
+      }
+
+      private Token MakeToken(string strToken) {
+        Token token = new Token(TokenTypeEnum.String, strToken);
+
+        // try to parse as a number first
+        if (int.TryParse(strToken, NumberStyles.Integer, numberFormatInfo, out token.intValue)) {
+          token.type = TokenTypeEnum.Int;
+          return token;
+        } else if (double.TryParse(strToken, NumberStyles.Float, numberFormatInfo, out token.doubleValue)) {
+          token.type = TokenTypeEnum.Double;
+          return token;
+        } else if (String.IsNullOrEmpty(strToken)) {
+          token.type = TokenTypeEnum.WhiteSpace;
+          return token;
+        }
+        // couldn't parse the token as an int or float number so return a string token
+        return token;
+      }
+
+      public Token Peek() {
+        return tokens[0];
+      }
+
+      public Token Next() {
+        Token next = tokens[0];
+        tokens.RemoveAt(0);
+        if (tokens.Count == 0) {
+          ReadNextTokens();
+        }
+        return next;
+      }
+
+      public bool HasNext() {
+        return tokens.Count > 0 || !reader.EndOfStream;
+      }
+    }
+    #endregion
+
+    #region parsing
+    private void Parse(bool strict) {
+      ParseMetaData(strict);
+      if (!tokenizer.HasNext()) Error("Couldn't parse data values. Probably because of incorrect number format (the parser expects english number format with a '.' as decimal separator).", "", tokenizer.CurrentLineNumber);
+      ParseSampleData(strict);
+      if (samplesList.Count == 0) Error("Couldn't parse data values. Probably because of incorrect number format (the parser expects english number format with a '.' as decimal separator).", "", tokenizer.CurrentLineNumber);
+    }
+
+    private void ParseSampleData(bool strict) {
+      List<double> row = new List<double>();
+      while (tokenizer.HasNext()) {
+        Token current = tokenizer.Next();
+        if (current.type == TokenTypeEnum.WhiteSpace) {
+          row.Add(double.NaN);
+        } else if (current.type == TokenTypeEnum.Double) {
+          // just take the value
+          row.Add(current.doubleValue);
+        } else if (current.type == TokenTypeEnum.Int) {
+          // translate the int value to double
+          row.Add((double)current.intValue);
+        } else if (current == Tokenizer.NewlineToken) {
+          // when parsing strictly all rows have to have the same number of values            
+          if (strict) {
+            // the first row defines how many samples are needed
+            if (samplesList.Count > 0 && samplesList[0].Count != row.Count) {
+              Error("The first row of the dataset has " + samplesList[0].Count + " columns." +
+                "\nLine " + tokenizer.CurrentLineNumber + " has " + row.Count + " columns.", "", tokenizer.CurrentLineNumber);
+            }
+          } else if (samplesList.Count > 0) {
+            // when we are not strict then fill or drop elements as needed
+            if (samplesList[0].Count > row.Count) {
+              // fill with NAN
+              for (int i = row.Count; i < samplesList[0].Count; i++) {
+                row.Add(double.NaN);
+              }
+            } else if (samplesList[0].Count < row.Count) {
+              // drop last k elements where k = n - length of first row
+              row.RemoveRange(samplesList[0].Count - 1, row.Count - samplesList[0].Count);
+            }
+          }
+
+          // add the current row to the collection of rows and start a new row
+          samplesList.Add(row);
+          row = new List<double>();
+        } else {
+          // found an unexpected token => return false when parsing strictly
+          // when we are parsing non-strictly we also allow unreadable values inserting NAN instead
+          if (strict) {
+            Error("Unexpected token.", current.stringValue, tokenizer.CurrentLineNumber);
+          } else {
+            row.Add(double.NaN);
+          }
+        }
+      }
+    }
+
+    private void ParseMetaData(bool strict) {
+      while (tokenizer.HasNext() && (tokenizer.Peek().type == TokenTypeEnum.WhiteSpace || tokenizer.Peek().type == TokenTypeEnum.String)) {
+        while (tokenizer.HasNext() && tokenizer.Peek().type == TokenTypeEnum.WhiteSpace) tokenizer.Next();
+        Token nameToken = tokenizer.Next();
+        if (nameToken.type != TokenTypeEnum.String)
+          Error("Expected a variable name.", nameToken.stringValue, tokenizer.CurrentLineNumber);
+
+        List<Token> tokens = new List<Token>();
+        Token valueToken;
+        while (tokenizer.HasNext() && tokenizer.Peek().type == TokenTypeEnum.WhiteSpace) valueToken = tokenizer.Next();
+        valueToken = tokenizer.Next();
+        while (valueToken != Tokenizer.NewlineToken) {
+          tokens.Add(valueToken);
+          while (tokenizer.HasNext() && tokenizer.Peek().type == TokenTypeEnum.WhiteSpace) tokenizer.Next();
+          valueToken = tokenizer.Next();
+        }
+
+        metadata[nameToken.stringValue] = tokens;
+      }
+    }
+
+    private void Expect(Token expectedToken) {
+      Token actualToken = tokenizer.Next();
+      if (actualToken != expectedToken) {
+        Error("Expected: " + expectedToken, actualToken.stringValue, tokenizer.CurrentLineNumber);
+      }
+    }
+
+    private void Error(string message, string token, int lineNumber) {
+      throw new DataFormatException("Error while parsing.\n" + message, token, lineNumber);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.cs	(revision 1270)
@@ -0,0 +1,171 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.DataAnalysis {
+  public partial class DatasetView : EditorBase {
+    public Dataset Dataset {
+      get { return (Dataset)Item; }
+      set {
+        Item = value;
+        Refresh();
+      }
+    }
+    public DatasetView()
+      : base() {
+      InitializeComponent();
+      DiscoveryService discovery = new DiscoveryService();
+      IDatasetManipulator[] manipuators = discovery.GetInstances<IDatasetManipulator>();
+      contextMenuStrip.Items.Add(new ToolStripSeparator());
+      foreach(IDatasetManipulator manipulator in manipuators) {
+        contextMenuStrip.Items.Add(new ToolStripButton(manipulator.Action,null , delegate(object source, EventArgs args) 
+          { 
+            manipulator.Execute(Dataset);
+            Refresh();
+          }));
+      }
+      
+      // format all cells with the round-trip formatter to make sure that values that are exported and imported to
+      // another C# app (HL2) have the same numeric value
+      dataGridView.DefaultCellStyle.Format = "r";
+    }
+
+    public DatasetView(Dataset dataset)
+      : this() {
+      this.Dataset = dataset;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (Dataset != null) {
+        // DataGridView is bitching around. When it's columnCount (maybe also rowCount) is changed it creates
+        // new column objects and they have SortMode set to 'automatic'. However this is not allowed if the
+        // selectionmode is set to 'ColumnHeaderSelect' at the same time, resulting in an exception.
+        // A solution is to set the SelectionMode to CellSelect before any changes. After the columns
+        // have been updated (and their SortMode set to 'NotSortable') we switch back to SelectionMode=ColumnHeaderSelect.
+        dataGridView.SelectionMode = DataGridViewSelectionMode.CellSelect;
+        dataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
+        int rows = Dataset.Rows;
+        int columns = Dataset.Columns;
+        nameTextBox.Text = Dataset.Name;
+        rowsTextBox.Text = rows + "";
+        columnsTextBox.Text = columns + "";
+        dataGridView.ColumnCount = columns;
+        dataGridView.RowCount = rows;
+        for (int i = 0; i < rows; i++) {
+          for (int j = 0; j < columns; j++) {
+            dataGridView.Rows[i].Cells[j].Value = Dataset.GetValue(i, j);
+            dataGridView.Rows[i].HeaderCell.Value = i.ToString();
+          }
+        }
+        for (int i = 0; i < columns; i++) {
+          dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; // SortMode has to be NotSortable to allow ColumnHeaderSelect
+          dataGridView.Columns[i].Name = GetColumnName(i);
+        }
+        dataGridView.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect; // switch back to column selection
+        dataGridView.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
+      } else {
+        rowsTextBox.Text = "1";
+        columnsTextBox.Text = "1";
+        dataGridView.ColumnCount = 1;
+        dataGridView.RowCount = 1;
+      }
+    }
+
+    private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) {
+      if (ValidateData((string)e.FormattedValue)) {
+        SetArrayElement(e.RowIndex, e.ColumnIndex, (string)e.FormattedValue);
+        e.Cancel = false;
+      } else {
+        e.Cancel = true;
+      }
+    }
+
+
+    private void SetArrayElement(int row, int column, string element) {
+      double result;
+      double.TryParse(element, out result);
+      if (result != Dataset.GetValue(row, column)) {
+        Dataset.SetValue(row, column, result);
+      }
+    }
+
+    private bool ValidateData(string element) {
+      double result;
+      return element != null && double.TryParse(element, out result);
+    }
+
+    private void scaleValuesToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach(DataGridViewColumn column in dataGridView.SelectedColumns) {
+        Dataset.ScaleVariable(column.Index);
+        column.Name = GetColumnName(column.Index) + " [scaled]";
+      }
+      Refresh();
+    }
+
+    private void originalValuesToolStripMenuItem_Click(object sender, EventArgs e) {
+      foreach(DataGridViewColumn column in dataGridView.SelectedColumns) {
+        Dataset.UnscaleVariable(column.Index);
+        column.Name = GetColumnName(column.Index);
+      }
+      Refresh();      
+    }
+
+    private string GetColumnName(int index) {
+      if(Dataset.VariableNames.Length == dataGridView.Columns.Count) {
+        return Dataset.VariableNames[index];
+      } else {
+        return "Var " + index;
+      }
+    }
+
+    private void showScalingToolStripMenuItem_Click(object sender, EventArgs e) {
+      ManualScalingControl scalingControl = new ManualScalingControl(false);
+      double[,] scalingParameters = new double[2, Dataset.Columns];
+      for(int i = 0; i < Dataset.Columns; i++) {
+        scalingParameters[0, i] = Dataset.ScalingFactor[i];
+        scalingParameters[1, i] = Dataset.ScalingOffset[i];
+      }
+      scalingControl.Data = scalingParameters;
+      scalingControl.ShowDialog();
+    }
+
+    private void scaleValuesmanuallyToolStripMenuItem_Click(object sender, EventArgs e) {
+      ManualScalingControl scalingControl = new ManualScalingControl(true);
+      double[,] scalingParameters = new double[2, Dataset.Columns];
+      for(int i = 0; i < Dataset.Columns; i++) {
+        scalingParameters[0, i] = Dataset.ScalingFactor[i];
+        scalingParameters[1, i] = Dataset.ScalingOffset[i];
+      }
+      scalingControl.Data = scalingParameters;
+      if(scalingControl.ShowDialog() == DialogResult.OK) {
+        for(int i = 0; i < Dataset.Columns; i++) {
+          Dataset.ScaleVariable(i, scalingControl.Data[0, i], scalingControl.Data[1, i]);
+        }
+      }
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.designer.cs	(revision 1270)
@@ -0,0 +1,212 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.DataAnalysis {
+  partial class DatasetView {
+    /// <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();
+      System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+      this.rowsTextBox = new System.Windows.Forms.TextBox();
+      this.columnsTextBox = new System.Windows.Forms.TextBox();
+      this.dataGridView = new System.Windows.Forms.DataGridView();
+      this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.scaleValuesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.scaleValuesmanuallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.showScalingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.originalValuesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.rowsLabel = new System.Windows.Forms.Label();
+      this.columnsLabel = new System.Windows.Forms.Label();
+      this.nameLabel = new System.Windows.Forms.Label();
+      this.nameTextBox = new System.Windows.Forms.TextBox();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.contextMenuStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // rowsTextBox
+      // 
+      this.rowsTextBox.Location = new System.Drawing.Point(50, 29);
+      this.rowsTextBox.Name = "rowsTextBox";
+      this.rowsTextBox.ReadOnly = true;
+      this.rowsTextBox.Size = new System.Drawing.Size(100, 20);
+      this.rowsTextBox.TabIndex = 1;
+      // 
+      // columnsTextBox
+      // 
+      this.columnsTextBox.Location = new System.Drawing.Point(217, 29);
+      this.columnsTextBox.Name = "columnsTextBox";
+      this.columnsTextBox.ReadOnly = true;
+      this.columnsTextBox.Size = new System.Drawing.Size(100, 20);
+      this.columnsTextBox.TabIndex = 2;
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = 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.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.ContextMenuStrip = this.contextMenuStrip;
+      this.dataGridView.Location = new System.Drawing.Point(3, 55);
+      this.dataGridView.Name = "dataGridView";
+      dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
+      dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
+      dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
+      dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+      dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+      dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+      this.dataGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle1;
+      this.dataGridView.Size = new System.Drawing.Size(554, 485);
+      this.dataGridView.TabIndex = 3;
+      this.dataGridView.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView_CellValidating);
+      // 
+      // contextMenuStrip
+      // 
+      this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.scaleValuesToolStripMenuItem,
+            this.scaleValuesmanuallyToolStripMenuItem,
+            this.showScalingToolStripMenuItem,
+            this.originalValuesToolStripMenuItem});
+      this.contextMenuStrip.Name = "contextMenuStrip";
+      this.contextMenuStrip.Size = new System.Drawing.Size(187, 92);
+      // 
+      // scaleValuesToolStripMenuItem
+      // 
+      this.scaleValuesToolStripMenuItem.Name = "scaleValuesToolStripMenuItem";
+      this.scaleValuesToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+      this.scaleValuesToolStripMenuItem.Text = "Scale values [0..1]";
+      this.scaleValuesToolStripMenuItem.Click += new System.EventHandler(this.scaleValuesToolStripMenuItem_Click);
+      // 
+      // scaleValuesmanuallyToolStripMenuItem
+      // 
+      this.scaleValuesmanuallyToolStripMenuItem.Name = "scaleValuesmanuallyToolStripMenuItem";
+      this.scaleValuesmanuallyToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+      this.scaleValuesmanuallyToolStripMenuItem.Text = "Scale values (manually)";
+      this.scaleValuesmanuallyToolStripMenuItem.Click += new System.EventHandler(this.scaleValuesmanuallyToolStripMenuItem_Click);
+      // 
+      // showScalingToolStripMenuItem
+      // 
+      this.showScalingToolStripMenuItem.Name = "showScalingToolStripMenuItem";
+      this.showScalingToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+      this.showScalingToolStripMenuItem.Text = "Show scaling...";
+      this.showScalingToolStripMenuItem.Click += new System.EventHandler(this.showScalingToolStripMenuItem_Click);
+      // 
+      // originalValuesToolStripMenuItem
+      // 
+      this.originalValuesToolStripMenuItem.Name = "originalValuesToolStripMenuItem";
+      this.originalValuesToolStripMenuItem.Size = new System.Drawing.Size(186, 22);
+      this.originalValuesToolStripMenuItem.Text = "Unscale values";
+      this.originalValuesToolStripMenuItem.Click += new System.EventHandler(this.originalValuesToolStripMenuItem_Click);
+      // 
+      // rowsLabel
+      // 
+      this.rowsLabel.AutoSize = true;
+      this.rowsLabel.Location = new System.Drawing.Point(3, 32);
+      this.rowsLabel.Name = "rowsLabel";
+      this.rowsLabel.Size = new System.Drawing.Size(37, 13);
+      this.rowsLabel.TabIndex = 4;
+      this.rowsLabel.Text = "Rows:";
+      // 
+      // columnsLabel
+      // 
+      this.columnsLabel.AutoSize = true;
+      this.columnsLabel.Location = new System.Drawing.Point(161, 32);
+      this.columnsLabel.Name = "columnsLabel";
+      this.columnsLabel.Size = new System.Drawing.Size(50, 13);
+      this.columnsLabel.TabIndex = 5;
+      this.columnsLabel.Text = "Columns:";
+      // 
+      // nameLabel
+      // 
+      this.nameLabel.AutoSize = true;
+      this.nameLabel.Location = new System.Drawing.Point(3, 6);
+      this.nameLabel.Name = "nameLabel";
+      this.nameLabel.Size = new System.Drawing.Size(41, 13);
+      this.nameLabel.TabIndex = 6;
+      this.nameLabel.Text = "Name: ";
+      // 
+      // nameTextBox
+      // 
+      this.nameTextBox.Location = new System.Drawing.Point(50, 3);
+      this.nameTextBox.Name = "nameTextBox";
+      this.nameTextBox.ReadOnly = true;
+      this.nameTextBox.Size = new System.Drawing.Size(219, 20);
+      this.nameTextBox.TabIndex = 7;
+      // 
+      // DatasetView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.nameTextBox);
+      this.Controls.Add(this.nameLabel);
+      this.Controls.Add(this.columnsLabel);
+      this.Controls.Add(this.rowsLabel);
+      this.Controls.Add(this.dataGridView);
+      this.Controls.Add(this.columnsTextBox);
+      this.Controls.Add(this.rowsTextBox);
+      this.Name = "DatasetView";
+      this.Size = new System.Drawing.Size(560, 543);
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.contextMenuStrip.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox rowsTextBox;
+    private System.Windows.Forms.TextBox columnsTextBox;
+    private System.Windows.Forms.DataGridView dataGridView;
+    private System.Windows.Forms.Label rowsLabel;
+    private System.Windows.Forms.Label columnsLabel;
+    private System.Windows.Forms.Label nameLabel;
+    private System.Windows.Forms.TextBox nameTextBox;
+    private System.Windows.Forms.ContextMenuStrip contextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem scaleValuesToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem originalValuesToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem scaleValuesmanuallyToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem showScalingToolStripMenuItem;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/DatasetView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/HeuristicLab.DataAnalysis.csproj	(revision 1270)
@@ -0,0 +1,134 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DataAnalysis</RootNamespace>
+    <AssemblyName>HeuristicLab.DataAnalysis-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.DataAnalysis-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.DataAnalysis-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DataFormatException.cs" />
+    <Compile Include="Dataset.cs" />
+    <Compile Include="DatasetParser.cs" />
+    <Compile Include="DatasetView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DatasetView.designer.cs">
+      <DependentUpon>DatasetView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabDataAnalysisPlugin.cs" />
+    <Compile Include="IDatasetManipulator.cs" />
+    <Compile Include="ManualScalingControl.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ManualScalingControl.Designer.cs">
+      <DependentUpon>ManualScalingControl.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Statistics.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="DatasetView.resx">
+      <DependentUpon>DatasetView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ManualScalingControl.resx">
+      <DependentUpon>ManualScalingControl.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/HeuristicLabDataAnalysisPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/HeuristicLabDataAnalysisPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/HeuristicLabDataAnalysisPlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.DataAnalysis {
+  [ClassInfo(Name = "HeuristicLab.DataAnalysis-3.2")]
+  [PluginFile(Filename = "HeuristicLab.DataAnalysis-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  public class HeuristicLabDataAnalysisPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/IDatasetManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/IDatasetManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/IDatasetManipulator.cs	(revision 1270)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.DataAnalysis {
+  interface IDatasetManipulator {
+    string Action { get; }
+    void Execute(Dataset dataset);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.Designer.cs	(revision 1270)
@@ -0,0 +1,88 @@
+﻿namespace HeuristicLab.DataAnalysis {
+  partial class ManualScalingControl {
+    /// <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.dataGridView = new System.Windows.Forms.DataGridView();
+      this.okButton = new System.Windows.Forms.Button();
+      this.cancelButton = new System.Windows.Forms.Button();
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // dataGridView
+      // 
+      this.dataGridView.AllowUserToAddRows = false;
+      this.dataGridView.AllowUserToDeleteRows = 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.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+      this.dataGridView.Location = new System.Drawing.Point(12, 12);
+      this.dataGridView.Name = "dataGridView";
+      this.dataGridView.ReadOnly = true;
+      this.dataGridView.Size = new System.Drawing.Size(268, 213);
+      this.dataGridView.TabIndex = 0;
+      this.dataGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView_CellValueChanged);
+      this.dataGridView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridView_KeyDown);
+      // 
+      // okButton
+      // 
+      this.okButton.Location = new System.Drawing.Point(12, 231);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "okButton";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.button_Click);
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Location = new System.Drawing.Point(93, 231);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "cancelButton";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // ManualScalingControl
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(292, 266);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.Controls.Add(this.dataGridView);
+      this.Name = "ManualScalingControl";
+      ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.DataGridView dataGridView;
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Button cancelButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.cs	(revision 1270)
@@ -0,0 +1,115 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.DataAnalysis {
+  public partial class ManualScalingControl : Form {
+    public ManualScalingControl(bool editingAllowed) {
+      InitializeComponent();
+      dataGridView.ReadOnly = !editingAllowed;
+      okButton.Text = editingAllowed ? "Scale" : "Close";
+      cancelButton.Visible = editingAllowed;
+      cancelButton.Text = "Cancel";
+
+      // format all cells with the round-trip formatter to make sure that exported and imported values have
+      // the same numeric value
+      dataGridView.DefaultCellStyle.Format = "r";
+    }
+
+    private double[,] data;
+    public double[,] Data {
+      get {
+        return data;
+      }
+      set {
+        data = value;
+        UpdateControls();
+      }
+    }
+
+    protected void UpdateControls() {
+      Refresh();
+      dataGridView.ColumnCount = data.GetLength(0);
+      dataGridView.RowCount = data.GetLength(1);
+      for(int i = 0; i < dataGridView.RowCount; i++) {
+        for(int j = 0; j < dataGridView.ColumnCount; j++) {
+          dataGridView[j,i].Value = data[j, i];
+        }
+      }
+      dataGridView.Columns[0].HeaderText = "Factor";
+      dataGridView.Columns[1].HeaderText = "Offset";
+    }
+
+    private void button_Click(object sender, EventArgs e) {
+      DialogResult = DialogResult.OK;
+    }
+
+    private void cancelButton_Click(object sender, EventArgs e) {
+      DialogResult = DialogResult.Cancel;
+    }
+
+    // stolen from the internets
+    private void dataGridView_KeyDown(object sender, KeyEventArgs e) {
+      if(e.Control && e.KeyCode == Keys.C) {
+        DataObject d = dataGridView.GetClipboardContent();
+        Clipboard.SetDataObject(d);
+        e.Handled = true;
+      } else if(e.Control && e.KeyCode == Keys.V) {
+        string s = Clipboard.GetText();
+        string[] lines = s.Split(new char[] {'\n', '\r'},StringSplitOptions.RemoveEmptyEntries);
+        int row = dataGridView.CurrentCell.RowIndex;
+        int col = dataGridView.CurrentCell.ColumnIndex;
+        foreach(string line in lines) {
+          if(row < dataGridView.RowCount && line.Length > 0) {
+            string[] cells = line.Split(new char[] {'\t',' ',';'},StringSplitOptions.RemoveEmptyEntries);
+            for(int i = 0; i < cells.Length; i++) {
+              if(col + i < this.dataGridView.ColumnCount) {
+                dataGridView[col + i, row].Value = double.Parse(cells[i]);
+              } else {
+                break;
+              }
+            }
+            row++;
+          } else {
+            break;
+          }
+        }
+        e.Handled = true;
+      }
+    }
+
+    private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
+      if(e.RowIndex >= 0 && e.ColumnIndex >= 0) {
+        data[e.ColumnIndex, e.RowIndex] = (double)dataGridView[e.ColumnIndex, e.RowIndex].Value;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/ManualScalingControl.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.DataAnalysis")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("6db21047-d1dc-4b21-9064-45c4d114ff9f")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Statistics.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Statistics.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DataAnalysis/Statistics.cs	(revision 1270)
@@ -0,0 +1,243 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.DataAnalysis {
+  public class Statistics {
+
+    /// <summary>
+    /// Minimum returns the smalles entry of values.
+    /// Throws and exception if values is empty.
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static T Minimum<T>(IEnumerable<T> values) where T : struct, IComparable, IComparable<T> {
+      IEnumerator<T> enumerator = values.GetEnumerator();
+
+      // this will throw an exception if the values collection is empty
+      enumerator.MoveNext();
+      T minimum = enumerator.Current;
+
+      while(enumerator.MoveNext()) {
+        T current = enumerator.Current;
+        if(current.CompareTo(minimum) < 0) {
+          minimum = current;
+        }
+      }
+
+      return minimum;
+    }
+
+    /// <summary>
+    /// Maximum returns the largest entry of values.
+    /// Throws an exception if values is empty.
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static T Maximum<T>(IEnumerable<T> values) where T : struct, IComparable, IComparable<T> {
+      IEnumerator<T> enumerator = values.GetEnumerator();
+
+      // this will throw an exception if the values collection is empty
+      enumerator.MoveNext();
+      T maximum = enumerator.Current;
+
+      while(enumerator.MoveNext()) {
+        T current = enumerator.Current;
+        if(current.CompareTo(maximum) > 0) {
+          maximum = current;
+        }
+      }
+
+      return maximum;
+    }
+
+    /// <summary>
+    /// Range calculates the difference between the larges and smallest entry of values.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static double Range(double[] values) {
+      return Range(values, 0, values.Length);
+    }
+
+    /// <summary>
+    /// Range calculates the difference between the larges and smallest entry of values.
+    /// </summary>
+    public static double Range(List<double> values) {
+      return Range(values.ToArray(), 0, values.Count);
+    }
+
+    /// <summary>
+    /// Range calculates the difference between the largest and smallest entry of values between start and end.
+    /// </summary>
+    /// <param name="values">collection of values</param>
+    /// <param name="start">start index (inclusive)</param>
+    /// <param name="end">end index (exclusive)</param>
+    /// <returns></returns>
+    public static double Range(double[] values, int start, int end) {
+      if(start < 0 || start > values.Length || end < 0 || end > values.Length || start > end) {
+        throw new InvalidOperationException();
+      }
+
+      double minimum = values[start];
+      double maximum = minimum;
+      for(int i = start; i < end; i++) {
+        if(values[i] > maximum) {
+          maximum = values[i];
+        }
+        if(values[i] < minimum) {
+          minimum = values[i];
+        }
+      }
+      return (maximum - minimum);
+    }
+
+    /// <summary>
+    /// calculates the sum of all values.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static double Sum(double[] values) {
+      int n = values.Length;
+      double sum = 0.0;
+      for(int i = 0; i < n; i++) {
+        if(double.IsNaN(values[i])) {
+          throw new NotFiniteNumberException();
+        } else {
+          sum += values[i];
+        }
+      }
+      return sum;
+    }
+
+    /// <summary>
+    /// Calculates the mean of all values.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static double Mean(List<double> values) {
+      return Mean(values.ToArray(), 0, values.Count);
+    }
+
+    // Calculates the mean of all values.
+    public static double Mean(double[] values) {
+      return Mean(values, 0, values.Length);
+    }
+
+    /// <summary>
+    /// Calculates the mean of the values between start and end.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <param name="start">start index (inclusive)</param>
+    /// <param name="end">end index(exclusive)</param>
+    /// <returns></returns>
+    public static double Mean(double[] values, int start, int end) {
+      if(values.Length == 0) throw new InvalidOperationException();
+      double sum = 0.0;
+      int n = 0;
+      for(int i = start; i < end; i++) {
+        if(!double.IsNaN(values[i])) {
+          sum += values[i];
+          n++;
+        }
+      }
+      if (n == 0) throw new InvalidOperationException();
+      return sum / n;
+    }
+
+    /// <summary>
+    /// Calculates the median of the values.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static double Median(double[] values) {
+      if(values.Length == 0) throw new InvalidOperationException();
+      int n = values.Length;
+      if(n == 0)
+        return 0;
+
+      double[] sortedValues = new double[n];
+
+      Array.Copy(values, sortedValues, n);
+      Array.Sort(sortedValues);
+
+      // return the middle element (if n is uneven) or the average of the two middle elements if n is even.
+      if(n % 2 == 1) {
+        return sortedValues[n / 2];
+      } else {
+        return (sortedValues[n / 2] + sortedValues[n / 2 + 1]) / 2.0;
+      }
+    }
+
+
+    /// <summary>
+    /// Calculates the standard deviation of values.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static double StandardDeviation(double[] values) {
+      return Math.Sqrt(Variance(values));
+    }
+
+    /// <summary>
+    /// Calculates the variance of values.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <returns></returns>
+    public static double Variance(double[] values) {
+      return Variance(values, 0, values.Length);
+    }
+
+
+    /// <summary>
+    /// Calculates the variance of the entries of values between start and end.
+    /// </summary>
+    /// <param name="values"></param>
+    /// <param name="start">start index (inclusive)</param>
+    /// <param name="end">end index (exclusive)</param>
+    /// <returns></returns>
+    public static double Variance(double[] values, int start, int end) {
+      if (end - start == 1)
+        return 0.0;
+
+      double mean = Mean(values, start, end);
+      double squaredErrorsSum = 0.0;
+
+      int n = 0;
+      for (int i = start; i < end; i++) {
+        if (!double.IsNaN(values[i])) {
+          double d = values[i] - mean;
+          squaredErrorsSum += d * d;
+          n++;
+        }
+      }
+      if (n < 2) {
+        throw new InvalidOperationException();
+      }
+      return squaredErrorsSum / (n - 1);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngine.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngine.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngine.cs	(revision 1270)
@@ -0,0 +1,348 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.Threading;
+using HeuristicLab.Core;
+using HeuristicLab.Grid;
+using System.ServiceModel;
+using System.IO;
+using System.IO.Compression;
+using HeuristicLab.PluginInfrastructure;
+using System.Windows.Forms;
+using System.Diagnostics;
+
+namespace HeuristicLab.DistributedEngine {
+  public class DistributedEngine : EngineBase, IEditable {
+    private List<KeyValuePair<ProcessingEngine, AtomicOperation>> suspendedEngines = new List<KeyValuePair<ProcessingEngine, AtomicOperation>>();
+    private JobManager jobManager;
+    private string serverAddress;
+    public string ServerAddress {
+      get { return serverAddress; }
+      set {
+        if(value != serverAddress) {
+          serverAddress = value;
+        }
+      }
+    }
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      DistributedEngine clone = (DistributedEngine)base.Clone(clonedObjects);
+      clone.ServerAddress = serverAddress;
+      return clone;
+    }
+
+    public override IView CreateView() {
+      return new DistributedEngineEditor(this);
+    }
+    public virtual IEditor CreateEditor() {
+      return new DistributedEngineEditor(this);
+    }
+
+    public override bool Terminated {
+      get {
+        return base.Terminated && suspendedEngines.Count == 0;
+      }
+    }
+
+    public override void Reset() {
+      suspendedEngines.Clear();
+      base.Reset();
+    }
+
+    public override void Execute() {
+      if(jobManager == null) this.jobManager = new JobManager(serverAddress);
+      jobManager.Reset();
+      base.Execute();
+    }
+
+    public override void ExecuteSteps(int steps) {
+      throw new InvalidOperationException("DistributedEngine doesn't support stepwise execution");
+    }
+
+    protected override void ProcessNextOperation() {
+      if(suspendedEngines.Count > 0) {
+        ProcessSuspendedEngines();
+      } else {
+        IOperation operation = myExecutionStack.Pop();
+        ProcessOperation(operation);
+      }
+    }
+
+    private void ProcessSuspendedEngines() {
+      WaitHandle[] waitHandles = new WaitHandle[suspendedEngines.Count];
+      int i = 0;
+      foreach(KeyValuePair<ProcessingEngine, AtomicOperation> suspendedPair in suspendedEngines) {
+        waitHandles[i++] = jobManager.BeginExecuteEngine(suspendedPair.Key);
+      }
+      WaitForAll(waitHandles);
+      // collect results
+      List<KeyValuePair<ProcessingEngine, AtomicOperation>> results = new List<KeyValuePair<ProcessingEngine, AtomicOperation>>();
+      try {
+        foreach(KeyValuePair<ProcessingEngine, AtomicOperation> suspendedPair in suspendedEngines) {
+          KeyValuePair<ProcessingEngine, AtomicOperation> p = new KeyValuePair<ProcessingEngine, AtomicOperation>(
+              jobManager.EndExecuteOperation(suspendedPair.Value),
+              suspendedPair.Value);
+          results.Add(p);
+        }
+      } catch(Exception e) {
+        // this exception means there was a problem with the underlying communication infrastructure
+        // -> show message dialog and abort engine
+        Abort();
+        ThreadPool.QueueUserWorkItem(delegate(object state) { OnExceptionOccurred(e); });
+        return;
+      }
+      // got all result engines without an exception -> merge results
+      ProcessResults(results);
+    }
+
+    private void ProcessOperation(IOperation operation) {
+      if(operation is AtomicOperation) {
+        AtomicOperation atomicOperation = (AtomicOperation)operation;
+        IOperation next = null;
+        try {
+          next = atomicOperation.Operator.Execute(atomicOperation.Scope);
+        } catch(Exception ex) {
+          // push operation on stack again
+          myExecutionStack.Push(atomicOperation);
+          Abort();
+          ThreadPool.QueueUserWorkItem(delegate(object state) { OnExceptionOccurred(ex); });
+        }
+        if(next != null)
+          myExecutionStack.Push(next);
+        OnOperationExecuted(atomicOperation);
+        if(atomicOperation.Operator.Breakpoint) Abort();
+      } else if(operation is CompositeOperation) {
+        CompositeOperation compositeOperation = (CompositeOperation)operation;
+        if(compositeOperation.ExecuteInParallel) {
+          ProcessParallelOperation(compositeOperation);
+          OnOperationExecuted(compositeOperation);
+        } else {
+          for(int i = compositeOperation.Operations.Count - 1; i >= 0; i--)
+            myExecutionStack.Push(compositeOperation.Operations[i]);
+        }
+      }
+    }
+
+    private void ProcessParallelOperation(CompositeOperation compositeOperation) {
+      // send operations to grid
+      WaitHandle[] waithandles = BeginExecuteOperations(compositeOperation);
+      WaitForAll(waithandles);
+      // collect results
+      List<KeyValuePair<ProcessingEngine, AtomicOperation>> results = new List<KeyValuePair<ProcessingEngine, AtomicOperation>>();
+      try {
+        foreach(AtomicOperation parOperation in compositeOperation.Operations) {
+          KeyValuePair<ProcessingEngine, AtomicOperation> p = new KeyValuePair<ProcessingEngine, AtomicOperation>(
+            jobManager.EndExecuteOperation(parOperation), parOperation);
+          results.Add(p);
+        }
+      } catch(Exception e) {
+        // this exception means there was a problem with the underlying communication infrastructure
+        // -> show message dialog, abort engine, requeue the whole composite operation again and return
+        myExecutionStack.Push(compositeOperation);
+        Abort();
+        ThreadPool.QueueUserWorkItem(delegate(object state) { OnExceptionOccurred(e); });
+        return;
+      }
+      // got all result engines without an exception -> merge results
+      ProcessResults(results);
+    }
+
+    private WaitHandle[] BeginExecuteOperations(CompositeOperation compositeOperation) {
+      WaitHandle[] waithandles = new WaitHandle[compositeOperation.Operations.Count];
+      int i = 0;
+      // HACK: assume that all atomicOperations have the same parent scope.
+      // 1) find that parent scope
+      // 2) remove all branches starting from the global scope that don't lead to the parentScope of the parallel operation
+      // 3) keep the branches to 'repair' the scope-tree later
+      // 4) for each parallel job attach only the sub-scope that this operation uses
+      // 5) after starting all parallel jobs restore the whole scope-tree
+      IScope parentScope = FindParentScope(GlobalScope, ((AtomicOperation)compositeOperation.Operations[0]).Scope);
+      List<IList<IScope>> prunedScopes = new List<IList<IScope>>();
+      PruneToParentScope(GlobalScope, parentScope, prunedScopes);
+      List<IScope> subScopes = new List<IScope>(parentScope.SubScopes);
+      foreach(IScope scope in subScopes) {
+        parentScope.RemoveSubScope(scope);
+      }
+      // start all parallel jobs
+      foreach(AtomicOperation parOperation in compositeOperation.Operations) {
+        parentScope.AddSubScope(parOperation.Scope);
+        waithandles[i++] = jobManager.BeginExecuteOperation(GlobalScope, parOperation);
+        parentScope.RemoveSubScope(parOperation.Scope);
+      }
+      foreach(IScope scope in subScopes) {
+        parentScope.AddSubScope(scope);
+      }
+      prunedScopes.Reverse();
+      RestoreFullTree(GlobalScope, prunedScopes);
+
+      return waithandles;
+    }
+
+    private void WaitForAll(WaitHandle[] waithandles) {
+      // wait until all jobs are finished
+      // WaitAll works only with maximally 64 waithandles
+      if(waithandles.Length <= 64) {
+        WaitHandle.WaitAll(waithandles);
+      } else {
+        int i;
+        for(i = 0; i < waithandles.Length; i++) {
+          waithandles[i].WaitOne();
+          waithandles[i].Close();
+        }
+      }
+    }
+
+    private void ProcessResults(List<KeyValuePair<ProcessingEngine, AtomicOperation>> results) {
+      // create a new compositeOperation to hold canceled operations that should be restarted
+      CompositeOperation canceledOperations = new CompositeOperation();
+      canceledOperations.ExecuteInParallel = true;
+
+      suspendedEngines.Clear();
+      // retrieve results and merge into scope-tree
+      foreach(KeyValuePair<ProcessingEngine, AtomicOperation> p in results) {
+        ProcessingEngine resultEngine = p.Key;
+        AtomicOperation parOperation = p.Value;
+        if(resultEngine.Canceled && !resultEngine.Suspended) {
+          // when an engine was canceled but not suspended this means there was a problem
+          // show error message and queue the operation for restart (again parallel)
+          // but don't merge the results of the aborted engine
+          ThreadPool.QueueUserWorkItem(delegate(object state) { OnExceptionOccurred(new JobExecutionException(resultEngine.ErrorMessage)); });
+          canceledOperations.AddOperation(parOperation);
+        } else if(resultEngine.Suspended) {
+          // when the engine was suspended it means it was stopped because of a breakpoint 
+          // -> merge the partial results and queue the engine (which has operations remaining in the execution stack) to be resumed (parallel)
+          MergeScope(parOperation.Scope, resultEngine.InitialOperation.Scope);
+          resultEngine.InitialOperation = parOperation;
+          suspendedEngines.Add(new KeyValuePair<ProcessingEngine, AtomicOperation>(resultEngine, parOperation));
+        } else {
+          // engine is finished ->
+          // simply merge the results into our local scope-tree
+          MergeScope(parOperation.Scope, resultEngine.InitialOperation.Scope);
+        }
+      }
+      // if there were exceptions -> abort 
+      if(canceledOperations.Operations.Count > 0) {
+        // requeue the aborted operations 
+        myExecutionStack.Push(canceledOperations);
+        Abort();
+      }
+      // if there were breakpoints -> abort
+      if(suspendedEngines.Count > 0) {
+        Abort();
+      }
+    }
+
+    private void RestoreFullTree(IScope currentScope, IList<IList<IScope>> savedScopes) {
+      if(savedScopes.Count == 0) return;
+      IScope remainingBranch = currentScope.SubScopes[0];
+      currentScope.RemoveSubScope(remainingBranch);
+      IList<IScope> savedScopesForCurrent = savedScopes[0];
+      foreach(IScope savedScope in savedScopesForCurrent) {
+        currentScope.AddSubScope(savedScope);
+      }
+      savedScopes.RemoveAt(0);
+      RestoreFullTree(remainingBranch, savedScopes);
+    }
+
+    private IScope PruneToParentScope(IScope currentScope, IScope scope, IList<IList<IScope>> prunedScopes) {
+      if(currentScope == scope) return currentScope;
+      if(currentScope.SubScopes.Count == 0) return null;
+      IScope foundScope = null;
+      // try to find the searched scope in all my sub-scopes
+      foreach(IScope subScope in currentScope.SubScopes) {
+        foundScope = PruneToParentScope(subScope, scope, prunedScopes);
+        if(foundScope != null) break; // we can stop as soon as we find the scope in a branch
+      }
+      if(foundScope != null) { // when we found the scopes in my sub-scopes
+        List<IScope> subScopes = new List<IScope>(currentScope.SubScopes); // store the list of sub-scopes
+        prunedScopes.Add(subScopes);
+        // remove all my sub-scopes
+        foreach(IScope subScope in subScopes) {
+          currentScope.RemoveSubScope(subScope);
+        }
+        // add only the branch that leads to the scope that I search for
+        currentScope.AddSubScope(foundScope);
+        return currentScope; // return that this scope contains the branch that leads to the searched scopes
+      } else {
+        return null; // otherwise we didn't find the searched scope and we can return null
+      }
+    }
+
+    private IScope FindParentScope(IScope currentScope, IScope childScope) {
+      if(currentScope.SubScopes.Contains(childScope)) return currentScope;
+      foreach(IScope subScope in currentScope.SubScopes) {
+        IScope result = FindParentScope(subScope, childScope);
+        if(result != null) return result;
+      }
+      return null;
+    }
+
+    private void MergeScope(IScope original, IScope result) {
+      // merge the results
+      original.Clear();
+      foreach(IVariable variable in result.Variables) {
+        original.AddVariable(variable);
+      }
+      foreach(IScope subScope in result.SubScopes) {
+        original.AddSubScope(subScope);
+      }
+      foreach(KeyValuePair<string, string> alias in result.Aliases) {
+        original.AddAlias(alias.Key, alias.Value);
+      }
+    }
+
+    #region Persistence Methods
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute addressAttribute = document.CreateAttribute("ServerAddress");
+      addressAttribute.Value = ServerAddress;
+      node.Attributes.Append(addressAttribute);
+      if(suspendedEngines.Count > 0) {
+        XmlNode suspendedEnginesNode = document.CreateElement("SuspendedEngines");
+        foreach(KeyValuePair<ProcessingEngine, AtomicOperation> p in suspendedEngines) {
+          XmlNode n = document.CreateElement("Entry");
+          n.AppendChild(PersistenceManager.Persist(p.Key, document, persistedObjects));
+          n.AppendChild(PersistenceManager.Persist(p.Value, document, persistedObjects));
+          suspendedEnginesNode.AppendChild(n);
+        }
+        node.AppendChild(suspendedEnginesNode);
+      }
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      ServerAddress = node.Attributes["ServerAddress"].Value;
+      XmlNode suspendedEnginesNode = node.SelectSingleNode("SuspendedEngines");
+      if(suspendedEnginesNode != null) {
+        foreach(XmlNode n in suspendedEnginesNode.ChildNodes) {
+          KeyValuePair<ProcessingEngine, AtomicOperation> p = new KeyValuePair<ProcessingEngine, AtomicOperation>(
+            (ProcessingEngine)PersistenceManager.Restore(n.ChildNodes[0], restoredObjects),
+            (AtomicOperation)PersistenceManager.Restore(n.ChildNodes[1], restoredObjects));
+          suspendedEngines.Add(p);
+        }
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,121 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.DistributedEngine {
+  partial class DistributedEngineEditor {
+    /// <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.serverLabel = new System.Windows.Forms.Label();
+      this.addressTextBox = new System.Windows.Forms.TextBox();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.operatorGraphGroupBox.SuspendLayout();
+      this.globalScopeGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.TabIndex = 7;
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.TabIndex = 6;
+      // 
+      // splitContainer1
+      // 
+      // 
+      // abortButton
+      // 
+      this.abortButton.Text = "&Stop";
+      // 
+      // serverLabel
+      // 
+      this.serverLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.serverLabel.AutoSize = true;
+      this.serverLabel.Location = new System.Drawing.Point(333, 444);
+      this.serverLabel.Name = "serverLabel";
+      this.serverLabel.Size = new System.Drawing.Size(81, 13);
+      this.serverLabel.TabIndex = 4;
+      this.serverLabel.Text = "&Server address:";
+      // 
+      // addressTextBox
+      // 
+      this.addressTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.addressTextBox.Location = new System.Drawing.Point(336, 460);
+      this.addressTextBox.Name = "addressTextBox";
+      this.addressTextBox.Size = new System.Drawing.Size(157, 20);
+      this.addressTextBox.TabIndex = 8;
+      this.addressTextBox.TextChanged += new System.EventHandler(this.addressTextBox_TextChanged);
+      // 
+      // DistributedEngineEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.addressTextBox);
+      this.Controls.Add(this.serverLabel);
+      this.Name = "DistributedEngineEditor";
+      this.Controls.SetChildIndex(this.serverLabel, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.executeButton, 0);
+      this.Controls.SetChildIndex(this.abortButton, 0);
+      this.Controls.SetChildIndex(this.resetButton, 0);
+      this.Controls.SetChildIndex(this.splitContainer1, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.Controls.SetChildIndex(this.addressTextBox, 0);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.operatorGraphGroupBox.ResumeLayout(false);
+      this.globalScopeGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label serverLabel;
+    private System.Windows.Forms.TextBox addressTextBox;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.cs	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.DistributedEngine {
+  public partial class DistributedEngineEditor : EngineBaseEditor {
+    public DistributedEngine DistributedEngine {
+      get { return (DistributedEngine)Engine; }
+      set { base.Engine = value; }
+    }
+
+    public DistributedEngineEditor() {
+      InitializeComponent();
+    }
+    public DistributedEngineEditor(DistributedEngine distributedEngine)
+      : this() {
+      DistributedEngine = distributedEngine;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (DistributedEngine == null) {
+        addressTextBox.Text = "";
+        addressTextBox.Enabled = false;
+      } else {
+        addressTextBox.Text = DistributedEngine.ServerAddress;
+        addressTextBox.Enabled = true;
+      }
+    }
+
+    private void addressTextBox_TextChanged(object sender, EventArgs e) {
+      DistributedEngine.ServerAddress = addressTextBox.Text;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/DistributedEngineEditor.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/HeuristicLab.DistributedEngine.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/HeuristicLab.DistributedEngine.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/HeuristicLab.DistributedEngine.csproj	(revision 1270)
@@ -0,0 +1,121 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.DistributedEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.DistributedEngine-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.DistributedEngine-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.DistributedEngine-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabDistributedEnginePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="DistributedEngine.cs" />
+    <Compile Include="DistributedEngineEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DistributedEngineEditor.Designer.cs">
+      <DependentUpon>DistributedEngineEditor.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Grid\HeuristicLab.Grid.csproj">
+      <Project>{545CE756-98D8-423B-AC2E-6E7D70926E5C}</Project>
+      <Name>HeuristicLab.Grid</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="DistributedEngineEditor.resx">
+      <DependentUpon>DistributedEngineEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/HeuristicLabDistributedEnginePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/HeuristicLabDistributedEnginePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/HeuristicLabDistributedEnginePlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.DistributedEngine {
+  [ClassInfo(Name = "HeuristicLab.DistributedEngine-3.2")]
+  [PluginFile(Filename = "HeuristicLab.DistributedEngine-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Grid-3.2")]
+  public class HeuristicLabDistributedEnginePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.DistributedEngine/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.DistributedEngine")]
+[assembly: AssemblyDescription("HeuristicLab Plugin that provides an engine for distributed algorithm execution.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("755e22ba-d62a-47d4-aade-f3f40b41eb33")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ES.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ES.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ES.cs	(revision 1270)
@@ -0,0 +1,710 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2009 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should 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.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Logging;
+using HeuristicLab.Selection;
+using HeuristicLab.RealVector;
+
+namespace HeuristicLab.ES {
+  /// <summary>
+  /// Class for the heuristic optimization technique "evolution strategy".
+  /// </summary>
+  public class ES : ItemBase, IEditable {
+    #region Create Operators
+    /// <summary>
+    /// Creates a new evolution strategy.
+    /// </summary>
+    /// <param name="engine">The engine of the ES to create.</param>
+    public static void Create(IEngine engine) {
+      engine.OperatorGraph.Clear();
+
+      CombinedOperator co = CreateES();
+      co.Name = "σSA-ES";
+      engine.OperatorGraph.AddOperator(co);
+      engine.OperatorGraph.InitialOperator = co;
+
+      engine.Reset();
+    }
+    private static CombinedOperator CreateES() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp);
+      op.OperatorGraph.InitialOperator = sp;
+
+      CombinedOperator co1 = CreateVariableInjection();
+      co1.Name = "Variable Injection";
+      op.OperatorGraph.AddOperator(co1);
+      sp.AddSubOperator(co1);
+
+      // place holder for ProblemInjector
+      EmptyOperator eo1 = new EmptyOperator();
+      eo1.Name = "ProblemInjector";
+      op.OperatorGraph.AddOperator(eo1);
+      co1.AddSubOperator(eo1);
+
+      CombinedOperator co2 = CreatePopulationInitialization();
+      co2.Name = "Population Initialization";
+      op.OperatorGraph.AddOperator(co2);
+      sp.AddSubOperator(co2);
+
+      // place holder for SolutionGenerator
+      EmptyOperator eo2 = new EmptyOperator();
+      eo2.Name = "SolutionGenerator";
+      op.OperatorGraph.AddOperator(eo2);
+      co2.AddSubOperator(eo2);
+
+      // place holder for Evaluator
+      EmptyOperator eo3 = new EmptyOperator();
+      eo3.Name = "Evaluator";
+      op.OperatorGraph.AddOperator(eo3);
+      co2.AddSubOperator(eo3);
+
+      CombinedOperator co3 = CreateESMain();
+      co3.Name = "ES Main";
+      op.OperatorGraph.AddOperator(co3);
+      sp.AddSubOperator(co3);
+
+      // place holder for Mutator
+      EmptyOperator eo4 = new EmptyOperator();
+      eo4.Name = "Mutator";
+      op.OperatorGraph.AddOperator(eo4);
+      co3.AddSubOperator(eo4);
+
+      // place holder for Evaluator
+      co3.AddSubOperator(eo3);
+
+      // place holder for Recombinator
+      EmptyOperator eo5 = new EmptyOperator();
+      eo5.Name = "Recombinator";
+      op.OperatorGraph.AddOperator(eo5);
+      co3.AddSubOperator(eo5);
+
+      return op;
+    }
+    private static CombinedOperator CreateVariableInjection() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp);
+      op.OperatorGraph.InitialOperator = sp;
+
+      RandomInjector ri = new RandomInjector();
+      op.OperatorGraph.AddOperator(ri);
+      sp.AddSubOperator(ri);
+
+      OperatorExtractor oe = new OperatorExtractor();
+      oe.Name = "ProblemInjector";
+      oe.GetVariableInfo("Operator").ActualName = "ProblemInjector";
+      op.OperatorGraph.AddOperator(oe);
+      sp.AddSubOperator(oe);
+
+      VariableInjector vi = new VariableInjector();
+      vi.AddVariable(new Variable("ESmu", new IntData(1)));
+      vi.AddVariable(new Variable("ESrho", new IntData(1)));
+      vi.AddVariable(new Variable("ESlambda", new IntData(1)));
+      vi.AddVariable(new Variable("EvaluatedSolutions", new IntData()));
+      vi.AddVariable(new Variable("PlusNotation", new BoolData(true)));
+      vi.AddVariable(new Variable("ProblemDimension", new IntData(1)));
+      vi.AddVariable(new Variable("ShakingFactorsMin", new DoubleData(0.1)));
+      vi.AddVariable(new Variable("ShakingFactorsMax", new DoubleData(5.0)));
+      vi.AddVariable(new Variable("Generations", new IntData()));
+      vi.AddVariable(new Variable("MaximumGenerations", new IntData(1000)));
+      vi.AddVariable(new Variable("GeneralLearningRate", new DoubleData(1.0 / Math.Sqrt(2))));
+      vi.AddVariable(new Variable("LearningRate", new DoubleData(1.0 / Math.Sqrt(2))));
+      op.OperatorGraph.AddOperator(vi);
+      sp.AddSubOperator(vi);
+
+      return op;
+    }
+    private static CombinedOperator CreatePopulationInitialization() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp1 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp1);
+      op.OperatorGraph.InitialOperator = sp1;
+
+      SubScopesCreater ssc = new SubScopesCreater();
+      ssc.GetVariableInfo("SubScopes").ActualName = "ESmu";
+      op.OperatorGraph.AddOperator(ssc);
+      sp1.AddSubOperator(ssc);
+
+      UniformSequentialSubScopesProcessor ussp = new UniformSequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ussp);
+      sp1.AddSubOperator(ussp);
+
+      SequentialProcessor sp2 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp2);
+      ussp.AddSubOperator(sp2);
+
+      OperatorExtractor oe1 = new OperatorExtractor();
+      oe1.Name = "SolutionGenerator";
+      oe1.GetVariableInfo("Operator").ActualName = "SolutionGenerator";
+      op.OperatorGraph.AddOperator(oe1);
+      sp2.AddSubOperator(oe1);
+
+      OperatorExtractor oe2 = new OperatorExtractor();
+      oe2.Name = "Evaluator";
+      oe2.GetVariableInfo("Operator").ActualName = "Evaluator";
+      op.OperatorGraph.AddOperator(oe2);
+      sp2.AddSubOperator(oe2);
+
+      Counter c = new Counter();
+      c.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      op.OperatorGraph.AddOperator(c);
+      sp2.AddSubOperator(c);
+
+      UniformRandomRealVectorGenerator urrvg = new UniformRandomRealVectorGenerator();
+      urrvg.GetVariableInfo("Length").ActualName = "ProblemDimension";
+      urrvg.GetVariableInfo("Minimum").ActualName = "ShakingFactorsMin";
+      urrvg.GetVariableInfo("Maximum").ActualName = "ShakingFactorsMax";
+      urrvg.GetVariableInfo("RealVector").ActualName = "ShakingFactors";
+      op.OperatorGraph.AddOperator(urrvg);
+      sp2.AddSubOperator(urrvg);
+
+      Sorter s = new Sorter();
+      s.GetVariableInfo("Descending").ActualName = "Maximization";
+      s.GetVariableInfo("Value").ActualName = "Quality";
+      op.OperatorGraph.AddOperator(s);
+      sp1.AddSubOperator(s);
+
+      return op;
+    }
+    private static CombinedOperator CreateESMain() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp);
+      op.OperatorGraph.InitialOperator = sp;
+
+      ESRandomSelector rs = new ESRandomSelector();
+      rs.Name = "Child Selector";
+      rs.GetVariableInfo("Lambda").ActualName = "ESlambda";
+      rs.GetVariableInfo("Rho").ActualName = "ESrho";
+      op.OperatorGraph.AddOperator(rs);
+      sp.AddSubOperator(rs);
+
+      SequentialSubScopesProcessor ssp = new SequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ssp);
+      sp.AddSubOperator(ssp);
+
+      EmptyOperator eo = new EmptyOperator();
+      op.OperatorGraph.AddOperator(eo);
+      ssp.AddSubOperator(eo);
+
+      CombinedOperator co1 = CreateCreateChildren();
+      co1.Name = "Create Children";
+      op.OperatorGraph.AddOperator(co1);
+      ssp.AddSubOperator(co1);
+
+      ConditionalBranch cb1 = new ConditionalBranch();
+      cb1.Name = "Plus or Comma Replacement";
+      cb1.GetVariableInfo("Condition").ActualName = "PlusNotation";
+      op.OperatorGraph.AddOperator(cb1);
+      sp.AddSubOperator(cb1);
+
+      MergingReducer mr = new MergingReducer();
+      mr.Name = "Plus Replacement";
+      op.OperatorGraph.AddOperator(mr);
+      cb1.AddSubOperator(mr);
+
+      RightReducer rr = new RightReducer();
+      rr.Name = "Comma Replacement";
+      op.OperatorGraph.AddOperator(rr);
+      cb1.AddSubOperator(rr);
+
+      CombinedOperator co2 = CreateReplacement();
+      co2.Name = "Parents Selection";
+      op.OperatorGraph.AddOperator(co2);
+      sp.AddSubOperator(co2);
+
+      QualityLogger ql = new QualityLogger();
+      op.OperatorGraph.AddOperator(ql);
+      sp.AddSubOperator(ql);
+
+      BestAverageWorstQualityCalculator bawqc = new BestAverageWorstQualityCalculator();
+      op.OperatorGraph.AddOperator(bawqc);
+      sp.AddSubOperator(bawqc);
+
+      DataCollector dc = new DataCollector();
+      ItemList<StringData> names = dc.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
+      names.Add(new StringData("BestQuality"));
+      names.Add(new StringData("AverageQuality"));
+      names.Add(new StringData("WorstQuality"));
+      op.OperatorGraph.AddOperator(dc);
+      sp.AddSubOperator(dc);
+
+      LinechartInjector lci = new LinechartInjector();
+      lci.GetVariableInfo("Linechart").ActualName = "Quality Linechart";
+      lci.GetVariable("NumberOfLines").GetValue<IntData>().Data = 3;
+      op.OperatorGraph.AddOperator(lci);
+      sp.AddSubOperator(lci);
+
+      Counter c = new Counter();
+      c.GetVariableInfo("Value").ActualName = "Generations";
+      op.OperatorGraph.AddOperator(c);
+      sp.AddSubOperator(c);
+
+      LessThanComparator ltc = new LessThanComparator();
+      ltc.GetVariableInfo("LeftSide").ActualName = "Generations";
+      ltc.GetVariableInfo("RightSide").ActualName = "MaximumGenerations";
+      ltc.GetVariableInfo("Result").ActualName = "GenerationsCondition";
+      op.OperatorGraph.AddOperator(ltc);
+      sp.AddSubOperator(ltc);
+
+      ConditionalBranch cb2 = new ConditionalBranch();
+      cb2.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
+      op.OperatorGraph.AddOperator(cb2);
+      sp.AddSubOperator(cb2);
+
+      cb2.AddSubOperator(sp);
+
+      return op;
+    }
+    private static CombinedOperator CreateCreateChildren() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp1 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp1);
+      op.OperatorGraph.InitialOperator = sp1;
+
+      OperatorExtractor oe1 = new OperatorExtractor();
+      oe1.Name = "Recombinator";
+      oe1.GetVariableInfo("Operator").ActualName = "Recombinator";
+      op.OperatorGraph.AddOperator(oe1);
+      sp1.AddSubOperator(oe1);
+
+      UniformSequentialSubScopesProcessor ussp = new UniformSequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ussp);
+      sp1.AddSubOperator(ussp);
+
+      SequentialProcessor sp2 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp2);
+      ussp.AddSubOperator(sp2);
+
+      OperatorExtractor oe2 = new OperatorExtractor();
+      oe2.Name = "Mutator";
+      oe2.GetVariableInfo("Operator").ActualName = "Mutator";
+      op.OperatorGraph.AddOperator(oe2);
+      sp2.AddSubOperator(oe2);
+
+      OperatorExtractor oe3 = new OperatorExtractor();
+      oe3.Name = "Evaluator";
+      oe3.GetVariableInfo("Operator").ActualName = "Evaluator";
+      op.OperatorGraph.AddOperator(oe3);
+      sp2.AddSubOperator(oe3);
+
+      Counter c = new Counter();
+      c.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      op.OperatorGraph.AddOperator(c);
+      sp2.AddSubOperator(c);
+
+      Sorter s = new Sorter();
+      s.GetVariableInfo("Value").ActualName = "Quality";
+      s.GetVariableInfo("Descending").ActualName = "Maximization";
+      op.OperatorGraph.AddOperator(s);
+      sp1.AddSubOperator(s);
+
+      return op;
+    }
+    private static CombinedOperator CreateReplacement() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp1 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp1);
+      op.OperatorGraph.InitialOperator = sp1;
+
+      Sorter s = new Sorter();
+      s.GetVariableInfo("Descending").ActualName = "Maximization";
+      s.GetVariableInfo("Value").ActualName = "Quality";
+      op.OperatorGraph.AddOperator(s);
+      sp1.AddSubOperator(s);
+
+      LeftSelector ls = new LeftSelector();
+      ls.Name = "Parents Selector";
+      ls.GetVariableInfo("Selected").ActualName = "ESmu";
+      ls.GetVariable("CopySelected").Value = new BoolData(false);
+      op.OperatorGraph.AddOperator(ls);
+      sp1.AddSubOperator(ls);
+
+      RightReducer rr = new RightReducer();
+      rr.Name = "RightReducer";
+      op.OperatorGraph.AddOperator(rr);
+      sp1.AddSubOperator(rr);
+
+      return op;
+    }
+    #endregion
+
+    #region Properties
+    private IEngine myEngine;
+    /// <summary>
+    /// Gets the engine of the current instance.
+    /// </summary>
+    public IEngine Engine {
+      get { return myEngine; }
+    }
+    private BoolData mySetSeedRandomly;
+    /// <summary>
+    /// Gets or sets the boolean flag whether to set the seed randomly or not.
+    /// </summary>
+    public bool SetSeedRandomly {
+      get { return mySetSeedRandomly.Data; }
+      set { mySetSeedRandomly.Data = value; }
+    }
+    private IntData mySeed;
+    /// <summary>
+    /// Gets or sets the seed of the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public int Seed {
+      get { return mySeed.Data; }
+      set {
+        mySeed.Data = value;
+        OnChanged();
+      }
+    }
+    private IntData myMu;
+    /// <summary>
+    /// Gets or sets the µ value of the current instance.
+    /// </summary>
+    /// <remarks>Sets also the λ and the ρ value if necessary. Using the comma notation it must hold that λ >= µ and generally µ >= ρ must hold as well. Calls <see cref="ItemBase.OnChanged"/> of
+    /// base class <see cref="ItemBase"/>.</remarks>
+    public int Mu {
+      get { return myMu.Data; }
+      set {
+        if (value > 0) {
+          myMu.Data = value;
+          if (!PlusNotation && value >= Lambda) myLambda.Data = value + 1;
+          if (value < Rho) myRho.Data = value;
+          OnChanged();
+        }
+      }
+    }
+    private IntData myRho;
+    /// <summary>
+    /// Gets or sets the ρ value of the current instance.
+    /// </summary>
+    /// <remarks>Sets also the µ value to be as large as the new ρ value if it was smaller before. Calls <see cref="ItemBase.OnChanged"/> of
+    /// base class <see cref="ItemBase"/>.</remarks>
+    public int Rho {
+      get { return myRho.Data; }
+      set {
+        if (value > 0) {
+          myRho.Data = value;
+          if (value > Mu) Mu = value;
+          OnChanged();
+        }
+      }
+    }
+    private IntData myLambda;
+    /// <summary>
+    /// Gets or sets the λ value of the current instance.
+    /// </summary>
+    /// <remarks>If the comma notation is used, it also changes the µ value to be as large as the new λ value if it was larger before. Note that in general for good optimization results it needs to be fairly larger than mu.
+    /// Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/>.</remarks>
+    public int Lambda {
+      get { return myLambda.Data; }
+      set {
+        if (value > 0) {
+          if (PlusNotation) myLambda.Data = value;
+          else {
+            if (value >= 1 && value < Mu) {
+              myLambda.Data = value;
+              myMu.Data = value;
+            } else if (value > Mu) {
+              myLambda.Data = value;
+            }
+          }
+          OnChanged();
+        }
+      }
+    }
+    private BoolData myPlusNotation;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the plus notation is used (true) or the comma notation (false).
+    /// </summary>
+    /// <remarks>If set to false (comma notation) it sets λ to be as large as µ if is lower. Note that in general for good optimization results it needs to be fairly larger than µ. 
+    /// Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/>.</remarks>
+    public bool PlusNotation {
+      get { return myPlusNotation.Data; }
+      set {
+        if (!value && myPlusNotation.Data) { // from plus to point
+          if (Lambda < Mu) {
+            myLambda.Data = Mu;
+          }
+        }
+        myPlusNotation.Data = value;
+        OnChanged();
+      }
+    }
+    private IntData myProblemDimension;
+    /// <summary>
+    /// Gets or sets the problem dimension which determines the length of the strategy vector.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public int ProblemDimension {
+      get { return myProblemDimension.Data; }
+      set { myProblemDimension.Data = value; }
+    }
+    private DoubleData myShakingFactorsMin;
+    /// <summary>
+    /// Gets or sets the minimal value for each dimension of the strategy vector.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public double ShakingFactorsMin {
+      get { return myShakingFactorsMin.Data; }
+      set {
+        myShakingFactorsMin.Data = value;
+        OnChanged();
+      }
+    }
+    private DoubleData myShakingFactorsMax;
+    /// <summary>
+    /// Gets or sets the maximal value for each dimension of the strategy vector.
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public double ShakingFactorsMax {
+      get { return myShakingFactorsMax.Data; }
+      set {
+        myShakingFactorsMax.Data = value;
+        OnChanged();
+      }
+    }
+    private DoubleData myGeneralLearningRate;
+    /// <summary>
+    /// Gets or sets the general learning rate (tau0).
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public double GeneralLearningRate {
+      get { return myGeneralLearningRate.Data; }
+      set {
+        if (value > 0.0 && value <= 1.0) {
+          myGeneralLearningRate.Data = value;
+          OnChanged();
+        }
+      }
+    }
+    private DoubleData myLearningRate;
+    /// <summary>
+    /// Gets or sets the learning rate (tau).
+    /// </summary>
+    /// <remarks>Calls <see cref="ItemBase.OnChanged"/> of base class <see cref="ItemBase"/> 
+    /// in the setter.</remarks>
+    public double LearningRate {
+      get { return myLearningRate.Data; }
+      set {
+        if (value > 0.0 && value <= 1.0) {
+          myLearningRate.Data = value;
+          OnChanged();
+        }
+      }
+    }
+    private IntData myMaximumGenerations;
+    /// <summary>
+    /// Gets or sets the maximum number of generations.
+    /// </summary>
+    public int MaximumGenerations {
+      get { return myMaximumGenerations.Data; }
+      set { myMaximumGenerations.Data = value; }
+    }
+    private CombinedOperator myES;
+    private IOperator myESMain;
+    private IOperator myVariableInjection;
+    /// <summary>
+    /// Gets or sets the problem injection operator.
+    /// </summary>
+    public IOperator ProblemInjector {
+      get { return myVariableInjection.SubOperators[0]; }
+      set {
+        value.Name = "ProblemInjector";
+        myES.OperatorGraph.RemoveOperator(ProblemInjector.Guid);
+        myES.OperatorGraph.AddOperator(value);
+        myVariableInjection.AddSubOperator(value, 0);
+      }
+    }
+    private IOperator myPopulationInitialization;
+    /// <summary>
+    /// Gets or sets the solution generation operator.
+    /// </summary>
+    public IOperator SolutionGenerator {
+      get { return myPopulationInitialization.SubOperators[0]; }
+      set {
+        value.Name = "SolutionGenerator";
+        myES.OperatorGraph.RemoveOperator(SolutionGenerator.Guid);
+        myES.OperatorGraph.AddOperator(value);
+        myPopulationInitialization.AddSubOperator(value, 0);
+      }
+    }
+    /// <summary>
+    /// Gets or sets the evaluation operator.
+    /// </summary>
+    public IOperator Evaluator {
+      get { return myPopulationInitialization.SubOperators[1]; }
+      set {
+        value.Name = "Evaluator";
+        myES.OperatorGraph.RemoveOperator(Evaluator.Guid);
+        myES.OperatorGraph.AddOperator(value);
+        myPopulationInitialization.AddSubOperator(value, 1);
+        myESMain.AddSubOperator(value, 1);
+      }
+    }
+    /// <summary>
+    /// Gets or sets the mutation operator. 
+    /// </summary>
+    public IOperator Mutator {
+      get { return myESMain.SubOperators[0]; }
+      set {
+        value.Name = "Mutator";
+        myES.OperatorGraph.RemoveOperator(Mutator.Guid);
+        myES.OperatorGraph.AddOperator(value);
+        myESMain.AddSubOperator(value, 0);
+      }
+    }
+    /// <summary>
+    /// Gets or sets the recombination operator.
+    /// </summary>
+    public IOperator Recombinator {
+      get { return myESMain.SubOperators[2]; }
+      set {
+        value.Name = "Recombinator";
+        myES.OperatorGraph.RemoveOperator(Recombinator.Guid);
+        myES.OperatorGraph.AddOperator(value);
+        myESMain.AddSubOperator(value, 2);
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ES"/> having a <see cref="SequentialEngine"/> as engine.
+    /// </summary>
+    public ES() {
+      myEngine = new SequentialEngine.SequentialEngine();
+      Create(myEngine);
+      SetReferences();
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ESEditor"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created view as <see cref="ESEditor"/>.</returns>
+    public override IView CreateView() {
+      return new ESEditor(this);
+    }
+    /// <summary>
+    /// Creates a new instance of <see cref="ESEditor"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created editor as <see cref="ESEditor"/>.</returns>
+    public virtual IEditor CreateEditor() {
+      return new ESEditor(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Uses <see cref="Auxiliary.Clone"/> method of the <see cref="Auxiliary"/> class to 
+    /// clone the engine.</remarks>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="ES"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ES clone = new ES();
+      clonedObjects.Add(Guid, clone);
+      clone.myEngine = (IEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
+    #region SetReferences Method
+    private void SetReferences() {
+      // ES
+      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      myES = co1;
+      // SequentialProcessor in ES
+      SequentialProcessor sp1 = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
+      // Variable Injection
+      CombinedOperator co2 = (CombinedOperator)sp1.SubOperators[0];
+      myVariableInjection = co2;
+      // SequentialProcessor in Variable Injection
+      SequentialProcessor sp2 = (SequentialProcessor)co2.OperatorGraph.InitialOperator;
+      // RandomInjector
+      RandomInjector ri = (RandomInjector)sp2.SubOperators[0];
+      mySetSeedRandomly = ri.GetVariable("SetSeedRandomly").GetValue<BoolData>();
+      mySeed = ri.GetVariable("Seed").GetValue<IntData>();
+      // VariableInjector
+      VariableInjector vi = (VariableInjector)sp2.SubOperators[2];
+      myMu = vi.GetVariable("ESmu").GetValue<IntData>();
+      myRho = vi.GetVariable("ESrho").GetValue<IntData>();
+      myLambda = vi.GetVariable("ESlambda").GetValue<IntData>();
+      myMaximumGenerations = vi.GetVariable("MaximumGenerations").GetValue<IntData>();
+      myPlusNotation = vi.GetVariable("PlusNotation").GetValue<BoolData>();
+      myProblemDimension = vi.GetVariable("ProblemDimension").GetValue<IntData>();
+      myShakingFactorsMin = vi.GetVariable("ShakingFactorsMin").GetValue<DoubleData>();
+      myShakingFactorsMax = vi.GetVariable("ShakingFactorsMax").GetValue<DoubleData>();
+      myGeneralLearningRate = vi.GetVariable("GeneralLearningRate").GetValue<DoubleData>();
+      myLearningRate = vi.GetVariable("LearningRate").GetValue<DoubleData>();
+      // Population Initialization
+      CombinedOperator co3 = (CombinedOperator)sp1.SubOperators[1];
+      myPopulationInitialization = co3;
+      // ES Main
+      CombinedOperator co4 = (CombinedOperator)sp1.SubOperators[2];
+      myESMain = co4;
+    }
+    #endregion
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>. 
+    /// <br/>The engine of the current instance is saved as child node with tag name <c>Engine</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Engine", Engine, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted ES from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.Populate"/> of base class <see cref="ItemBase"/>.<br/>
+    /// The engine must be saved as child node with tag name <c>Engine</c> (see 
+    /// <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the value is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myEngine = (IEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+      SetReferences();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,924 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.ES {
+  partial class ESEditor {
+    /// <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 (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      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();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ESEditor));
+      this.executeButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.leftBracketLabelRight = new System.Windows.Forms.Label();
+      this.semicolonLabel = new System.Windows.Forms.Label();
+      this.leftBracketLabelLeft = new System.Windows.Forms.Label();
+      this.shakingFactorsUpperBoundTextBox = new System.Windows.Forms.TextBox();
+      this.successRuleGroupBox = new System.Windows.Forms.GroupBox();
+      this.learningRateTextBox = new System.Windows.Forms.TextBox();
+      this.learningRateLabel = new System.Windows.Forms.Label();
+      this.generalLearningRateTextBox = new System.Windows.Forms.TextBox();
+      this.generalLearningRateLabel = new System.Windows.Forms.Label();
+      this.learningRateVariableNameLabel = new System.Windows.Forms.Label();
+      this.generalLearningRateVariableNameLabel = new System.Windows.Forms.Label();
+      this.parentSelectionGroupBox = new System.Windows.Forms.GroupBox();
+      this.commaRadioButton = new System.Windows.Forms.RadioButton();
+      this.plusRadioButton = new System.Windows.Forms.RadioButton();
+      this.setRecombinationButton = new System.Windows.Forms.Button();
+      this.viewRecombinationButton = new System.Windows.Forms.Button();
+      this.recombinationTextBox = new System.Windows.Forms.TextBox();
+      this.recombinationLabel = new System.Windows.Forms.Label();
+      this.rhoTextBox = new System.Windows.Forms.TextBox();
+      this.rhoLabel = new System.Windows.Forms.Label();
+      this.setEvaluationButton = new System.Windows.Forms.Button();
+      this.setMutationButton = new System.Windows.Forms.Button();
+      this.setSolutionGenerationButton = new System.Windows.Forms.Button();
+      this.viewEvaluationButton = new System.Windows.Forms.Button();
+      this.viewMutationButton = new System.Windows.Forms.Button();
+      this.viewSolutionGenerationButton = new System.Windows.Forms.Button();
+      this.viewProblemInitializationButton = new System.Windows.Forms.Button();
+      this.setProblemInitializationButton = new System.Windows.Forms.Button();
+      this.evaluationTextBox = new System.Windows.Forms.TextBox();
+      this.mutationTextBox = new System.Windows.Forms.TextBox();
+      this.solutionGenerationTextBox = new System.Windows.Forms.TextBox();
+      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
+      this.problemDimensionTextBox = new System.Windows.Forms.TextBox();
+      this.shakingFactorsLowerBoundTextBox = new System.Windows.Forms.TextBox();
+      this.evaluationLabel = new System.Windows.Forms.Label();
+      this.mutationLabel = new System.Windows.Forms.Label();
+      this.solutionGenerationLabel = new System.Windows.Forms.Label();
+      this.problemInitializationLabel = new System.Windows.Forms.Label();
+      this.problemDimensionLabel = new System.Windows.Forms.Label();
+      this.mutationStrengthLabel = new System.Windows.Forms.Label();
+      this.mutationRateLabel = new System.Windows.Forms.Label();
+      this.maximumGenerationsTextBox = new System.Windows.Forms.TextBox();
+      this.maximumGenerationsLabel = new System.Windows.Forms.Label();
+      this.randomSeedTextBox = new System.Windows.Forms.TextBox();
+      this.muTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyLabel = new System.Windows.Forms.Label();
+      this.randomSeedLabel = new System.Windows.Forms.Label();
+      this.problemDimensionVariableNameLabel = new System.Windows.Forms.Label();
+      this.shakingFactorsVariableNameLabel = new System.Windows.Forms.Label();
+      this.maximumGenerationsVariableNameLabel = new System.Windows.Forms.Label();
+      this.esLambdaVariableNameLabel = new System.Windows.Forms.Label();
+      this.esRhoVariableNameLabel = new System.Windows.Forms.Label();
+      this.esMuVariableNameLabel = new System.Windows.Forms.Label();
+      this.populationSizeLabel = new System.Windows.Forms.Label();
+      this.lambdaTextBox = new System.Windows.Forms.TextBox();
+      this.scopesTabPage = new System.Windows.Forms.TabPage();
+      this.scopeView = new HeuristicLab.Core.ScopeView();
+      this.abortButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.cloneEngineButton = new System.Windows.Forms.Button();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.successRuleGroupBox.SuspendLayout();
+      this.parentSelectionGroupBox.SuspendLayout();
+      this.scopesTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // executeButton
+      // 
+      this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.executeButton.Location = new System.Drawing.Point(0, 527);
+      this.executeButton.Name = "executeButton";
+      this.executeButton.Size = new System.Drawing.Size(75, 23);
+      this.executeButton.TabIndex = 1;
+      this.executeButton.Text = "&Execute";
+      this.executeButton.UseVisualStyleBackColor = true;
+      this.executeButton.Click += new System.EventHandler(this.executeButton_Click);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.scopesTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(501, 521);
+      this.tabControl.TabIndex = 0;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.leftBracketLabelRight);
+      this.parametersTabPage.Controls.Add(this.semicolonLabel);
+      this.parametersTabPage.Controls.Add(this.leftBracketLabelLeft);
+      this.parametersTabPage.Controls.Add(this.shakingFactorsUpperBoundTextBox);
+      this.parametersTabPage.Controls.Add(this.successRuleGroupBox);
+      this.parametersTabPage.Controls.Add(this.parentSelectionGroupBox);
+      this.parametersTabPage.Controls.Add(this.setRecombinationButton);
+      this.parametersTabPage.Controls.Add(this.viewRecombinationButton);
+      this.parametersTabPage.Controls.Add(this.recombinationTextBox);
+      this.parametersTabPage.Controls.Add(this.recombinationLabel);
+      this.parametersTabPage.Controls.Add(this.rhoTextBox);
+      this.parametersTabPage.Controls.Add(this.rhoLabel);
+      this.parametersTabPage.Controls.Add(this.setEvaluationButton);
+      this.parametersTabPage.Controls.Add(this.setMutationButton);
+      this.parametersTabPage.Controls.Add(this.setSolutionGenerationButton);
+      this.parametersTabPage.Controls.Add(this.viewEvaluationButton);
+      this.parametersTabPage.Controls.Add(this.viewMutationButton);
+      this.parametersTabPage.Controls.Add(this.viewSolutionGenerationButton);
+      this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.evaluationTextBox);
+      this.parametersTabPage.Controls.Add(this.mutationTextBox);
+      this.parametersTabPage.Controls.Add(this.solutionGenerationTextBox);
+      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
+      this.parametersTabPage.Controls.Add(this.problemDimensionTextBox);
+      this.parametersTabPage.Controls.Add(this.shakingFactorsLowerBoundTextBox);
+      this.parametersTabPage.Controls.Add(this.evaluationLabel);
+      this.parametersTabPage.Controls.Add(this.mutationLabel);
+      this.parametersTabPage.Controls.Add(this.solutionGenerationLabel);
+      this.parametersTabPage.Controls.Add(this.problemInitializationLabel);
+      this.parametersTabPage.Controls.Add(this.problemDimensionLabel);
+      this.parametersTabPage.Controls.Add(this.mutationStrengthLabel);
+      this.parametersTabPage.Controls.Add(this.mutationRateLabel);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsTextBox);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedTextBox);
+      this.parametersTabPage.Controls.Add(this.muTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedLabel);
+      this.parametersTabPage.Controls.Add(this.problemDimensionVariableNameLabel);
+      this.parametersTabPage.Controls.Add(this.shakingFactorsVariableNameLabel);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsVariableNameLabel);
+      this.parametersTabPage.Controls.Add(this.esLambdaVariableNameLabel);
+      this.parametersTabPage.Controls.Add(this.esRhoVariableNameLabel);
+      this.parametersTabPage.Controls.Add(this.esMuVariableNameLabel);
+      this.parametersTabPage.Controls.Add(this.populationSizeLabel);
+      this.parametersTabPage.Controls.Add(this.lambdaTextBox);
+      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(493, 495);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // leftBracketLabelRight
+      // 
+      this.leftBracketLabelRight.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.leftBracketLabelRight.AutoSize = true;
+      this.leftBracketLabelRight.Location = new System.Drawing.Point(344, 175);
+      this.leftBracketLabelRight.Name = "leftBracketLabelRight";
+      this.leftBracketLabelRight.Size = new System.Drawing.Size(10, 13);
+      this.leftBracketLabelRight.TabIndex = 21;
+      this.leftBracketLabelRight.Text = "[";
+      // 
+      // semicolonLabel
+      // 
+      this.semicolonLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.semicolonLabel.AutoSize = true;
+      this.semicolonLabel.Location = new System.Drawing.Point(254, 175);
+      this.semicolonLabel.Name = "semicolonLabel";
+      this.semicolonLabel.Size = new System.Drawing.Size(10, 13);
+      this.semicolonLabel.TabIndex = 19;
+      this.semicolonLabel.Text = ";";
+      // 
+      // leftBracketLabelLeft
+      // 
+      this.leftBracketLabelLeft.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.leftBracketLabelLeft.AutoSize = true;
+      this.leftBracketLabelLeft.Location = new System.Drawing.Point(165, 175);
+      this.leftBracketLabelLeft.Name = "leftBracketLabelLeft";
+      this.leftBracketLabelLeft.Size = new System.Drawing.Size(10, 13);
+      this.leftBracketLabelLeft.TabIndex = 17;
+      this.leftBracketLabelLeft.Text = "[";
+      // 
+      // shakingFactorsUpperBoundTextBox
+      // 
+      this.shakingFactorsUpperBoundTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.shakingFactorsUpperBoundTextBox.Location = new System.Drawing.Point(273, 172);
+      this.shakingFactorsUpperBoundTextBox.Name = "shakingFactorsUpperBoundTextBox";
+      this.shakingFactorsUpperBoundTextBox.Size = new System.Drawing.Size(65, 20);
+      this.shakingFactorsUpperBoundTextBox.TabIndex = 20;
+      this.toolTip.SetToolTip(this.shakingFactorsUpperBoundTextBox, resources.GetString("shakingFactorsUpperBoundTextBox.ToolTip"));
+      // 
+      // successRuleGroupBox
+      // 
+      this.successRuleGroupBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.successRuleGroupBox.Controls.Add(this.learningRateTextBox);
+      this.successRuleGroupBox.Controls.Add(this.learningRateLabel);
+      this.successRuleGroupBox.Controls.Add(this.generalLearningRateTextBox);
+      this.successRuleGroupBox.Controls.Add(this.generalLearningRateLabel);
+      this.successRuleGroupBox.Controls.Add(this.learningRateVariableNameLabel);
+      this.successRuleGroupBox.Controls.Add(this.generalLearningRateVariableNameLabel);
+      this.successRuleGroupBox.Location = new System.Drawing.Point(9, 230);
+      this.successRuleGroupBox.Name = "successRuleGroupBox";
+      this.successRuleGroupBox.Size = new System.Drawing.Size(476, 74);
+      this.successRuleGroupBox.TabIndex = 26;
+      this.successRuleGroupBox.TabStop = false;
+      this.successRuleGroupBox.Text = "Mutation Strength Adjustment";
+      // 
+      // learningRateTextBox
+      // 
+      this.learningRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.learningRateTextBox.Location = new System.Drawing.Point(159, 45);
+      this.learningRateTextBox.Name = "learningRateTextBox";
+      this.learningRateTextBox.Size = new System.Drawing.Size(186, 20);
+      this.learningRateTextBox.TabIndex = 4;
+      this.toolTip.SetToolTip(this.learningRateTextBox, "Automatically updates when Problem Dimension (dim) is changed.\r\nThe used formula " +
+              "is: tau = 1 / Sqrt(2*Sqrt(dim))");
+      // 
+      // learningRateLabel
+      // 
+      this.learningRateLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.learningRateLabel.AutoSize = true;
+      this.learningRateLabel.Location = new System.Drawing.Point(7, 48);
+      this.learningRateLabel.Name = "learningRateLabel";
+      this.learningRateLabel.Size = new System.Drawing.Size(92, 13);
+      this.learningRateLabel.TabIndex = 3;
+      this.learningRateLabel.Text = "Learning Rate (τ):";
+      // 
+      // generalLearningRateTextBox
+      // 
+      this.generalLearningRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.generalLearningRateTextBox.Location = new System.Drawing.Point(159, 19);
+      this.generalLearningRateTextBox.Name = "generalLearningRateTextBox";
+      this.generalLearningRateTextBox.Size = new System.Drawing.Size(186, 20);
+      this.generalLearningRateTextBox.TabIndex = 1;
+      this.toolTip.SetToolTip(this.generalLearningRateTextBox, "Automatically updates when Problem Dimension (dim) is changed.\r\nThe used formula " +
+              "is: tau0 = 1 / Sqrt(2*dim)");
+      // 
+      // generalLearningRateLabel
+      // 
+      this.generalLearningRateLabel.Anchor = System.Windows.Forms.AnchorStyles.Top;
+      this.generalLearningRateLabel.AutoSize = true;
+      this.generalLearningRateLabel.Location = new System.Drawing.Point(7, 22);
+      this.generalLearningRateLabel.Name = "generalLearningRateLabel";
+      this.generalLearningRateLabel.Size = new System.Drawing.Size(138, 13);
+      this.generalLearningRateLabel.TabIndex = 0;
+      this.generalLearningRateLabel.Text = "General Learning Rate (τ0):";
+      // 
+      // learningRateVariableNameLabel
+      // 
+      this.learningRateVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.learningRateVariableNameLabel.AutoSize = true;
+      this.learningRateVariableNameLabel.Location = new System.Drawing.Point(348, 48);
+      this.learningRateVariableNameLabel.Name = "learningRateVariableNameLabel";
+      this.learningRateVariableNameLabel.Size = new System.Drawing.Size(77, 13);
+      this.learningRateVariableNameLabel.TabIndex = 5;
+      this.learningRateVariableNameLabel.Text = "(LearningRate)";
+      // 
+      // generalLearningRateVariableNameLabel
+      // 
+      this.generalLearningRateVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.generalLearningRateVariableNameLabel.AutoSize = true;
+      this.generalLearningRateVariableNameLabel.Location = new System.Drawing.Point(348, 22);
+      this.generalLearningRateVariableNameLabel.Name = "generalLearningRateVariableNameLabel";
+      this.generalLearningRateVariableNameLabel.Size = new System.Drawing.Size(114, 13);
+      this.generalLearningRateVariableNameLabel.TabIndex = 2;
+      this.generalLearningRateVariableNameLabel.Text = "(GeneralLearningRate)";
+      // 
+      // parentSelectionGroupBox
+      // 
+      this.parentSelectionGroupBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.parentSelectionGroupBox.Controls.Add(this.commaRadioButton);
+      this.parentSelectionGroupBox.Controls.Add(this.plusRadioButton);
+      this.parentSelectionGroupBox.Location = new System.Drawing.Point(168, 310);
+      this.parentSelectionGroupBox.Name = "parentSelectionGroupBox";
+      this.parentSelectionGroupBox.Size = new System.Drawing.Size(186, 38);
+      this.parentSelectionGroupBox.TabIndex = 27;
+      this.parentSelectionGroupBox.TabStop = false;
+      this.parentSelectionGroupBox.Text = "Parent Selection";
+      // 
+      // commaRadioButton
+      // 
+      this.commaRadioButton.AutoSize = true;
+      this.commaRadioButton.Location = new System.Drawing.Point(57, 15);
+      this.commaRadioButton.Name = "commaRadioButton";
+      this.commaRadioButton.Size = new System.Drawing.Size(60, 17);
+      this.commaRadioButton.TabIndex = 1;
+      this.commaRadioButton.Text = "Comma";
+      this.commaRadioButton.UseVisualStyleBackColor = true;
+      this.commaRadioButton.CheckedChanged += new System.EventHandler(this.commaRadioButton_CheckedChanged);
+      // 
+      // plusRadioButton
+      // 
+      this.plusRadioButton.AutoSize = true;
+      this.plusRadioButton.Checked = true;
+      this.plusRadioButton.Location = new System.Drawing.Point(6, 15);
+      this.plusRadioButton.Name = "plusRadioButton";
+      this.plusRadioButton.Size = new System.Drawing.Size(45, 17);
+      this.plusRadioButton.TabIndex = 0;
+      this.plusRadioButton.TabStop = true;
+      this.plusRadioButton.Text = "Plus";
+      this.plusRadioButton.UseVisualStyleBackColor = true;
+      this.plusRadioButton.CheckedChanged += new System.EventHandler(this.plusRadioButton_CheckedChanged);
+      // 
+      // setRecombinationButton
+      // 
+      this.setRecombinationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRecombinationButton.Location = new System.Drawing.Point(419, 458);
+      this.setRecombinationButton.Name = "setRecombinationButton";
+      this.setRecombinationButton.Size = new System.Drawing.Size(43, 20);
+      this.setRecombinationButton.TabIndex = 47;
+      this.setRecombinationButton.Text = "Set...";
+      this.setRecombinationButton.UseVisualStyleBackColor = true;
+      this.setRecombinationButton.Click += new System.EventHandler(this.setRecombinationButton_Click);
+      // 
+      // viewRecombinationButton
+      // 
+      this.viewRecombinationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewRecombinationButton.Location = new System.Drawing.Point(360, 458);
+      this.viewRecombinationButton.Name = "viewRecombinationButton";
+      this.viewRecombinationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewRecombinationButton.TabIndex = 46;
+      this.viewRecombinationButton.Text = "View...";
+      this.viewRecombinationButton.UseVisualStyleBackColor = true;
+      this.viewRecombinationButton.Click += new System.EventHandler(this.viewRecombinationButton_Click);
+      // 
+      // recombinationTextBox
+      // 
+      this.recombinationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.recombinationTextBox.Location = new System.Drawing.Point(168, 458);
+      this.recombinationTextBox.Name = "recombinationTextBox";
+      this.recombinationTextBox.ReadOnly = true;
+      this.recombinationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.recombinationTextBox.TabIndex = 45;
+      // 
+      // recombinationLabel
+      // 
+      this.recombinationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.recombinationLabel.AutoSize = true;
+      this.recombinationLabel.Location = new System.Drawing.Point(6, 461);
+      this.recombinationLabel.Name = "recombinationLabel";
+      this.recombinationLabel.Size = new System.Drawing.Size(81, 13);
+      this.recombinationLabel.TabIndex = 44;
+      this.recombinationLabel.Text = "Recombination:";
+      // 
+      // rhoTextBox
+      // 
+      this.rhoTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.rhoTextBox.Location = new System.Drawing.Point(168, 94);
+      this.rhoTextBox.Name = "rhoTextBox";
+      this.rhoTextBox.Size = new System.Drawing.Size(186, 20);
+      this.rhoTextBox.TabIndex = 8;
+      // 
+      // rhoLabel
+      // 
+      this.rhoLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.rhoLabel.AutoSize = true;
+      this.rhoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.rhoLabel.Location = new System.Drawing.Point(6, 97);
+      this.rhoLabel.Name = "rhoLabel";
+      this.rhoLabel.Size = new System.Drawing.Size(45, 13);
+      this.rhoLabel.TabIndex = 7;
+      this.rhoLabel.Text = "Rho (ρ):";
+      // 
+      // setEvaluationButton
+      // 
+      this.setEvaluationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setEvaluationButton.Location = new System.Drawing.Point(419, 432);
+      this.setEvaluationButton.Name = "setEvaluationButton";
+      this.setEvaluationButton.Size = new System.Drawing.Size(43, 20);
+      this.setEvaluationButton.TabIndex = 43;
+      this.setEvaluationButton.Text = "Set...";
+      this.setEvaluationButton.UseVisualStyleBackColor = true;
+      this.setEvaluationButton.Click += new System.EventHandler(this.setEvaluationButton_Click);
+      // 
+      // setMutationButton
+      // 
+      this.setMutationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setMutationButton.Location = new System.Drawing.Point(419, 406);
+      this.setMutationButton.Name = "setMutationButton";
+      this.setMutationButton.Size = new System.Drawing.Size(43, 20);
+      this.setMutationButton.TabIndex = 39;
+      this.setMutationButton.Text = "Set...";
+      this.setMutationButton.UseVisualStyleBackColor = true;
+      this.setMutationButton.Click += new System.EventHandler(this.setMutationButton_Click);
+      // 
+      // setSolutionGenerationButton
+      // 
+      this.setSolutionGenerationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setSolutionGenerationButton.Location = new System.Drawing.Point(419, 380);
+      this.setSolutionGenerationButton.Name = "setSolutionGenerationButton";
+      this.setSolutionGenerationButton.Size = new System.Drawing.Size(43, 20);
+      this.setSolutionGenerationButton.TabIndex = 35;
+      this.setSolutionGenerationButton.Text = "Set...";
+      this.setSolutionGenerationButton.UseVisualStyleBackColor = true;
+      this.setSolutionGenerationButton.Click += new System.EventHandler(this.setSolutionGenerationButton_Click);
+      // 
+      // viewEvaluationButton
+      // 
+      this.viewEvaluationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewEvaluationButton.Location = new System.Drawing.Point(360, 432);
+      this.viewEvaluationButton.Name = "viewEvaluationButton";
+      this.viewEvaluationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewEvaluationButton.TabIndex = 42;
+      this.viewEvaluationButton.Text = "View...";
+      this.viewEvaluationButton.UseVisualStyleBackColor = true;
+      this.viewEvaluationButton.Click += new System.EventHandler(this.viewEvaluationButton_Click);
+      // 
+      // viewMutationButton
+      // 
+      this.viewMutationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewMutationButton.Location = new System.Drawing.Point(360, 406);
+      this.viewMutationButton.Name = "viewMutationButton";
+      this.viewMutationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewMutationButton.TabIndex = 38;
+      this.viewMutationButton.Text = "View...";
+      this.viewMutationButton.UseVisualStyleBackColor = true;
+      this.viewMutationButton.Click += new System.EventHandler(this.viewMutationButton_Click);
+      // 
+      // viewSolutionGenerationButton
+      // 
+      this.viewSolutionGenerationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewSolutionGenerationButton.Location = new System.Drawing.Point(360, 380);
+      this.viewSolutionGenerationButton.Name = "viewSolutionGenerationButton";
+      this.viewSolutionGenerationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewSolutionGenerationButton.TabIndex = 34;
+      this.viewSolutionGenerationButton.Text = "View...";
+      this.viewSolutionGenerationButton.UseVisualStyleBackColor = true;
+      this.viewSolutionGenerationButton.Click += new System.EventHandler(this.viewSolutionGenerationButton_Click);
+      // 
+      // viewProblemInitializationButton
+      // 
+      this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(360, 354);
+      this.viewProblemInitializationButton.Name = "viewProblemInitializationButton";
+      this.viewProblemInitializationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewProblemInitializationButton.TabIndex = 30;
+      this.viewProblemInitializationButton.Text = "View...";
+      this.viewProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.viewProblemInitializationButton.Click += new System.EventHandler(this.viewProblemInitializationButton_Click);
+      // 
+      // setProblemInitializationButton
+      // 
+      this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(419, 354);
+      this.setProblemInitializationButton.Name = "setProblemInitializationButton";
+      this.setProblemInitializationButton.Size = new System.Drawing.Size(43, 20);
+      this.setProblemInitializationButton.TabIndex = 31;
+      this.setProblemInitializationButton.Text = "Set...";
+      this.setProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.setProblemInitializationButton.Click += new System.EventHandler(this.setProblemInitializationButton_Click);
+      // 
+      // evaluationTextBox
+      // 
+      this.evaluationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.evaluationTextBox.Location = new System.Drawing.Point(168, 432);
+      this.evaluationTextBox.Name = "evaluationTextBox";
+      this.evaluationTextBox.ReadOnly = true;
+      this.evaluationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.evaluationTextBox.TabIndex = 41;
+      // 
+      // mutationTextBox
+      // 
+      this.mutationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationTextBox.Location = new System.Drawing.Point(168, 406);
+      this.mutationTextBox.Name = "mutationTextBox";
+      this.mutationTextBox.ReadOnly = true;
+      this.mutationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.mutationTextBox.TabIndex = 37;
+      // 
+      // solutionGenerationTextBox
+      // 
+      this.solutionGenerationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.solutionGenerationTextBox.Location = new System.Drawing.Point(168, 380);
+      this.solutionGenerationTextBox.Name = "solutionGenerationTextBox";
+      this.solutionGenerationTextBox.ReadOnly = true;
+      this.solutionGenerationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.solutionGenerationTextBox.TabIndex = 33;
+      // 
+      // problemInitializationTextBox
+      // 
+      this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(168, 354);
+      this.problemInitializationTextBox.Name = "problemInitializationTextBox";
+      this.problemInitializationTextBox.ReadOnly = true;
+      this.problemInitializationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.problemInitializationTextBox.TabIndex = 29;
+      // 
+      // setRandomSeedRandomlyCheckBox
+      // 
+      this.setRandomSeedRandomlyCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyCheckBox.AutoSize = true;
+      this.setRandomSeedRandomlyCheckBox.Location = new System.Drawing.Point(168, 12);
+      this.setRandomSeedRandomlyCheckBox.Name = "setRandomSeedRandomlyCheckBox";
+      this.setRandomSeedRandomlyCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.setRandomSeedRandomlyCheckBox.TabIndex = 1;
+      this.setRandomSeedRandomlyCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // problemDimensionTextBox
+      // 
+      this.problemDimensionTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemDimensionTextBox.Location = new System.Drawing.Point(168, 198);
+      this.problemDimensionTextBox.Name = "problemDimensionTextBox";
+      this.problemDimensionTextBox.Size = new System.Drawing.Size(186, 20);
+      this.problemDimensionTextBox.TabIndex = 24;
+      this.problemDimensionTextBox.Validated += new System.EventHandler(this.problemDimensionTextBox_Validated);
+      // 
+      // shakingFactorsLowerBoundTextBox
+      // 
+      this.shakingFactorsLowerBoundTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.shakingFactorsLowerBoundTextBox.Location = new System.Drawing.Point(181, 172);
+      this.shakingFactorsLowerBoundTextBox.Name = "shakingFactorsLowerBoundTextBox";
+      this.shakingFactorsLowerBoundTextBox.Size = new System.Drawing.Size(65, 20);
+      this.shakingFactorsLowerBoundTextBox.TabIndex = 18;
+      this.toolTip.SetToolTip(this.shakingFactorsLowerBoundTextBox, resources.GetString("shakingFactorsLowerBoundTextBox.ToolTip"));
+      // 
+      // evaluationLabel
+      // 
+      this.evaluationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.evaluationLabel.AutoSize = true;
+      this.evaluationLabel.Location = new System.Drawing.Point(6, 435);
+      this.evaluationLabel.Name = "evaluationLabel";
+      this.evaluationLabel.Size = new System.Drawing.Size(60, 13);
+      this.evaluationLabel.TabIndex = 40;
+      this.evaluationLabel.Text = "&Evaluation:";
+      // 
+      // mutationLabel
+      // 
+      this.mutationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationLabel.AutoSize = true;
+      this.mutationLabel.Location = new System.Drawing.Point(6, 409);
+      this.mutationLabel.Name = "mutationLabel";
+      this.mutationLabel.Size = new System.Drawing.Size(51, 13);
+      this.mutationLabel.TabIndex = 36;
+      this.mutationLabel.Text = "&Mutation:";
+      // 
+      // solutionGenerationLabel
+      // 
+      this.solutionGenerationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.solutionGenerationLabel.AutoSize = true;
+      this.solutionGenerationLabel.Location = new System.Drawing.Point(6, 383);
+      this.solutionGenerationLabel.Name = "solutionGenerationLabel";
+      this.solutionGenerationLabel.Size = new System.Drawing.Size(103, 13);
+      this.solutionGenerationLabel.TabIndex = 32;
+      this.solutionGenerationLabel.Text = "&Solution Generation:";
+      // 
+      // problemInitializationLabel
+      // 
+      this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationLabel.AutoSize = true;
+      this.problemInitializationLabel.Location = new System.Drawing.Point(6, 357);
+      this.problemInitializationLabel.Name = "problemInitializationLabel";
+      this.problemInitializationLabel.Size = new System.Drawing.Size(105, 13);
+      this.problemInitializationLabel.TabIndex = 28;
+      this.problemInitializationLabel.Text = "&Problem Initialization:";
+      // 
+      // problemDimensionLabel
+      // 
+      this.problemDimensionLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemDimensionLabel.AutoSize = true;
+      this.problemDimensionLabel.Location = new System.Drawing.Point(6, 201);
+      this.problemDimensionLabel.Name = "problemDimensionLabel";
+      this.problemDimensionLabel.Size = new System.Drawing.Size(100, 13);
+      this.problemDimensionLabel.TabIndex = 23;
+      this.problemDimensionLabel.Text = "Problem Dimension:";
+      // 
+      // mutationStrengthLabel
+      // 
+      this.mutationStrengthLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationStrengthLabel.AutoSize = true;
+      this.mutationStrengthLabel.Location = new System.Drawing.Point(6, 175);
+      this.mutationStrengthLabel.Name = "mutationStrengthLabel";
+      this.mutationStrengthLabel.Size = new System.Drawing.Size(128, 13);
+      this.mutationStrengthLabel.TabIndex = 16;
+      this.mutationStrengthLabel.Text = "Mutation Strength Vector:";
+      // 
+      // mutationRateLabel
+      // 
+      this.mutationRateLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateLabel.AutoSize = true;
+      this.mutationRateLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.mutationRateLabel.Location = new System.Drawing.Point(6, 123);
+      this.mutationRateLabel.Name = "mutationRateLabel";
+      this.mutationRateLabel.Size = new System.Drawing.Size(62, 13);
+      this.mutationRateLabel.TabIndex = 10;
+      this.mutationRateLabel.Text = "Lambda (λ):";
+      // 
+      // maximumGenerationsTextBox
+      // 
+      this.maximumGenerationsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsTextBox.Location = new System.Drawing.Point(168, 146);
+      this.maximumGenerationsTextBox.Name = "maximumGenerationsTextBox";
+      this.maximumGenerationsTextBox.Size = new System.Drawing.Size(186, 20);
+      this.maximumGenerationsTextBox.TabIndex = 14;
+      // 
+      // maximumGenerationsLabel
+      // 
+      this.maximumGenerationsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsLabel.AutoSize = true;
+      this.maximumGenerationsLabel.Location = new System.Drawing.Point(6, 149);
+      this.maximumGenerationsLabel.Name = "maximumGenerationsLabel";
+      this.maximumGenerationsLabel.Size = new System.Drawing.Size(114, 13);
+      this.maximumGenerationsLabel.TabIndex = 13;
+      this.maximumGenerationsLabel.Text = "Maximum &Generations:";
+      // 
+      // randomSeedTextBox
+      // 
+      this.randomSeedTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedTextBox.Location = new System.Drawing.Point(168, 32);
+      this.randomSeedTextBox.Name = "randomSeedTextBox";
+      this.randomSeedTextBox.Size = new System.Drawing.Size(186, 20);
+      this.randomSeedTextBox.TabIndex = 3;
+      // 
+      // muTextBox
+      // 
+      this.muTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.muTextBox.Location = new System.Drawing.Point(168, 68);
+      this.muTextBox.Name = "muTextBox";
+      this.muTextBox.Size = new System.Drawing.Size(186, 20);
+      this.muTextBox.TabIndex = 5;
+      // 
+      // setRandomSeedRandomlyLabel
+      // 
+      this.setRandomSeedRandomlyLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyLabel.AutoSize = true;
+      this.setRandomSeedRandomlyLabel.Location = new System.Drawing.Point(6, 12);
+      this.setRandomSeedRandomlyLabel.Name = "setRandomSeedRandomlyLabel";
+      this.setRandomSeedRandomlyLabel.Size = new System.Drawing.Size(147, 13);
+      this.setRandomSeedRandomlyLabel.TabIndex = 0;
+      this.setRandomSeedRandomlyLabel.Text = "Set &Random Seed Randomly:";
+      // 
+      // randomSeedLabel
+      // 
+      this.randomSeedLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedLabel.AutoSize = true;
+      this.randomSeedLabel.Location = new System.Drawing.Point(6, 35);
+      this.randomSeedLabel.Name = "randomSeedLabel";
+      this.randomSeedLabel.Size = new System.Drawing.Size(78, 13);
+      this.randomSeedLabel.TabIndex = 2;
+      this.randomSeedLabel.Text = "&Random Seed:";
+      // 
+      // problemDimensionVariableNameLabel
+      // 
+      this.problemDimensionVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemDimensionVariableNameLabel.AutoSize = true;
+      this.problemDimensionVariableNameLabel.Location = new System.Drawing.Point(357, 201);
+      this.problemDimensionVariableNameLabel.Name = "problemDimensionVariableNameLabel";
+      this.problemDimensionVariableNameLabel.Size = new System.Drawing.Size(100, 13);
+      this.problemDimensionVariableNameLabel.TabIndex = 25;
+      this.problemDimensionVariableNameLabel.Text = "(ProblemDimension)";
+      // 
+      // shakingFactorsVariableNameLabel
+      // 
+      this.shakingFactorsVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.shakingFactorsVariableNameLabel.AutoSize = true;
+      this.shakingFactorsVariableNameLabel.Location = new System.Drawing.Point(357, 175);
+      this.shakingFactorsVariableNameLabel.Name = "shakingFactorsVariableNameLabel";
+      this.shakingFactorsVariableNameLabel.Size = new System.Drawing.Size(87, 13);
+      this.shakingFactorsVariableNameLabel.TabIndex = 22;
+      this.shakingFactorsVariableNameLabel.Text = "(ShakingFactors)";
+      // 
+      // maximumGenerationsVariableNameLabel
+      // 
+      this.maximumGenerationsVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsVariableNameLabel.AutoSize = true;
+      this.maximumGenerationsVariableNameLabel.Location = new System.Drawing.Point(357, 149);
+      this.maximumGenerationsVariableNameLabel.Name = "maximumGenerationsVariableNameLabel";
+      this.maximumGenerationsVariableNameLabel.Size = new System.Drawing.Size(114, 13);
+      this.maximumGenerationsVariableNameLabel.TabIndex = 15;
+      this.maximumGenerationsVariableNameLabel.Text = "(MaximumGenerations)";
+      // 
+      // esLambdaVariableNameLabel
+      // 
+      this.esLambdaVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.esLambdaVariableNameLabel.AutoSize = true;
+      this.esLambdaVariableNameLabel.Location = new System.Drawing.Point(357, 123);
+      this.esLambdaVariableNameLabel.Name = "esLambdaVariableNameLabel";
+      this.esLambdaVariableNameLabel.Size = new System.Drawing.Size(61, 13);
+      this.esLambdaVariableNameLabel.TabIndex = 12;
+      this.esLambdaVariableNameLabel.Text = "(ESlambda)";
+      // 
+      // esRhoVariableNameLabel
+      // 
+      this.esRhoVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.esRhoVariableNameLabel.AutoSize = true;
+      this.esRhoVariableNameLabel.Location = new System.Drawing.Point(357, 97);
+      this.esRhoVariableNameLabel.Name = "esRhoVariableNameLabel";
+      this.esRhoVariableNameLabel.Size = new System.Drawing.Size(42, 13);
+      this.esRhoVariableNameLabel.TabIndex = 9;
+      this.esRhoVariableNameLabel.Text = "(ESrho)";
+      // 
+      // esMuVariableNameLabel
+      // 
+      this.esMuVariableNameLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.esMuVariableNameLabel.AutoSize = true;
+      this.esMuVariableNameLabel.Location = new System.Drawing.Point(357, 71);
+      this.esMuVariableNameLabel.Name = "esMuVariableNameLabel";
+      this.esMuVariableNameLabel.Size = new System.Drawing.Size(41, 13);
+      this.esMuVariableNameLabel.TabIndex = 6;
+      this.esMuVariableNameLabel.Text = "(ESmu)";
+      // 
+      // populationSizeLabel
+      // 
+      this.populationSizeLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeLabel.AutoSize = true;
+      this.populationSizeLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.populationSizeLabel.Location = new System.Drawing.Point(6, 71);
+      this.populationSizeLabel.Name = "populationSizeLabel";
+      this.populationSizeLabel.Size = new System.Drawing.Size(40, 13);
+      this.populationSizeLabel.TabIndex = 4;
+      this.populationSizeLabel.Text = "Mu (µ):";
+      // 
+      // lambdaTextBox
+      // 
+      this.lambdaTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.lambdaTextBox.Location = new System.Drawing.Point(168, 120);
+      this.lambdaTextBox.Name = "lambdaTextBox";
+      this.lambdaTextBox.Size = new System.Drawing.Size(186, 20);
+      this.lambdaTextBox.TabIndex = 11;
+      // 
+      // scopesTabPage
+      // 
+      this.scopesTabPage.Controls.Add(this.scopeView);
+      this.scopesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.scopesTabPage.Name = "scopesTabPage";
+      this.scopesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.scopesTabPage.Size = new System.Drawing.Size(493, 495);
+      this.scopesTabPage.TabIndex = 2;
+      this.scopesTabPage.Text = "Scopes";
+      this.scopesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // scopeView
+      // 
+      this.scopeView.Caption = "Scope";
+      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeView.Location = new System.Drawing.Point(3, 3);
+      this.scopeView.Name = "scopeView";
+      this.scopeView.Scope = null;
+      this.scopeView.Size = new System.Drawing.Size(487, 489);
+      this.scopeView.TabIndex = 0;
+      // 
+      // abortButton
+      // 
+      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.abortButton.Enabled = false;
+      this.abortButton.Location = new System.Drawing.Point(81, 527);
+      this.abortButton.Name = "abortButton";
+      this.abortButton.Size = new System.Drawing.Size(75, 23);
+      this.abortButton.TabIndex = 2;
+      this.abortButton.Text = "&Abort";
+      this.abortButton.UseVisualStyleBackColor = true;
+      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Location = new System.Drawing.Point(162, 527);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(75, 23);
+      this.resetButton.TabIndex = 3;
+      this.resetButton.Text = "&Reset";
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // cloneEngineButton
+      // 
+      this.cloneEngineButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cloneEngineButton.Location = new System.Drawing.Point(395, 527);
+      this.cloneEngineButton.Name = "cloneEngineButton";
+      this.cloneEngineButton.Size = new System.Drawing.Size(106, 23);
+      this.cloneEngineButton.TabIndex = 4;
+      this.cloneEngineButton.Text = "&Clone Engine...";
+      this.cloneEngineButton.UseVisualStyleBackColor = true;
+      this.cloneEngineButton.Click += new System.EventHandler(this.cloneEngineButton_Click);
+      // 
+      // toolTip
+      // 
+      this.toolTip.AutomaticDelay = 200;
+      this.toolTip.AutoPopDelay = 10000;
+      this.toolTip.InitialDelay = 200;
+      this.toolTip.ReshowDelay = 40;
+      // 
+      // ESEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.cloneEngineButton);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.abortButton);
+      this.Controls.Add(this.executeButton);
+      this.Name = "ESEditor";
+      this.Size = new System.Drawing.Size(501, 550);
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.successRuleGroupBox.ResumeLayout(false);
+      this.successRuleGroupBox.PerformLayout();
+      this.parentSelectionGroupBox.ResumeLayout(false);
+      this.parentSelectionGroupBox.PerformLayout();
+      this.scopesTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button executeButton;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.Button abortButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.TextBox lambdaTextBox;
+    private System.Windows.Forms.Label mutationRateLabel;
+    private System.Windows.Forms.TextBox muTextBox;
+    private System.Windows.Forms.Label populationSizeLabel;
+    private System.Windows.Forms.TabPage scopesTabPage;
+    private System.Windows.Forms.TextBox maximumGenerationsTextBox;
+    private System.Windows.Forms.Label maximumGenerationsLabel;
+    private System.Windows.Forms.TextBox shakingFactorsLowerBoundTextBox;
+    private System.Windows.Forms.Label mutationStrengthLabel;
+    private System.Windows.Forms.TextBox randomSeedTextBox;
+    private System.Windows.Forms.Label setRandomSeedRandomlyLabel;
+    private System.Windows.Forms.Label randomSeedLabel;
+    private System.Windows.Forms.CheckBox setRandomSeedRandomlyCheckBox;
+    private System.Windows.Forms.Label problemInitializationLabel;
+    private System.Windows.Forms.Label evaluationLabel;
+    private System.Windows.Forms.Label mutationLabel;
+    private System.Windows.Forms.Label solutionGenerationLabel;
+    private System.Windows.Forms.Button cloneEngineButton;
+    private System.Windows.Forms.TextBox mutationTextBox;
+    private System.Windows.Forms.TextBox solutionGenerationTextBox;
+    private System.Windows.Forms.TextBox problemInitializationTextBox;
+    private System.Windows.Forms.TextBox evaluationTextBox;
+    private System.Windows.Forms.Button setProblemInitializationButton;
+    private System.Windows.Forms.Button setEvaluationButton;
+    private System.Windows.Forms.Button setMutationButton;
+    private System.Windows.Forms.Button setSolutionGenerationButton;
+    private HeuristicLab.Core.ScopeView scopeView;
+    private System.Windows.Forms.Button viewEvaluationButton;
+    private System.Windows.Forms.Button viewMutationButton;
+    private System.Windows.Forms.Button viewSolutionGenerationButton;
+    private System.Windows.Forms.Button viewProblemInitializationButton;
+    private System.Windows.Forms.TextBox generalLearningRateTextBox;
+    private System.Windows.Forms.Label generalLearningRateLabel;
+    private System.Windows.Forms.Button setRecombinationButton;
+    private System.Windows.Forms.Button viewRecombinationButton;
+    private System.Windows.Forms.TextBox recombinationTextBox;
+    private System.Windows.Forms.Label recombinationLabel;
+    private System.Windows.Forms.TextBox rhoTextBox;
+    private System.Windows.Forms.Label rhoLabel;
+    private System.Windows.Forms.GroupBox parentSelectionGroupBox;
+    private System.Windows.Forms.RadioButton commaRadioButton;
+    private System.Windows.Forms.RadioButton plusRadioButton;
+    private System.Windows.Forms.GroupBox successRuleGroupBox;
+    private System.Windows.Forms.TextBox learningRateTextBox;
+    private System.Windows.Forms.Label learningRateLabel;
+    private System.Windows.Forms.Label maximumGenerationsVariableNameLabel;
+    private System.Windows.Forms.Label esLambdaVariableNameLabel;
+    private System.Windows.Forms.Label esRhoVariableNameLabel;
+    private System.Windows.Forms.Label esMuVariableNameLabel;
+    private System.Windows.Forms.Label shakingFactorsVariableNameLabel;
+    private System.Windows.Forms.Label learningRateVariableNameLabel;
+    private System.Windows.Forms.Label generalLearningRateVariableNameLabel;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.TextBox problemDimensionTextBox;
+    private System.Windows.Forms.Label problemDimensionLabel;
+    private System.Windows.Forms.Label leftBracketLabelRight;
+    private System.Windows.Forms.Label semicolonLabel;
+    private System.Windows.Forms.Label leftBracketLabelLeft;
+    private System.Windows.Forms.TextBox shakingFactorsUpperBoundTextBox;
+    private System.Windows.Forms.Label problemDimensionVariableNameLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.cs	(revision 1270)
@@ -0,0 +1,257 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.ES {
+  /// <summary>
+  /// Class for visual representation of an <see cref="ES"/>.
+  /// </summary>
+  public partial class ESEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    /// <summary>
+    /// Gets or sets the evolution strategy to display.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>. 
+    /// No own data storage present.</remarks>
+    public ES ES {
+      get { return (ES)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ESEditor"/>.
+    /// </summary>
+    public ESEditor() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ESEditor"/> with the given <paramref name="es"/>.
+    /// </summary>
+    /// <param name="es">The evolution strategy to display.</param>
+    public ESEditor(ES es)
+      : this() {
+      ES = es;
+    }
+
+    /// <summary>
+    /// Removes all event handlers from the underlying <see cref="ES"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      ES.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      ES.Engine.Finished -= new EventHandler(Engine_Finished);
+      ES.Changed -= new EventHandler(ES_Changed);
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="ES"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ES.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      ES.Engine.Finished += new EventHandler(Engine_Finished);
+      ES.Changed += new EventHandler(ES_Changed);
+      SetDataBinding();
+      scopeView.Scope = ES.Engine.GlobalScope;
+    }
+
+    void ES_Changed(object sender, EventArgs e) {
+      // neither Refresh() nor Update() work
+      randomSeedTextBox.Text = ES.Seed.ToString();
+      muTextBox.Text = ES.Mu.ToString();
+      rhoTextBox.Text = ES.Rho.ToString();
+      lambdaTextBox.Text = ES.Lambda.ToString();
+      learningRateTextBox.Text = ES.LearningRate.ToString();
+      generalLearningRateTextBox.Text = ES.GeneralLearningRate.ToString();
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ES == null) {
+        tabControl.Enabled = false;
+      } else {
+        tabControl.Enabled = true;
+        problemInitializationTextBox.Text = ES.ProblemInjector.GetType().Name;
+        solutionGenerationTextBox.Text = ES.SolutionGenerator.GetType().Name;
+        mutationTextBox.Text = ES.Mutator.GetType().Name;
+        evaluationTextBox.Text = ES.Evaluator.GetType().Name;
+        recombinationTextBox.Text = ES.Recombinator.GetType().Name;
+        plusRadioButton.Checked = ES.PlusNotation;
+        commaRadioButton.Checked = !ES.PlusNotation;
+      }
+    }
+
+    private void SetDataBinding() {
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", ES, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", ES, "Seed");
+      muTextBox.DataBindings.Add("Text", ES, "Mu");
+      rhoTextBox.DataBindings.Add("Text", ES, "Rho");
+      lambdaTextBox.DataBindings.Add("Text", ES, "Lambda");
+      maximumGenerationsTextBox.DataBindings.Add("Text", ES, "MaximumGenerations");
+      shakingFactorsLowerBoundTextBox.DataBindings.Add("Text", ES, "ShakingFactorsMin");
+      shakingFactorsUpperBoundTextBox.DataBindings.Add("Text", ES, "ShakingFactorsMax");
+      problemDimensionTextBox.DataBindings.Add("Text", ES, "ProblemDimension");
+      generalLearningRateTextBox.DataBindings.Add("Text", ES, "GeneralLearningRate");
+      learningRateTextBox.DataBindings.Add("Text", ES, "LearningRate");
+    }
+
+    #region Button Events
+    private void viewProblemInitializationButton_Click(object sender, EventArgs e) {
+      IView view = ES.ProblemInjector.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewSolutionGenerationButton_Click(object sender, EventArgs e) {
+      IView view = ES.SolutionGenerator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewMutationButton_Click(object sender, EventArgs e) {
+      IView view = ES.Mutator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewEvaluationButton_Click(object sender, EventArgs e) {
+      IView view = ES.Evaluator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewRecombinationButton_Click(object sender, EventArgs e) {
+      IView view = ES.Recombinator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void setProblemInitializationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        ES.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = ES.ProblemInjector.GetType().Name;
+      }
+    }
+    private void setSolutionGenerationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        ES.SolutionGenerator= chooseOperatorDialog.Operator;
+        solutionGenerationTextBox.Text = ES.SolutionGenerator.GetType().Name;
+      }
+    }
+    private void setMutationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        ES.Mutator = chooseOperatorDialog.Operator;
+        mutationTextBox.Text = ES.Mutator.GetType().Name;
+      }
+    }
+    private void setEvaluationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        ES.Evaluator = chooseOperatorDialog.Operator;
+        evaluationTextBox.Text = ES.Evaluator.GetType().Name;
+      }
+    }
+    private void setRecombinationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        ES.Recombinator = chooseOperatorDialog.Operator;
+        recombinationTextBox.Text = ES.Recombinator.GetType().Name;
+      }
+    }
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      ES.Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      ES.Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      ES.Engine.Reset();
+    }
+    private void cloneEngineButton_Click(object sender, EventArgs e) {
+      IEngine clone = (IEngine)ES.Engine.Clone();
+      IEditor editor = ((IEditable)clone).CreateEditor();
+      PluginManager.ControlManager.ShowControl(editor);
+    }
+    #endregion
+
+    #region Engine Events
+    private delegate void OnExceptionEventDelegate(object sender, ExceptionEventArgs e);
+    private void Engine_ExceptionOccurred(object sender, ExceptionEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Exception);
+    }
+    private void Engine_Finished(object sender, EventArgs e) {
+      scopeView.Refresh();
+      if (executeButton.InvokeRequired) {
+        executeButton.Invoke(new MethodInvoker(EnableExecute));
+      } else {
+        executeButton.Enabled = true;
+        abortButton.Enabled = false;
+      }
+    }
+    private void EnableExecute() {
+      executeButton.Enabled = true;
+      abortButton.Enabled = false;
+    }
+    #endregion
+
+    #region RadioButton Events
+    private void plusRadioButton_CheckedChanged(object sender, EventArgs e) {
+      if (plusRadioButton.Checked) ES.PlusNotation = true;
+    }
+
+    private void commaRadioButton_CheckedChanged(object sender, EventArgs e) {
+      if (commaRadioButton.Checked) ES.PlusNotation = false;
+    }
+    #endregion
+
+    private void problemDimensionTextBox_Validated(object sender, EventArgs e) {
+      UpdateLearningRates();
+      Refresh();
+    }
+
+    private void UpdateLearningRates() {
+      if (ES != null) {
+        int dimension = int.Parse(problemDimensionTextBox.Text);
+        ES.GeneralLearningRate = 1 / Math.Sqrt(2 * dimension);
+        ES.LearningRate = 1 / Math.Sqrt(2 * Math.Sqrt(dimension));
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESEditor.resx	(revision 1270)
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>7, 3</value>
+  </metadata>
+  <data name="shakingFactorsUpperBoundTextBox.ToolTip" xml:space="preserve">
+    <value>Enter a pattern that is used to generate the initial strategy vector.
+This can be a single number, or a pattern of numbers which is used until the dimension is reached.
+Use the colon ; to separate two numbers.</value>
+  </data>
+  <data name="shakingFactorsLowerBoundTextBox.ToolTip" xml:space="preserve">
+    <value>Enter a pattern that is used to generate the initial strategy vector.
+This can be a single number, or a pattern of numbers which is used until the dimension is reached.
+Use the colon ; to separate two numbers.</value>
+  </data>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>26</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESRandomSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESRandomSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/ESRandomSelector.cs	(revision 1270)
@@ -0,0 +1,110 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.ES {
+  /// <summary>
+  /// Selects rho*lambda individuals with each rho successing individuals being selected 
+  /// from the parent population without repetitions.
+  /// </summary>
+  public class ESRandomSelector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Selects rho*lambda individuals with each rho successing individuals being selected from the parent population without repetitions.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ESRandomSelector"/> with three variable infos 
+    /// (<c>Random</c>, <c>Lambda</c> and <c>Rho</c>).
+    /// </summary>
+    public ESRandomSelector()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Lambda", "The amount of children to select", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Rho", "The amount of parents per child", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Separates the sub scopes of the given <paramref name="scope"/> in <c>Selected</c> and 
+    /// <c>Remaining</c> and selects rho*lambda individuals with each rho successing individuals 
+    /// being selected from the parent population without repetitions.
+    /// </summary>
+    /// <param name="scope">The current scope where to perform the selection.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IScope source = new Scope("Remaining");
+      while (scope.SubScopes.Count > 0) {
+        IScope s = scope.SubScopes[0];
+        scope.RemoveSubScope(s);
+        source.AddSubScope(s);
+      }
+      scope.AddSubScope(source);
+      IScope target = new Scope("Selected");
+      scope.AddSubScope(target);
+
+      Select(source, target);
+
+      return null;
+    }
+
+    /// <summary>
+    /// Selects rho*lambda individuals with each rho successing individuals being selected 
+    /// from the parent population (<paramref name="source"/>) without repetitions.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when more parents than available should be
+    /// selected per child.</exception>
+    /// <param name="source">The scope where to select the individuals.</param>
+    /// <param name="target">The target scope where to insert the selected individuals.</param>
+    protected virtual void Select(IScope source, IScope target) {
+      IRandom random = GetVariableValue<IRandom>("Random", source, true);
+      int children = GetVariableValue<IntData>("Lambda", source, true).Data;
+      int parents = GetVariableValue<IntData>("Rho", source, true).Data;
+      int parentsAvailable = source.SubScopes.Count;
+
+      if (parents > parentsAvailable)
+        throw new InvalidOperationException("Cannot select more parents per child than there are parents available");
+
+      IList<int> selectedParents = new List<int>(parentsAvailable);
+      for (int i = 0; i < children; i++) {
+        selectedParents.Clear();
+        for (int j = 0; j < parents; j++) {
+          int nextParent = j; // will be used in case parents == parentsAvailable
+          if (parents < parentsAvailable) {
+            do {
+              nextParent = random.Next(parentsAvailable);
+            } while (selectedParents.Contains(nextParent));
+          }
+
+          target.AddSubScope((IScope)source.SubScopes[nextParent].Clone());
+          selectedParents.Add(nextParent);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/HeuristicLab.ES.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/HeuristicLab.ES.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/HeuristicLab.ES.csproj	(revision 1270)
@@ -0,0 +1,147 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{2E6112A7-3A94-406D-A28C-38AC2D324DCA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.ES</RootNamespace>
+    <AssemblyName>HeuristicLab.ES-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.ES-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.ES-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ES.cs" />
+    <Compile Include="ESRandomSelector.cs" />
+    <Compile Include="HeuristicLabESPlugin.cs" />
+    <Compile Include="ESEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ESEditor.Designer.cs">
+      <DependentUpon>ESEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SelfAdaptiveMutationStrengthAdjuster.cs" />
+    <Compile Include="VariableStrengthRepeatingManipulator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
+      <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
+      <Name>HeuristicLab.Logging</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.RealVector\HeuristicLab.RealVector.csproj">
+      <Project>{2D4E4565-3ED9-4BEB-AE75-39D871843D24}</Project>
+      <Name>HeuristicLab.RealVector</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
+      <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
+      <Name>HeuristicLab.Selection</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.SequentialEngine\HeuristicLab.SequentialEngine.csproj">
+      <Project>{B4BE8E53-BA06-4237-9A01-24255F880201}</Project>
+      <Name>HeuristicLab.SequentialEngine</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ESEditor.resx">
+      <DependentUpon>ESEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/HeuristicLabESPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/HeuristicLabESPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/HeuristicLabESPlugin.cs	(revision 1270)
@@ -0,0 +1,43 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ES {
+  /// <summary>
+  /// Plugin class for HeuristicLab.ES plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.ES-3.2")]
+  [PluginFile(Filename = "HeuristicLab.ES-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Selection-3.2")]
+  [Dependency(Dependency = "HeuristicLab.SequentialEngine-3.2")]
+  [Dependency(Dependency = "HeuristicLab.RealVector-3.2")]
+  public class HeuristicLabESPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.ES")]
+[assembly: AssemblyDescription("Standard Evolution Strategy (ES)")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c)  2002-2008 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("bff11e7b-19f7-4d4f-a9f4-c659bbc92086")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/SelfAdaptiveMutationStrengthAdjuster.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/SelfAdaptiveMutationStrengthAdjuster.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/SelfAdaptiveMutationStrengthAdjuster.cs	(revision 1270)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.ES {
+  /// <summary>
+  /// Mutates the endogenous strategy parameters.
+  /// </summary>
+  public class SelfAdaptiveMutationStrengthAdjuster : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Mutates the endogenous strategy parameters"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SelfAdaptiveMutationStrengthAdjuster"/> with four 
+    /// variable infos (<c>Random</c>, <c>StrategyVector</c>, <c>GeneralLearningRate</c> and
+    /// <c>LearningRate</c>).
+    /// </summary>
+    public SelfAdaptiveMutationStrengthAdjuster()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("StrategyVector", "Vector containing the endogenous strategy parameters", typeof(DoubleArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("GeneralLearningRate", "The general learning rate will scale all mutations. It's influence is calculated as: e^(GeneralLearningRate*N(0,1))", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("LearningRate", "Learning parameter defines the strength of the adaption of each component in the object parameter vector", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Mutates the endogenous strategy parameters.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBase.Apply"/> of base class <see cref="OperatorBase"/>.</remarks>
+    /// <param name="scope">The current scope to mutate.</param>
+    /// <inheritdoc select="returns"/>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      double[] strategyParams = GetVariableValue<DoubleArrayData>("StrategyVector", scope, false).Data;
+      double tau = GetVariableValue<DoubleData>("LearningRate", scope, true).Data;
+      double tau0 = GetVariableValue<DoubleData>("GeneralLearningRate", scope, true).Data;
+
+      NormalDistributedRandom N = new NormalDistributedRandom(random, 0.0, 1.0);
+      double generalMultiplier = Math.Exp(tau0 * N.NextDouble());
+      for (int i = 0; i < strategyParams.Length; i++) {
+        strategyParams[i] *= generalMultiplier * Math.Exp(tau * N.NextDouble());
+      }
+      return base.Apply(scope);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ES/VariableStrengthRepeatingManipulator.cs	(revision 1270)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.ES {
+  /// <summary>
+  /// Applies its sub operator a number of times depending on the <c>ShakingFactor</c>.
+  /// </summary>
+  public class VariableStrengthRepeatingManipulator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Applies its suboperator a number of times depending on the ShakingFactor"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableStrengthRepeatingManipulator"/> with two variable
+    /// infos (<c>Random</c> and <c>ShakingFactor</c>).
+    /// </summary>
+    public VariableStrengthRepeatingManipulator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ShakingFactor", "Determines the strength of the mutation (repeated application of the operator)", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Applies its suboperator a number of times depending on the <c>ShakingFactor</c>.
+    /// </summary>
+    /// <param name="scope">The current scope where to apply the operator.</param>
+    /// <returns>A new <see cref="CompositeOperation"/>, containing a specified number of 
+    /// the same operations with the same operator, the number depending on the <c>ShakingFactor</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      double shakingFactor = scope.GetVariableValue<DoubleData>("ShakingFactor", true).Data;
+      NormalDistributedRandom N = new NormalDistributedRandom(random, 1.0, shakingFactor);
+      int strength = (int)Math.Ceiling(Math.Abs(N.NextDouble()));
+      if (strength == 0) strength = 1;
+
+      CompositeOperation co = new CompositeOperation();
+      co.ExecuteInParallel = false;
+      for (int i = 0; i < strength; i++) {
+        co.AddOperation(new AtomicOperation(SubOperators[0], scope));
+      }
+
+      return co;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/ChildrenInitializer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/ChildrenInitializer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/ChildrenInitializer.cs	(revision 1270)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2009 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Initializes and prepares the children for crossover
+  /// </summary>
+  public class ChildrenInitializer : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"This operator prepares the individuals for crossover.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChildrenInitializer"/> with one variable info: <c>ParentsPerChild</c>.
+    /// </summary>
+    public ChildrenInitializer()
+      : base() {
+      AddVariableInfo(new VariableInfo("ParentsPerChild", "Denotes the number of parents that should be crossed per child. Note that some of the typical crossover operators can only work with 2 parents.", typeof(IntData), VariableKind.In));
+      GetVariableInfo("ParentsPerChild").Local = true;
+      AddVariable(new Variable("ParentsPerChild", new IntData(2)));
+    }
+
+    /// <summary>
+    /// Initializes the children as new scopes and inserts their parents as subscopes.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the number of selected parents is not a natural multiple of <c>ParentsPerChild</c>.</exception>
+    /// <param name="scope">The scope that houses all the selected parents as subscopes.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int parents = GetVariableValue<IntData>("ParentsPerChild", scope, true).Data;
+      int children = scope.SubScopes.Count;
+      if (children % parents > 0) throw new InvalidOperationException("ERROR in ChildrenInitializer: The number of selected parents is not a natural multiple of ParentsPerChild");
+      children /= parents;
+
+      for (int i = 0; i < children; i++) {
+        IScope child = new Scope(i.ToString());
+        for (int y = 0; y < parents; y++) {
+          IScope parenty = scope.SubScopes[0];
+          scope.RemoveSubScope(parenty);
+          child.AddSubScope(parenty);
+        }
+        scope.AddSubScope(child);
+      }
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/CrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/CrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/CrossoverBase.cs	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Base class for crossover operators.
+  /// </summary>
+  public abstract class CrossoverBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="CrossoverBase"/> with one variable info (<c>Random</c>).
+    /// </summary>
+    public CrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Retrieves the random number generator and calls <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom)"/>.
+    /// </summary>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      Cross(scope, random);
+      return null;
+    }
+
+    /// <summary>
+    /// Performs a crossover of all parents (sub-scopes) of <paramref name="scope"/> to create a new child.
+    /// Note that all children have to be prepared using the <see cref="HeuristicLab.Evolutionary.ChildrenInitializer"/>.
+    /// </summary>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <param name="random">A random number generator.</param>
+    protected abstract void Cross(IScope scope, IRandom random);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/HeuristicLab.Evolutionary.csproj	(revision 1270)
@@ -0,0 +1,109 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F5614C53-153C-4A37-A608-121E1C087F07}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Evolutionary</RootNamespace>
+    <AssemblyName>HeuristicLab.Evolutionary-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Evolutionary-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ChildrenInitializer.cs" />
+    <Compile Include="SASEGASAReunificator.cs" />
+    <Compile Include="CrossoverBase.cs" />
+    <Compile Include="HeuristicLabEvolutionaryPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SubScopesStorer.cs" />
+    <Compile Include="SuccessRuleMutationStrengthAdjuster.cs" />
+    <Compile Include="UnidirectionalRingMigrator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/HeuristicLabEvolutionaryPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Evolutionary plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Evolutionary-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Evolutionary-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabEvolutionaryPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Evolutionary")]
+[assembly: AssemblyDescription("HeuristicLab classes for evolutionary algorithms")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("75ed50d2-6d31-4308-a373-c3820769afb8")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SASEGASAReunificator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SASEGASAReunificator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SASEGASAReunificator.cs	(revision 1270)
@@ -0,0 +1,80 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Joins all sub sub scopes of a specified scope, reduces the number of sub 
+  /// scopes by 1 and uniformly partitions the sub sub scopes again, maintaining the order.
+  /// </summary>
+  public class SASEGASAReunificator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Joins all sub sub scopes of the given <paramref name="scope"/>, reduces the number of sub 
+    /// scopes by 1 and uniformly partitions the sub sub scopes again, maintaining the order.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when only 0 or 1 sub scope is available.</exception>
+    /// <param name="scope">The current scope whose sub scopes to reduce.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int subScopes = scope.SubScopes.Count;
+      if (subScopes <= 1)
+        throw new InvalidOperationException("SASEGASA reunification requires 2 or more sub-scopes");
+
+      // get all sub-sub-scopes
+      IList<IScope> subSubScopes = new List<IScope>();
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        while (scope.SubScopes[i].SubScopes.Count > 0) {
+          subSubScopes.Add(scope.SubScopes[i].SubScopes[0]);
+          scope.SubScopes[i].RemoveSubScope(scope.SubScopes[i].SubScopes[0]);
+        }
+      }
+
+      // reduce number of sub-scopes by 1 and partition sub-sub-scopes again
+      scope.RemoveSubScope(scope.SubScopes[scope.SubScopes.Count - 1]);
+      subScopes--;
+      int subSubScopesCount = subSubScopes.Count / subScopes;
+      for (int i = 0; i < subScopes; i++) {
+        for (int j = 0; j < subSubScopesCount; j++) {
+          scope.SubScopes[i].AddSubScope(subSubScopes[0]);
+          subSubScopes.RemoveAt(0);
+        }
+      }
+
+      // add remaining sub-sub-scopes to last sub-scope
+      while (subSubScopes.Count > 0) {
+        scope.SubScopes[scope.SubScopes.Count - 1].AddSubScope(subSubScopes[0]);
+        subSubScopes.RemoveAt(0);
+      }
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SubScopesStorer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SubScopesStorer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SubScopesStorer.cs	(revision 1270)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Stores the sub scopes of the right sub scope until enough newly created child scopes are available
+  /// (for example to replace a generation).
+  /// </summary>
+  public class SubScopesStorer : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubScopesStorer"/> with two variable infos 
+    /// (<c>SubScopes</c> and <c>SubScopesStore</c>).
+    /// </summary>
+    public SubScopesStorer()
+      : base() {
+      AddVariableInfo(new VariableInfo("SubScopes", "Number of sub-scopes that should be available", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SubScopesStore", "Temporarily stored sub-scopes", typeof(ItemList<IScope>), VariableKind.New | VariableKind.In | VariableKind.Out | VariableKind.Deleted));
+    }
+
+    /// <summary>
+    /// Stores all sub scopes of the right branch to get the required number of sub scopes. Shifts the left
+    /// branch one level up, if sub scopes are still missing (so that another selection and mutation circle
+    /// can take place). 
+    /// </summary>
+    /// <param name="scope">The current scope whose sub scopes to store.</param>
+    /// <returns><c>null</c> if the required number of sub scopes is available, the next 
+    /// <see cref="AtomicOperation"/> if sub scopes are still missing.</returns>
+    public override IOperation Apply(IScope scope) {
+      IntData subScopes = GetVariableValue<IntData>("SubScopes", scope, true);
+      ItemList<IScope> subScopesStore = GetVariableValue<ItemList<IScope>>("SubScopesStore", scope, false);
+
+      if (subScopesStore == null) {
+        subScopesStore = new ItemList<IScope>();
+        IVariableInfo info = GetVariableInfo("SubScopesStore");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, subScopesStore));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), subScopesStore));
+      }
+
+      IScope left = scope.SubScopes[0];
+      IScope right = scope.SubScopes[1];
+
+      if (right.SubScopes.Count + subScopesStore.Count
+          >= subScopes.Data) {  // enough sub-scopes available
+        // restore sub-scopes
+        for (int i = 0; i < subScopesStore.Count; i++) {
+          right.AddSubScope(subScopesStore[i]);
+          IVariableInfo info = GetVariableInfo("SubScopesStore");
+          if (info.Local)
+            RemoveVariable(info.ActualName);
+          else
+            scope.RemoveVariable(scope.TranslateName(info.FormalName));
+        }
+        return null;
+      } else {  // not enough sub-scopes available
+        // store sub-scopes
+        for (int i = 0; i < right.SubScopes.Count; i++) {
+          IScope s = right.SubScopes[0];
+          right.RemoveSubScope(s);
+          subScopesStore.Add(s);
+        }
+
+        // shift left on level up
+        scope.RemoveSubScope(right);
+        scope.RemoveSubScope(left);
+        for (int i = 0; i < left.SubScopes.Count; i++)
+          scope.AddSubScope(left.SubScopes[i]);
+
+        return new AtomicOperation(SubOperators[0], scope);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/SuccessRuleMutationStrengthAdjuster.cs	(revision 1270)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Adjusts the mutation strength based on the ratio of successful offsprings.
+  /// </summary>
+  public class SuccessRuleMutationStrengthAdjuster : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Adjusts the mutation strength based on the ratio of successful offsprings"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SuccessRuleMutationStrengthAdjuster"/> with six variable
+    /// infos (<c>ShakingFactor</c>, <c>SuccessfulChild</c>, <c>TargetSuccessProbability</c>, 
+    /// <c>SuccessProbability</c>, <c>LearningRate</c> and <c>DampeningFactor</c>).
+    /// </summary>
+    public SuccessRuleMutationStrengthAdjuster() {
+      AddVariableInfo(new VariableInfo("ShakingFactor", "The mutation strength to adjust", typeof(DoubleData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SuccessfulChild", "Variable that tells if a child has become better than its parent", typeof(BoolData), VariableKind.In | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("TargetSuccessProbability", "The targeted probability to create a successful offsrping", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SuccessProbability", "The measured probability to create a successful offspring", typeof(DoubleData), VariableKind.New | VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("LearningRate", "The speed at which the success probability changes", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("DampeningFactor", "Influences the strength of the adjustment to the mutation strength", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Adjusts the mutation strength based on the ratio of successful offsprings.
+    /// </summary>
+    /// <param name="scope">The current scope where to adjust the mutation strength.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      DoubleData shakingFactor = GetVariableValue<DoubleData>("ShakingFactor", scope, true);
+      DoubleData targetSuccessProb = GetVariableValue<DoubleData>("TargetSuccessProbability", scope, true);
+      DoubleData successProb = GetVariableValue<DoubleData>("SuccessProbability", scope, true);
+      if (successProb == null) {
+        IVariableInfo successProbInfo = GetVariableInfo("SuccessProbability");
+        IVariable successProbVar;
+        if (successProbInfo.Local) {
+          successProbVar = new Variable(successProbInfo.ActualName, new DoubleData(targetSuccessProb.Data));
+          AddVariable(successProbVar);
+        } else {
+          successProbVar = new Variable(scope.TranslateName(successProbInfo.FormalName), new DoubleData(targetSuccessProb.Data));
+          scope.AddVariable(successProbVar);
+        }
+        successProb = (DoubleData)successProbVar.Value;
+      }
+      DoubleData learningRate = GetVariableValue<DoubleData>("LearningRate", scope, true);
+      DoubleData dampeningFactor = GetVariableValue<DoubleData>("DampeningFactor", scope, true);
+
+      double success = 0.0;
+      for (int i = 0 ; i < scope.SubScopes.Count ; i++) {
+        if (scope.SubScopes[i].GetVariableValue<BoolData>("SuccessfulChild", false).Data) {
+          success++;
+        }
+        scope.SubScopes[i].RemoveVariable(scope.SubScopes[i].TranslateName("SuccessfulChild"));
+      }
+      if (scope.SubScopes.Count > 0) success /= scope.SubScopes.Count;
+
+      successProb.Data = (1.0 - learningRate.Data) * successProb.Data + success * learningRate.Data;
+      shakingFactor.Data *= Math.Exp((successProb.Data - ((targetSuccessProb.Data * (1.0 - successProb.Data)) / (1.0 - targetSuccessProb.Data))) / dampeningFactor.Data);
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Evolutionary/UnidirectionalRingMigrator.cs	(revision 1270)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Evolutionary {
+  /// <summary>
+  /// Operator class that migrates one sub scope of each child to its left neighbour sub scope, like a ring.
+  /// </summary>
+  public class UnidirectionalRingMigrator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Migrates every first sub scope of each child to its left neighbour (like a ring).
+    /// <pre>                                                               
+    ///                    scope                    scope             
+    ///                /     |     \            /     |     \         
+    ///               A      B      C    =>    A      B      C           
+    ///              /|\    /|\    /|\        /|\    /|\    /|\       
+    ///             G H I  J K L  M N O      H I J  K L M  N O G     
+    /// </pre>
+    /// </summary>
+    /// <param name="scope">The scope whose sub scopes of the children should migrate.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IList<IScope> emigrantsList = new List<IScope>();
+
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        IScope emigrants = scope.SubScopes[i].SubScopes[1];
+        scope.SubScopes[i].RemoveSubScope(emigrants);
+        emigrantsList.Add(emigrants);
+      }
+
+      // shift first emigrants to end of list
+      emigrantsList.Add(emigrantsList[0]);
+      emigrantsList.RemoveAt(0);
+
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        scope.SubScopes[i].AddSubScope(emigrantsList[i]);
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/And.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/And.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/And.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class And : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public And()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/BooleanTreeInterpreter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/BooleanTreeInterpreter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/BooleanTreeInterpreter.cs	(revision 1270)
@@ -0,0 +1,77 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.Boolean {
+  internal class BooleanTreeInterpreter {
+    private const double EPSILON = 0.00001;
+    private Dataset dataset;
+    private List<LightWeightFunction> expression;
+    private int targetVariable;
+    private int currentRow;
+    private int pc;
+
+    public void Reset(Dataset dataset, BakedFunctionTree tree, int targetVariable) {
+      this.dataset = dataset;
+      this.expression = tree.LinearRepresentation;
+      this.targetVariable = targetVariable;
+    }
+
+    internal int GetNumberOfErrors(int start, int end) {
+      int errors = 0;
+      for (int i = start; i < end; i++) {
+        pc = 0;
+        currentRow = i;
+        int result = Step() ? 1 : 0;
+        if (Math.Abs(result - dataset.GetValue(i, targetVariable)) > EPSILON) errors++;
+      }
+      return errors;
+    }
+
+    internal bool Step() {
+      LightWeightFunction curFun = expression[pc++];
+      int symbol = SymbolTable.MapFunction(curFun.functionType);
+      switch (symbol) {
+        case SymbolTable.AND: return Step() & Step();
+        case SymbolTable.OR: return Step() | Step();
+        case SymbolTable.NOT: return !Step();
+        case SymbolTable.XOR: return Step() ^ Step();
+        case SymbolTable.NAND: return !(Step() & Step());
+        case SymbolTable.NOR: return !(Step() | Step());
+        case SymbolTable.VARIABLE:
+          return dataset.GetValue(currentRow, (int)curFun.data[0]) != 0.0;
+        case SymbolTable.UNKNOWN:
+        default:
+          throw new InvalidOperationException(curFun.functionType.ToString());
+
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Evaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Evaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Evaluator.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean {
+  public class Evaluator : OperatorBase {
+    public Evaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree representing the ant", typeof(BakedFunctionTree), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Dataset", "The boolean dataset (values 0.0 = false, 1.0=true)", typeof(Dataset), VariableKind.In));
+      AddVariableInfo(new VariableInfo("TargetVariable", "Index of the column of the dataset that holds the target variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Errors", "", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      BakedFunctionTree tree = GetVariableValue<BakedFunctionTree>("FunctionTree", scope, true);
+      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
+      int targetVariable = GetVariableValue<IntData>("TargetVariable", scope, true).Data;
+      int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data;
+      int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
+
+      BooleanTreeInterpreter interpreter = new BooleanTreeInterpreter();
+      interpreter.Reset(dataset, tree, targetVariable);
+      int errors = interpreter.GetNumberOfErrors(start, end);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Errors"), new DoubleData(errors)));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/FunctionLibraryInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/FunctionLibraryInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/FunctionLibraryInjector.cs	(revision 1270)
@@ -0,0 +1,126 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP.Boolean {
+  public class FunctionLibraryInjector : OperatorBase {
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string ALLOWEDFEATURES = "AllowedFeatures";
+    private const string OPERATORLIBRARY = "FunctionLibrary";
+
+    private GPOperatorLibrary operatorLibrary;
+    private Variable variable;
+
+    public override string Description {
+      get { return @"Injects a function library for boolean logic."; }
+    }
+
+    public FunctionLibraryInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(ALLOWEDFEATURES, "List of indexes of allowed features", typeof(ItemList<IntData>), VariableKind.In));
+      AddVariableInfo(new VariableInfo(OPERATORLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      ItemList<IntData> allowedFeatures = GetVariableValue<ItemList<IntData>>(ALLOWEDFEATURES, scope, true);
+      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
+
+      // remove the target-variable in case it occures in allowed features
+      List<IntData> ts = allowedFeatures.FindAll(d => d.Data == targetVariable);
+      foreach (IntData t in ts) allowedFeatures.Remove(t);
+
+      InitDefaultOperatorLibrary();
+
+      int[] allowedIndexes = new int[allowedFeatures.Count];
+      for (int i = 0; i < allowedIndexes.Length; i++) {
+        allowedIndexes[i] = allowedFeatures[i].Data;
+      }
+
+      variable.SetConstraints(allowedIndexes);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(OPERATORLIBRARY), operatorLibrary));
+      return null;
+    }
+
+    private void InitDefaultOperatorLibrary() {
+      And and = new And();
+      Or or = new Or();
+      //Not not = new Not();
+      Nand nand = new Nand();
+      Nor nor = new Nor();
+      //Xor xor = new Xor();
+      variable = new HeuristicLab.GP.Boolean.Variable();
+
+      IFunction[] allFunctions = new IFunction[] {
+        and,
+        or,
+        //not,
+        nand,
+        nor,
+        //xor,
+        variable
+      };
+
+      SetAllowedSubOperators(and, allFunctions);
+      SetAllowedSubOperators(or, allFunctions);
+      //SetAllowedSubOperators(not, allFunctions);
+      SetAllowedSubOperators(nand, allFunctions);
+      SetAllowedSubOperators(nor, allFunctions);
+      //SetAllowedSubOperators(xor, allFunctions);
+
+      operatorLibrary = new GPOperatorLibrary();
+      operatorLibrary.GPOperatorGroup.AddOperator(and);
+      operatorLibrary.GPOperatorGroup.AddOperator(or);
+      //operatorLibrary.GPOperatorGroup.AddOperator(not);
+      operatorLibrary.GPOperatorGroup.AddOperator(nand);
+      operatorLibrary.GPOperatorGroup.AddOperator(nor);
+      //operatorLibrary.GPOperatorGroup.AddOperator(xor);
+      operatorLibrary.GPOperatorGroup.AddOperator(variable);
+    }
+
+    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
+      foreach (IConstraint c in f.Constraints) {
+        if (c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          typeConstraint.Clear();
+          foreach (IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        } else if (c is AllSubOperatorsTypeConstraint) {
+          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
+          typeConstraint.Clear();
+          foreach (IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/HeuristicLab.GP.Boolean.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/HeuristicLab.GP.Boolean.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/HeuristicLab.GP.Boolean.csproj	(revision 1270)
@@ -0,0 +1,134 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{A0821479-801F-43DF-B788-AE92FB410DA9}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP.Boolean</RootNamespace>
+    <AssemblyName>HeuristicLab.GP.Boolean-1.0</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BooleanTreeInterpreter.cs" />
+    <Compile Include="Not.cs" />
+    <Compile Include="Xor.cs" />
+    <Compile Include="Or.cs" />
+    <Compile Include="Nand.cs" />
+    <Compile Include="Nor.cs" />
+    <Compile Include="Evaluator.cs" />
+    <Compile Include="FunctionLibraryInjector.cs" />
+    <Compile Include="HeuristicLabGPBooleanPlugin.cs" />
+    <Compile Include="And.cs" />
+    <Compile Include="Variable.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SymbolTable.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
+      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
+      <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/HeuristicLabGPBooleanPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/HeuristicLabGPBooleanPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/HeuristicLabGPBooleanPlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.GP.Boolean {
+  [ClassInfo(Name = "HeuristicLab.GP.Boolean-1.0")]
+  [PluginFile(Filename = "HeuristicLab.GP.Boolean-1.0.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.GP-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  public class HeuristicLabGPBooleanPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Nand.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Nand.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Nand.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Nand : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Nand()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Nor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Nor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Nor.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Nor : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Nor()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Not.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Not.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Not.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Not : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Not()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Or.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Or.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Or.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Or : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Or()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.GP.Boolean")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("863021a4-3cde-48be-8af6-dac1077f5fb5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.$WCREV$")]
+[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/SymbolTable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/SymbolTable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/SymbolTable.cs	(revision 1270)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+
+namespace HeuristicLab.GP.Boolean {
+  class SymbolTable : StorableBase {
+    public const int VARIABLE = 1;
+    public const int NOT = 2;
+    public const int AND = 3;
+    public const int OR = 4;
+    public const int NAND = 5;
+    public const int NOR = 6;
+    public const int XOR = 7;
+    public const int UNKNOWN = 8;
+    private static Dictionary<Type, int> staticTypes = new Dictionary<Type, int>();
+
+    // needs to be public for persistence mechanism (Activator.CreateInstance needs empty constructor)
+    static SymbolTable() {
+      staticTypes = new Dictionary<Type, int>();
+      staticTypes[typeof(Variable)] = VARIABLE;
+      staticTypes[typeof(Not)] = NOT;
+      staticTypes[typeof(And)] = AND;
+      staticTypes[typeof(Or)] = OR;
+      staticTypes[typeof(Nand)] = NAND;
+      staticTypes[typeof(Nor)] = NOR;
+      staticTypes[typeof(Xor)] = XOR;
+    }
+
+    internal static int MapFunction(IFunction function) {
+      if(staticTypes.ContainsKey(function.GetType())) return staticTypes[function.GetType()];
+      else return UNKNOWN;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Variable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Variable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Variable.cs	(revision 1270)
@@ -0,0 +1,149 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.Boolean {
+  public sealed class Variable : FunctionBase {
+    public const string INDEX = "Variable";
+
+    private int minIndex;
+    private int maxIndex;
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Variable()
+      : base() {
+      AddVariableInfo(new VariableInfo(INDEX, "Index of the variable in the dataset representing this feature", typeof(ConstrainedIntData), VariableKind.None));
+      GetVariableInfo(INDEX).Local = true;
+      AddVariableInfo(new VariableInfo(INITIALIZATION, "Initialization operator for variables", typeof(CombinedOperator), VariableKind.None));
+      GetVariableInfo(INITIALIZATION).Local = false;
+      AddVariableInfo(new VariableInfo(MANIPULATION, "Manipulation operator for variables", typeof(CombinedOperator), VariableKind.None));
+      GetVariableInfo(MANIPULATION).Local = false;
+
+      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
+
+      ConstrainedIntData variable = new ConstrainedIntData();
+      AddVariable(new HeuristicLab.Core.Variable(INDEX, variable));
+      minIndex = 0; maxIndex = 100;
+
+      SetupInitialization();
+      SetupManipulation();
+
+    }
+
+    private void SetupInitialization() {
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      UniformRandomizer indexRandomizer = new UniformRandomizer();
+      indexRandomizer.Min = minIndex;
+      indexRandomizer.Max = maxIndex + 1; // uniform randomizer generates numbers in the range [min, max[
+      indexRandomizer.GetVariableInfo("Value").ActualName = INDEX;
+      indexRandomizer.Name = "Index Randomizer";
+
+      combinedOp.OperatorGraph.AddOperator(seq);
+      combinedOp.OperatorGraph.AddOperator(indexRandomizer);
+      combinedOp.OperatorGraph.InitialOperator = seq;
+      seq.AddSubOperator(indexRandomizer);
+      HeuristicLab.Core.IVariable initOp = GetVariable(INITIALIZATION);
+      if(initOp == null) {
+        AddVariable(new HeuristicLab.Core.Variable(INITIALIZATION, combinedOp));
+      } else {
+        initOp.Value = combinedOp;
+      }
+    }
+
+    private void SetupManipulation() {
+      // manipulation operator
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      UniformRandomizer indexRandomizer = new UniformRandomizer();
+      indexRandomizer.Min = minIndex;
+      indexRandomizer.Max = maxIndex + 1;
+      indexRandomizer.GetVariableInfo("Value").ActualName = INDEX;
+      indexRandomizer.Name = "Index Randomizer";
+
+      combinedOp.OperatorGraph.AddOperator(seq);
+      combinedOp.OperatorGraph.AddOperator(indexRandomizer);
+      combinedOp.OperatorGraph.InitialOperator = seq;
+      seq.AddSubOperator(indexRandomizer);
+      HeuristicLab.Core.IVariable manipulationOp = GetVariable(MANIPULATION);
+      if(manipulationOp == null) {
+        AddVariable(new HeuristicLab.Core.Variable(MANIPULATION, combinedOp));
+      } else {
+        manipulationOp.Value = combinedOp;
+      }
+    }
+
+    public void SetConstraints(int[] allowedIndexes) {
+      ConstrainedIntData index = GetVariableValue<ConstrainedIntData>(INDEX, null, false);
+      Array.Sort(allowedIndexes);
+      minIndex = allowedIndexes[0]; maxIndex = allowedIndexes[allowedIndexes.Length - 1];
+      List<IConstraint> constraints = new List<IConstraint>();
+      int start = allowedIndexes[0];
+      int prev = start;
+      for(int i = 1; i < allowedIndexes.Length; i++) {
+        if(allowedIndexes[i] != prev + 1) {
+          IntBoundedConstraint lastRange = new IntBoundedConstraint();
+          lastRange.LowerBound = start;
+          lastRange.LowerBoundEnabled = true;
+          lastRange.LowerBoundIncluded = true;
+          lastRange.UpperBound = prev;
+          lastRange.UpperBoundEnabled = true;
+          lastRange.UpperBoundIncluded = true;
+          constraints.Add(lastRange);
+          start = allowedIndexes[i];
+          prev = start;
+        }
+        prev = allowedIndexes[i];
+      }
+      IntBoundedConstraint range = new IntBoundedConstraint();
+      range.LowerBound = start;
+      range.LowerBoundEnabled = true;
+      range.LowerBoundIncluded = true;
+      range.UpperBound = prev;
+      range.UpperBoundEnabled = true;
+      range.UpperBoundIncluded = true;
+      constraints.Add(range);
+      if(constraints.Count > 1) {
+        OrConstraint or = new OrConstraint();
+        foreach(IConstraint c in constraints) or.Clauses.Add(c);
+        index.AddConstraint(or);
+      } else {
+        index.AddConstraint(constraints[0]);
+      }
+
+      SetupInitialization();
+      SetupManipulation();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Xor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Xor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.Boolean/Xor.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.Boolean{
+  public sealed class Xor : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Xor()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/AntInterpreter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/AntInterpreter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/AntInterpreter.cs	(revision 1270)
@@ -0,0 +1,159 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP.SantaFe {
+  internal class AntInterpreter {
+    private const int N_FOOD_ITEMS = 89;
+    private const int WORLD_WIDTH = 32;
+    private const int WORLD_HEIGHT = 32;
+    private const int FOOD = 1;
+    private const int EMPTY = 0;
+    private int[] SANTA_FE_TRAIL = new int[] {
+      0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 
+      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    };
+
+    private int[] trail;
+
+    public int ElapsedTime { get; set; }
+    public int MaxTimeSteps { get; set; }
+    public int FoodEaten { get; set; }
+    private int currentDirection;
+    private int currentLocation;
+
+    public AntInterpreter() {
+      currentLocation = 0;
+      currentDirection = 0;
+      FoodEaten = 0;
+      trail = new int[WORLD_HEIGHT * WORLD_WIDTH];
+      Array.Copy(SANTA_FE_TRAIL, trail, SANTA_FE_TRAIL.Length);
+    }
+
+    internal void Run(IFunctionTree tree) {
+      while(FoodEaten < N_FOOD_ITEMS && ElapsedTime < MaxTimeSteps) {
+        Step(tree);
+      }
+    }
+
+    internal void Step(IFunctionTree tree) {
+      int symbol = SymbolTable.MapFunction(tree.Function);
+      switch(symbol) {
+        case SymbolTable.LEFT:
+          if(ElapsedTime >= MaxTimeSteps || FoodEaten >= N_FOOD_ITEMS) return;
+          currentDirection = (currentDirection + 3) % 4;
+          ElapsedTime++;
+          return;
+        case SymbolTable.RIGHT:
+          if(ElapsedTime >= MaxTimeSteps || FoodEaten >= N_FOOD_ITEMS) return;
+          currentDirection = (currentDirection + 1) % 4;
+          ElapsedTime++;
+          return;
+        case SymbolTable.MOVE:
+          if(ElapsedTime >= MaxTimeSteps || FoodEaten >= N_FOOD_ITEMS) return;
+          currentLocation = NextField();
+          FoodEaten += trail[currentLocation];
+          trail[currentLocation] = EMPTY;
+          ElapsedTime++;
+          return;
+        case SymbolTable.IF_FOOD_AHEAD:
+            if(trail[NextField()] == FOOD) {
+              Step(tree.SubTrees[0]);
+            } else {
+              Step(tree.SubTrees[1]);
+            }
+          return;
+        case SymbolTable.PROG2:
+          Step(tree.SubTrees[0]);
+          Step(tree.SubTrees[1]);
+          return;
+        case SymbolTable.PROG3:
+          Step(tree.SubTrees[0]);
+          Step(tree.SubTrees[1]);
+          Step(tree.SubTrees[2]);
+          return;
+        case SymbolTable.UNKNOWN:
+          throw new InvalidOperationException(tree.Function.ToString());
+      }
+    }
+
+    private int NextField() {
+      int currentLocationX = currentLocation % WORLD_WIDTH;
+      int currentLocationY = currentLocation / WORLD_HEIGHT;
+
+      switch(currentDirection) {
+        case 0:
+          currentLocationX = (currentLocationX + 1) % WORLD_WIDTH; // EAST
+          break;
+        case 1:
+          currentLocationY = (currentLocationY + 1) % WORLD_HEIGHT; // SOUTH
+          break;
+        case 2:
+          currentLocationX = (currentLocationX + WORLD_WIDTH - 1) % WORLD_WIDTH; // WEST
+          break;
+        case 3:
+          currentLocationY = (currentLocationY + WORLD_HEIGHT - 1) % WORLD_HEIGHT; // NORTH
+          break;
+        default:
+          throw new InvalidOperationException();
+      }
+      return currentLocationY * WORLD_WIDTH + currentLocationX;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Evaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Evaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Evaluator.cs	(revision 1270)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.SantaFe {
+  public class Evaluator : OperatorBase {
+    public Evaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree representing the ant", typeof(IFunctionTree), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FoodEaten", "Number of food items that the ant found", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IFunctionTree tree = GetVariableValue<IFunctionTree>("FunctionTree", scope, false);
+      AntInterpreter interpreter = new AntInterpreter();
+      interpreter.MaxTimeSteps = 600;
+      interpreter.Run(tree);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("FoodEaten"), new DoubleData(interpreter.FoodEaten)));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/FunctionLibraryInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/FunctionLibraryInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/FunctionLibraryInjector.cs	(revision 1270)
@@ -0,0 +1,100 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP.SantaFe {
+  public class FunctionLibraryInjector : OperatorBase {
+    private const string OPERATORLIBRARY = "FunctionLibrary";
+
+    private GPOperatorLibrary operatorLibrary;
+
+    public override string Description {
+      get { return @"Injects a function library for the ant problem."; }
+    }
+
+    public FunctionLibraryInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo(OPERATORLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      InitDefaultOperatorLibrary();
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(OPERATORLIBRARY), operatorLibrary));
+      return null;
+    }
+
+    private void InitDefaultOperatorLibrary() {
+      IfFoodAhead ifFoodAhead = new IfFoodAhead();
+      Prog2 prog2 = new Prog2();
+      Prog3 prog3 = new Prog3();
+      Move move = new Move();
+      Left left = new Left();
+      Right right = new Right();
+
+      IFunction[] allFunctions = new IFunction[] {
+        ifFoodAhead,
+        prog2,
+        prog3,
+        move,
+        left,
+        right
+      };
+
+      SetAllowedSubOperators(ifFoodAhead, allFunctions);
+      SetAllowedSubOperators(prog2, allFunctions);
+      SetAllowedSubOperators(prog3, allFunctions);
+
+      operatorLibrary = new GPOperatorLibrary();
+      operatorLibrary.GPOperatorGroup.AddOperator(ifFoodAhead);
+      operatorLibrary.GPOperatorGroup.AddOperator(prog2);
+      operatorLibrary.GPOperatorGroup.AddOperator(prog3);
+      operatorLibrary.GPOperatorGroup.AddOperator(move);
+      operatorLibrary.GPOperatorGroup.AddOperator(left);
+      operatorLibrary.GPOperatorGroup.AddOperator(right);
+    }
+
+    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
+      foreach(IConstraint c in f.Constraints) {
+        if(c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          typeConstraint.Clear();
+          foreach(IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        } else if(c is AllSubOperatorsTypeConstraint) {
+          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
+          typeConstraint.Clear();
+          foreach(IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/HeuristicLab.GP.SantaFe.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/HeuristicLab.GP.SantaFe.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/HeuristicLab.GP.SantaFe.csproj	(revision 1270)
@@ -0,0 +1,130 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP.SantaFe</RootNamespace>
+    <AssemblyName>HeuristicLab.GP.SantaFe-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AntInterpreter.cs" />
+    <Compile Include="FunctionLibraryInjector.cs" />
+    <Compile Include="Prog3.cs" />
+    <Compile Include="Prog2.cs" />
+    <Compile Include="IfFoodAhead.cs" />
+    <Compile Include="Right.cs" />
+    <Compile Include="Left.cs" />
+    <Compile Include="Move.cs" />
+    <Compile Include="HeuristicLabGPSantaFePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Evaluator.cs" />
+    <Compile Include="SymbolTable.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
+      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
+      <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/HeuristicLabGPSantaFePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/HeuristicLabGPSantaFePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/HeuristicLabGPSantaFePlugin.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.GP.SantaFe {
+  [ClassInfo(Name = "HeuristicLab.GP.SantaFe-3.2")]
+  [PluginFile(Filename = "HeuristicLab.GP.SantaFe-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.GP-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  public class HeuristicLabGPSantaFePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/IfFoodAhead.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/IfFoodAhead.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/IfFoodAhead.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.SantaFe {
+  public sealed class IfFoodAhead : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public IfFoodAhead()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Left.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Left.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Left.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.SantaFe {
+  public sealed class Left : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Left()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Move.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Move.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Move.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.SantaFe {
+  public sealed class Move : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Move()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Prog2.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Prog2.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Prog2.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.SantaFe {
+  public sealed class Prog2 : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Prog2()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Prog3.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Prog3.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Prog3.cs	(revision 1270)
@@ -0,0 +1,47 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.SantaFe {
+  public sealed class Prog3 : FunctionBase {
+
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Prog3()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(3, 3)); 
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.GP.SantaFe")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("863021a4-3cde-48be-8af6-dac1077f5fb5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Right.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Right.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/Right.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.SantaFe {
+  public sealed class Right : FunctionBase {
+    public override string Description {
+      get { return ""; }
+    }
+
+    public Right()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/SymbolTable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/SymbolTable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.SantaFe/SymbolTable.cs	(revision 1270)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+
+namespace HeuristicLab.GP.SantaFe {
+  class SymbolTable : StorableBase {
+    public const int IF_FOOD_AHEAD = 1;
+    public const int LEFT = 2;
+    public const int RIGHT = 3;
+    public const int MOVE = 4;
+    public const int PROG2 = 5;
+    public const int PROG3 = 6;
+    public const int UNKNOWN = 7;
+    private static Dictionary<Type, int> staticTypes = new Dictionary<Type, int>();
+
+    // needs to be public for persistence mechanism (Activator.CreateInstance needs empty constructor)
+    static SymbolTable() {
+      staticTypes = new Dictionary<Type, int>();
+      staticTypes[typeof(IfFoodAhead)] = IF_FOOD_AHEAD;
+      staticTypes[typeof(Left)] = LEFT;
+      staticTypes[typeof(Right)] = RIGHT;
+      staticTypes[typeof(Move)] = MOVE;
+      staticTypes[typeof(Prog2)] = PROG2;
+      staticTypes[typeof(Prog3)] = PROG3;
+    }
+
+    internal static int MapFunction(IFunction function) {
+      if(staticTypes.ContainsKey(function.GetType())) return staticTypes[function.GetType()];
+      else return UNKNOWN;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/AccuracyEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/AccuracyEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/AccuracyEvaluator.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class AccuracyEvaluator : GPClassificationEvaluatorBase {
+    private const double EPSILON = 1.0E-6;
+    public override string Description {
+      get {
+        return @"Calculates the total accuracy of the model (ratio of correctly classified instances to total number of instances) given a model and the list of possible target class values.";
+      }
+    }
+
+    public AccuracyEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Accuracy", "The total accuracy of the model (ratio of correctly classified instances to total number of instances)", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, double[] classes, double[] thresholds, int start, int end) {
+      DoubleData accuracy = GetVariableValue<DoubleData>("Accuracy", scope, false, false);
+      if (accuracy == null) {
+        accuracy = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Accuracy"), accuracy));
+      }
+
+      int nSamples = end - start;
+      int nCorrect = 0;
+      for (int sample = start; sample < end; sample++) {
+        double est = evaluator.Evaluate(sample);
+        double origClass = dataset.GetValue(sample, targetVariable);
+        double estClass = double.NaN;
+        // if estimation is lower than the smallest threshold value -> estimated class is the lower class
+        if (est < thresholds[0]) estClass = classes[0];
+        // if estimation is larger (or equal) than the largest threshold value -> estimated class is the upper class
+        else if (est >= thresholds[thresholds.Length - 1]) estClass = classes[classes.Length - 1];
+        else {
+          // otherwise the estimated class is the class which upper threshold is larger than the estimated value
+          for (int k = 0; k < thresholds.Length; k++) {
+            if (thresholds[k] > est) {
+              estClass = classes[k];
+              break;
+            }
+          }
+        }
+        if (Math.Abs(estClass - origClass) < EPSILON) nCorrect++;
+      }
+      accuracy.Data = nCorrect / (double)nSamples;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ClassificationMeanSquaredErrorEvaluator.cs	(revision 1270)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class ClassificationMeanSquaredErrorEvaluator : GPClassificationEvaluatorBase {
+    private const double EPSILON = 1.0E-7;
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'DataSet' and calculates the mean-squared-error
+for the estimated values vs. the real values of 'TargetVariable'.";
+      }
+    }
+
+    public ClassificationMeanSquaredErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("MSE", "The mean squared error of the model", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, double[] classes, double[] thresholds, int start, int end) {
+      double errorsSquaredSum = 0;
+      for (int sample = start; sample < end; sample++) {
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+        if (!double.IsNaN(original) && !double.IsInfinity(original)) {
+          double error = estimated - original;
+          // between classes use squared error
+          // on the lower end and upper end only add linear error if the absolute error is larger than 1
+          // the error>1.0 constraint is needed for balance because in the interval ]-1, 1[ the squared error is smaller than the absolute error
+          if ((IsEqual(original, classes[0]) && error < -1.0) ||
+            (IsEqual(original, classes[classes.Length - 1]) && error > 1.0)) {
+            errorsSquaredSum += Math.Abs(error); // only add linear error below the smallest class or above the largest class
+          } else {
+            errorsSquaredSum += error * error;
+          }
+        }
+      }
+
+      errorsSquaredSum /= (end - start);
+      if (double.IsNaN(errorsSquaredSum) || double.IsInfinity(errorsSquaredSum)) {
+        errorsSquaredSum = double.MaxValue;
+      }
+
+      DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false);
+      if (mse == null) {
+        mse = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MSE"), mse));
+      }
+
+      mse.Data = errorsSquaredSum;
+    }
+
+    private bool IsEqual(double x, double y) {
+      return Math.Abs(x - y) < EPSILON;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ConfusionMatrixEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ConfusionMatrixEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ConfusionMatrixEvaluator.cs	(revision 1270)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class ConfusionMatrixEvaluator : GPClassificationEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Calculates the classifcation matrix of the model.";
+      }
+    }
+
+    public ConfusionMatrixEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("ConfusionMatrix", "The confusion matrix of the model", typeof(IntMatrixData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, double[] classes, double[] thresholds, int start, int end) {
+      IntMatrixData matrix = GetVariableValue<IntMatrixData>("ConfusionMatrix", scope, false, false);
+      if (matrix == null) {
+        matrix = new IntMatrixData(new int[classes.Length, classes.Length]);
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("ConfusionMatrix"), matrix));
+      }
+
+      int nSamples = end - start;
+      for (int sample = start; sample < end; sample++) {
+        double est = evaluator.Evaluate(sample);
+        double origClass = dataset.GetValue(sample, targetVariable);
+        int estClassIndex = -1;
+        // if estimation is lower than the smallest threshold value -> estimated class is the lower class
+        if (est < thresholds[0]) estClassIndex = 0;
+        // if estimation is larger (or equal) than the largest threshold value -> estimated class is the upper class
+        else if (est >= thresholds[thresholds.Length - 1]) estClassIndex = classes.Length - 1;
+        else {
+          // otherwise the estimated class is the class which upper threshold is larger than the estimated value
+          for (int k = 0; k < thresholds.Length; k++) {
+            if (thresholds[k] > est) {
+              estClassIndex = k;
+              break;
+            }
+          }
+        }
+
+        // find the first threshold index that is larger to the original value
+        int origClassIndex = classes.Length - 1;
+        for (int i = 0; i < thresholds.Length; i++) {
+          if (origClass < thresholds[i]) {
+            origClassIndex = i;
+            break;
+          }
+        }
+        matrix.Data[origClassIndex, estClassIndex]++;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/CrossValidation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/CrossValidation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/CrossValidation.cs	(revision 1270)
@@ -0,0 +1,115 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification
+{
+    public class CrossValidation : OperatorBase
+    {
+
+        private const string DATASET = "Dataset";
+        private const string NFOLD = "n-Fold";
+        private const string TRAININGSAMPLESSTART = "TrainingSamplesStart";
+        private const string TRAININGSAMPLESEND = "TrainingSamplesEnd";
+        private const string VALIDATIONSAMPLESSTART = "ValidationSamplesStart";
+        private const string VALIDATIONSAMPLESEND = "ValidationSamplesEnd";
+        private const string TESTSAMPLESSTART = "TestSamplesStart";
+        private const string TESTSAMPLESEND = "TestSamplesEnd";
+
+        public override string Description
+        {
+            get { return @"TASK"; }
+        }
+
+        public CrossValidation()
+            : base()
+        {
+            AddVariableInfo(new VariableInfo(DATASET, "The original dataset and the new datasets in the newly created subscopes", typeof(Dataset), VariableKind.In));
+            AddVariableInfo(new VariableInfo(NFOLD, "Number of folds for the cross-validation", typeof(IntData), VariableKind.In));
+            AddVariableInfo(new VariableInfo(TRAININGSAMPLESSTART, "The start of training samples in the original dataset and starts of training samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New));
+            AddVariableInfo(new VariableInfo(TRAININGSAMPLESEND, "The end of training samples in the original dataset and ends of training samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New));
+            AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESSTART, "The start of validation samples in the original dataset and starts of validation samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New));
+            AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESEND, "The end of validation samples in the original dataset and ends of validation samples in the new datasets", typeof(IntData), VariableKind.In | VariableKind.New));
+            AddVariableInfo(new VariableInfo(TESTSAMPLESSTART, "The start of the test samples in the new datasets", typeof(IntData), VariableKind.New));
+            AddVariableInfo(new VariableInfo(TESTSAMPLESEND, "The end of the test samples in the new datasets", typeof(IntData), VariableKind.New));
+        }
+
+        public override IOperation Apply(IScope scope) {
+      Dataset origDataset = GetVariableValue<Dataset>(DATASET, scope, true);
+      int nFolds = GetVariableValue<IntData>(NFOLD, scope, true).Data;
+      if (nFolds < 2) throw new ArgumentException("The number of folds (nFolds) has to be >=2 for cross validation"); 
+      int origTrainingSamplesStart = GetVariableValue<IntData>(TRAININGSAMPLESSTART, scope, true).Data;
+      int origTrainingSamplesEnd = GetVariableValue<IntData>(TRAININGSAMPLESEND, scope, true).Data;
+      int origValidationSamplesStart = GetVariableValue<IntData>(VALIDATIONSAMPLESSTART, scope, true).Data;
+      int origValidationSamplesEnd = GetVariableValue<IntData>(VALIDATIONSAMPLESEND, scope, true).Data;
+      int n=origDataset.Rows;
+      int origTrainingSamples = (origTrainingSamplesEnd-origTrainingSamplesStart);
+      int origValidationSamples = (origValidationSamplesEnd-origValidationSamplesStart);
+
+      double percentTrainingSamples = origTrainingSamples / (double)(origValidationSamples + origTrainingSamples);
+      int nTestSamples = n / nFolds;
+
+      int newTrainingSamplesStart = 0;
+      int newTrainingSamplesEnd = (int)((n - nTestSamples) * percentTrainingSamples);
+      int newValidationSamplesStart = newTrainingSamplesEnd;
+      int newValidationSamplesEnd = n - nTestSamples;
+      int newTestSamplesStart = n - nTestSamples;
+      int newTestSamplesEnd = n;
+
+      for(int i = 0; i < nFolds; i++) {
+        Scope childScope = new Scope(i.ToString());
+        Dataset rotatedSet = new Dataset();
+
+        double[] samples = new double[origDataset.Samples.Length];
+        Array.Copy(origDataset.Samples, samples, samples.Length);
+        RotateArray(samples, i * nTestSamples * origDataset.Columns);
+
+        rotatedSet.Rows = origDataset.Rows;
+        rotatedSet.Columns = origDataset.Columns;
+        rotatedSet.Samples = samples;
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(DATASET), rotatedSet));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TRAININGSAMPLESSTART), new IntData(newTrainingSamplesStart)));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TRAININGSAMPLESEND), new IntData(newTrainingSamplesEnd)));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(VALIDATIONSAMPLESSTART), new IntData(newValidationSamplesStart)));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(VALIDATIONSAMPLESEND), new IntData(newValidationSamplesEnd)));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TESTSAMPLESSTART), new IntData(newTestSamplesStart)));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TESTSAMPLESEND), new IntData(newTestSamplesEnd)));
+
+        scope.AddSubScope(childScope);
+      }
+      return null;
+    }
+
+        private void RotateArray(double[] samples, int p)
+        {
+            Array.Reverse(samples, 0, p);
+            Array.Reverse(samples, p, samples.Length - p);
+            Array.Reverse(samples);
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/DatasetShuffler.cs	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class DatasetShuffler : OperatorBase {
+    public DatasetShuffler()
+      : base() {
+      AddVariableInfo(new VariableInfo("Dataset", "Dataset which should be shuffled (random row order)", typeof(Dataset), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("Random", "Randomizer", typeof(MersenneTwister), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
+      MersenneTwister tw = GetVariableValue<MersenneTwister>("Random", scope, true);
+
+      for(int i = 0; i < dataset.Rows - 1; i++) {
+        int j = tw.Next(i, dataset.Rows);
+        ExchangeRows(dataset, i, j);
+      }
+
+      return null;
+    }
+
+    private void ExchangeRows(Dataset dataset, int i, int j) {
+      for(int k = 0; k < dataset.Columns; k++) {
+        double temp = dataset.GetValue(i, k);
+        dataset.SetValue(i, k, dataset.GetValue(j, k));
+        dataset.SetValue(j, k, temp);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/FunctionLibraryInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/FunctionLibraryInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/FunctionLibraryInjector.cs	(revision 1270)
@@ -0,0 +1,209 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Constraints;
+using StructId = HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class FunctionLibraryInjector : OperatorBase {
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string ALLOWEDFEATURES = "AllowedFeatures";
+    private const string FUNCTIONLIBRARY = "FunctionLibrary";
+
+    private StructId.Variable variable;
+    private GPOperatorLibrary operatorLibrary;
+
+    public override string Description {
+      get { return @"Injects a default function library for classification problems."; }
+    }
+
+    public FunctionLibraryInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(ALLOWEDFEATURES, "List of indexes of allowed features", typeof(ItemList<IntData>), VariableKind.In));
+      AddVariableInfo(new VariableInfo(FUNCTIONLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      ItemList<IntData> allowedFeatures = GetVariableValue<ItemList<IntData>>(ALLOWEDFEATURES, scope, true);
+      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
+
+      // remove the target-variable in case it occures in allowed features
+      List<IntData> ts = allowedFeatures.FindAll(d => d.Data == targetVariable);
+      foreach(IntData t in ts) allowedFeatures.Remove(t);
+
+      InitDefaultOperatorLibrary();
+
+      int[] allowedIndexes = new int[allowedFeatures.Count];
+      for(int i = 0; i < allowedIndexes.Length; i++) {
+        allowedIndexes[i] = allowedFeatures[i].Data;
+      }
+
+      variable.SetConstraints(allowedIndexes, 0, 0);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(FUNCTIONLIBRARY), operatorLibrary));
+      return null;
+    }
+
+    private void InitDefaultOperatorLibrary() {
+      variable = new StructId.Variable();
+      StructId.Constant constant = new StructId.Constant();
+
+      StructId.Addition addition = new StructId.Addition();
+      StructId.And and = new StructId.And();
+      StructId.Average average = new StructId.Average();
+      StructId.Cosinus cosinus = new StructId.Cosinus();
+      StructId.Division division = new StructId.Division();
+      StructId.Equal equal = new StructId.Equal();
+      StructId.Exponential exponential = new StructId.Exponential();
+      StructId.GreaterThan greaterThan = new StructId.GreaterThan();
+      StructId.IfThenElse ifThenElse = new StructId.IfThenElse();
+      StructId.LessThan lessThan = new StructId.LessThan();
+      StructId.Logarithm logarithm = new StructId.Logarithm();
+      StructId.Multiplication multiplication = new StructId.Multiplication();
+      StructId.Not not = new StructId.Not();
+      StructId.Or or = new StructId.Or();
+      StructId.Power power = new StructId.Power();
+      StructId.Signum signum = new StructId.Signum();
+      StructId.Sinus sinus = new StructId.Sinus();
+      StructId.Sqrt sqrt = new StructId.Sqrt();
+      StructId.Subtraction subtraction = new StructId.Subtraction();
+      StructId.Tangens tangens = new StructId.Tangens();
+      StructId.Xor xor = new StructId.Xor();
+
+      IFunction[] booleanFunctions = new IFunction[] {
+        and,
+        equal,
+        greaterThan,
+        lessThan,
+        not,
+        or,
+        xor 
+      };
+      IFunction[] doubleFunctions = new IFunction[] {
+        variable,
+        constant,
+        addition,
+        average,
+        cosinus,
+        division,
+        exponential,
+        ifThenElse,
+        logarithm,
+        multiplication,
+        power,
+        signum,
+        sinus,
+        sqrt,
+        subtraction,
+        tangens
+      };
+
+      SetAllowedSubOperators(and, booleanFunctions);
+      SetAllowedSubOperators(equal, doubleFunctions);
+      SetAllowedSubOperators(greaterThan, doubleFunctions);
+      SetAllowedSubOperators(lessThan, doubleFunctions);
+      SetAllowedSubOperators(not, booleanFunctions);
+      SetAllowedSubOperators(or, booleanFunctions);
+      SetAllowedSubOperators(xor, booleanFunctions);
+      SetAllowedSubOperators(addition, doubleFunctions);
+      SetAllowedSubOperators(average, doubleFunctions);
+      SetAllowedSubOperators(cosinus, doubleFunctions);
+      SetAllowedSubOperators(division, doubleFunctions);
+      SetAllowedSubOperators(exponential, doubleFunctions);
+      SetAllowedSubOperators(ifThenElse, 0, booleanFunctions);
+      SetAllowedSubOperators(ifThenElse, 1, doubleFunctions);
+      SetAllowedSubOperators(ifThenElse, 2, doubleFunctions);
+      SetAllowedSubOperators(logarithm, doubleFunctions);
+      SetAllowedSubOperators(multiplication, doubleFunctions);
+      SetAllowedSubOperators(power, doubleFunctions);
+      SetAllowedSubOperators(signum, doubleFunctions);
+      SetAllowedSubOperators(sinus, doubleFunctions);
+      SetAllowedSubOperators(sqrt, doubleFunctions);
+      SetAllowedSubOperators(subtraction, doubleFunctions);
+      SetAllowedSubOperators(tangens, doubleFunctions);
+
+      operatorLibrary = new GPOperatorLibrary();
+      operatorLibrary.GPOperatorGroup.AddOperator(variable);
+      operatorLibrary.GPOperatorGroup.AddOperator(constant);
+      operatorLibrary.GPOperatorGroup.AddOperator(addition);
+      operatorLibrary.GPOperatorGroup.AddOperator(average);
+      operatorLibrary.GPOperatorGroup.AddOperator(and);
+      operatorLibrary.GPOperatorGroup.AddOperator(cosinus);
+      operatorLibrary.GPOperatorGroup.AddOperator(division);
+      operatorLibrary.GPOperatorGroup.AddOperator(equal);
+      operatorLibrary.GPOperatorGroup.AddOperator(exponential);
+      operatorLibrary.GPOperatorGroup.AddOperator(greaterThan);
+      operatorLibrary.GPOperatorGroup.AddOperator(ifThenElse);
+      operatorLibrary.GPOperatorGroup.AddOperator(lessThan);
+      operatorLibrary.GPOperatorGroup.AddOperator(logarithm);
+      operatorLibrary.GPOperatorGroup.AddOperator(multiplication);
+      operatorLibrary.GPOperatorGroup.AddOperator(not);
+      operatorLibrary.GPOperatorGroup.AddOperator(power);
+      operatorLibrary.GPOperatorGroup.AddOperator(or);
+      operatorLibrary.GPOperatorGroup.AddOperator(signum);
+      operatorLibrary.GPOperatorGroup.AddOperator(sinus);
+      operatorLibrary.GPOperatorGroup.AddOperator(sqrt);
+      operatorLibrary.GPOperatorGroup.AddOperator(subtraction);
+      operatorLibrary.GPOperatorGroup.AddOperator(tangens);
+      operatorLibrary.GPOperatorGroup.AddOperator(xor);
+    }
+
+    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
+      foreach(IConstraint c in f.Constraints) {
+        if(c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          typeConstraint.Clear();
+          foreach(IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        } else if(c is AllSubOperatorsTypeConstraint) {
+          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
+          typeConstraint.Clear();
+          foreach(IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        }
+      }
+    }
+
+    private void SetAllowedSubOperators(IFunction f, int p, IFunction[] gs) {
+      foreach(IConstraint c in f.Constraints) {
+        if(c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          if(typeConstraint.SubOperatorIndex.Data == p) {
+            typeConstraint.Clear();
+            foreach(IFunction g in gs) {
+              typeConstraint.AddOperator(g);
+            }
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/GPClassificationEvaluatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/GPClassificationEvaluatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/GPClassificationEvaluatorBase.cs	(revision 1270)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public abstract class GPClassificationEvaluatorBase : GPEvaluatorBase {
+
+    public GPClassificationEvaluatorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("TargetClassValues", "The original class values of target variable (for instance negative=0 and positive=1).", typeof(ItemList<DoubleData>), VariableKind.In));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+
+      ItemList<DoubleData> classes = GetVariableValue<ItemList<DoubleData>>("TargetClassValues", scope, true);
+      double[] classesArr = new double[classes.Count];
+      for(int i = 0; i < classesArr.Length; i++) classesArr[i] = classes[i].Data;
+      Array.Sort(classesArr);
+      double[] thresholds = new double[classes.Count - 1];
+      for(int i = 0; i < classesArr.Length - 1; i++) {
+        thresholds[i] = (classesArr[i] + classesArr[i + 1]) / 2.0;
+      }
+
+      Evaluate(scope, evaluator, dataset, targetVariable, classesArr, thresholds, start, end);
+    }
+
+    public abstract void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, double[] classes, double[] thresholds, int start, int end);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLab.GP.StructureIdentification.Classification.csproj	(revision 1270)
@@ -0,0 +1,135 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{7C20D100-8BEB-433A-9499-F075E2CB9297}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP.StructureIdentification.Classification</RootNamespace>
+    <AssemblyName>HeuristicLab.GP.StructureIdentification.Classification-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AccuracyEvaluator.cs" />
+    <Compile Include="ClassificationMeanSquaredErrorEvaluator.cs" />
+    <Compile Include="ConfusionMatrixEvaluator.cs" />
+    <Compile Include="DatasetShuffler.cs" />
+    <Compile Include="GPClassificationEvaluatorBase.cs" />
+    <Compile Include="CrossValidation.cs" />
+    <Compile Include="FunctionLibraryInjector.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLabGPClassificationPlugin.cs" />
+    <Compile Include="MulticlassModeller.cs" />
+    <Compile Include="MulticlassOneVsOneAnalyzer.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ROCAnalyzer.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification\HeuristicLab.GP.StructureIdentification.csproj">
+      <Project>{74223A32-C726-4978-BE78-37113A18373C}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
+      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
+      <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLabGPClassificationPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLabGPClassificationPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/HeuristicLabGPClassificationPlugin.cs	(revision 1270)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  [ClassInfo(Name = "HeuristicLab.GP.StructureIdentification.Classification-3.2")]
+  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.Classification-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  public class HeuristicLabGPClassificationPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/MulticlassModeller.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/MulticlassModeller.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/MulticlassModeller.cs	(revision 1270)
@@ -0,0 +1,150 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class MulticlassModeller : OperatorBase {
+
+    private const string DATASET = "Dataset";
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string TARGETCLASSVALUES = "TargetClassValues";
+    private const string TRAININGSAMPLESSTART = "TrainingSamplesStart";
+    private const string TRAININGSAMPLESEND = "TrainingSamplesEnd";
+    private const string VALIDATIONSAMPLESSTART = "ValidationSamplesStart";
+    private const string VALIDATIONSAMPLESEND = "ValidationSamplesEnd";
+    private const string CLASSAVALUE = "ClassAValue";
+    private const string CLASSBVALUE = "ClassBValue";
+    private const double EPSILON = 1E-6;
+    public override string Description {
+      get { return @"TASK"; }
+    }
+
+    public MulticlassModeller()
+      : base() {
+      AddVariableInfo(new VariableInfo(DATASET, "The original dataset and the new dataset parts in the newly created subscopes", typeof(Dataset), VariableKind.In));
+      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "TargetVariable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(TARGETCLASSVALUES, "Class values of the target variable in the original dataset and in the new dataset parts", typeof(ItemList<DoubleData>), VariableKind.In | VariableKind.New));
+      AddVariableInfo(new VariableInfo(CLASSAVALUE, "The original class value of the new class A", typeof(DoubleData), VariableKind.New));
+      AddVariableInfo(new VariableInfo(CLASSBVALUE, "The original class value of the new class B", typeof(DoubleData), VariableKind.New));
+      AddVariableInfo(new VariableInfo(TRAININGSAMPLESSTART, "The start of training samples in the original dataset and starts of training samples in the new dataset parts", typeof(IntData), VariableKind.In | VariableKind.New));
+      AddVariableInfo(new VariableInfo(TRAININGSAMPLESEND, "The end of training samples in the original dataset and ends of training samples in the new dataset parts", typeof(IntData), VariableKind.In | VariableKind.New));
+      AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESSTART, "The start of validation samples in the original dataset and starts of validation samples in the new dataset parts", typeof(IntData), VariableKind.In | VariableKind.New));
+      AddVariableInfo(new VariableInfo(VALIDATIONSAMPLESEND, "The end of validation samples in the original dataset and ends of validation samples in the new dataset parts", typeof(IntData), VariableKind.In | VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Dataset origDataset = GetVariableValue<Dataset>(DATASET, scope, true);
+      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
+      ItemList<DoubleData> classValues = GetVariableValue<ItemList<DoubleData>>(TARGETCLASSVALUES, scope, true);
+      int origTrainingSamplesStart = GetVariableValue<IntData>(TRAININGSAMPLESSTART, scope, true).Data;
+      int origTrainingSamplesEnd = GetVariableValue<IntData>(TRAININGSAMPLESEND, scope, true).Data;
+      int origValidationSamplesStart = GetVariableValue<IntData>(VALIDATIONSAMPLESSTART, scope, true).Data;
+      int origValidationSamplesEnd = GetVariableValue<IntData>(VALIDATIONSAMPLESEND, scope, true).Data;
+      ItemList<DoubleData> binaryClassValues = new ItemList<DoubleData>();
+      binaryClassValues.Add(new DoubleData(0.0));
+      binaryClassValues.Add(new DoubleData(1.0));
+      for (int i = 0; i < classValues.Count - 1; i++) {
+        for (int j = i + 1; j < classValues.Count; j++) {
+          Dataset dataset = new Dataset();
+          dataset.Columns = origDataset.Columns;
+          double classAValue = classValues[i].Data;
+          double classBValue = classValues[j].Data;
+          int trainingSamplesStart;
+          int trainingSamplesEnd;
+          int validationSamplesStart;
+          int validationSamplesEnd;
+
+          trainingSamplesStart = 0;
+          List<double[]> rows = new List<double[]>();
+          for (int k = origTrainingSamplesStart; k < origTrainingSamplesEnd; k++) {
+            double[] row = new double[dataset.Columns];
+            double targetValue = origDataset.GetValue(k, targetVariable);
+            if (IsEqual(targetValue, classAValue)) {
+              for (int l = 0; l < row.Length; l++) {
+                row[l] = origDataset.GetValue(k, l);
+              }
+              row[targetVariable] = 0;
+              rows.Add(row);
+            } else if (IsEqual(targetValue, classBValue)) {
+              for (int l = 0; l < row.Length; l++) {
+                row[l] = origDataset.GetValue(k, l);
+              }
+              row[targetVariable] = 1.0;
+              rows.Add(row);
+            }
+          }
+          trainingSamplesEnd = rows.Count;
+          validationSamplesStart = rows.Count;
+          for (int k = origValidationSamplesStart; k < origValidationSamplesEnd; k++) {
+            double[] row = new double[dataset.Columns];
+            double targetValue = origDataset.GetValue(k, targetVariable);
+            if (IsEqual(targetValue, classAValue)) {
+              for (int l = 0; l < row.Length; l++) {
+                row[l] = origDataset.GetValue(k, l);
+              }
+              row[targetVariable] = 0;
+              rows.Add(row);
+            } else if (IsEqual(targetValue, classBValue)) {
+              for (int l = 0; l < row.Length; l++) {
+                row[l] = origDataset.GetValue(k, l);
+              }
+              row[targetVariable] = 1.0;
+              rows.Add(row);
+            }
+          }
+          validationSamplesEnd = rows.Count;
+
+          dataset.Rows = rows.Count;
+          dataset.Samples = new double[dataset.Rows * dataset.Columns];
+          for (int k = 0; k < dataset.Rows; k++) {
+            for (int l = 0; l < dataset.Columns; l++) {
+              dataset.SetValue(k, l, rows[k][l]);
+            }
+          }
+
+          Scope childScope = new Scope(classAValue + " vs. " + classBValue);
+
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TARGETCLASSVALUES), binaryClassValues));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(CLASSAVALUE), new DoubleData(classAValue)));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(CLASSBVALUE), new DoubleData(classBValue)));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TRAININGSAMPLESSTART), new IntData(trainingSamplesStart)));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(TRAININGSAMPLESEND), new IntData(trainingSamplesEnd)));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(VALIDATIONSAMPLESSTART), new IntData(validationSamplesStart)));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(VALIDATIONSAMPLESEND), new IntData(validationSamplesEnd)));
+          childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(DATASET), dataset));
+          scope.AddSubScope(childScope);
+        }
+      }
+      return null;
+    }
+
+    private bool IsEqual(double x, double y) {
+      return Math.Abs(x - y) < EPSILON;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/MulticlassOneVsOneAnalyzer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/MulticlassOneVsOneAnalyzer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/MulticlassOneVsOneAnalyzer.cs	(revision 1270)
@@ -0,0 +1,128 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class MulticlassOneVsOneAnalyzer : OperatorBase {
+
+    private const string DATASET = "Dataset";
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string TARGETCLASSVALUES = "TargetClassValues";
+    private const string SAMPLESSTART = "SamplesStart";
+    private const string SAMPLESEND = "SamplesEnd";
+    private const string CLASSAVALUE = "ClassAValue";
+    private const string CLASSBVALUE = "ClassBValue";
+    private const string BESTMODELLSCOPE = "BestValidationSolution";
+    private const string BESTMODELL = "FunctionTree";
+    private const string VOTES = "Votes";
+    private const string ACCURACY = "Accuracy";
+
+    private const double EPSILON = 1E-6;
+    public override string Description {
+      get { return @"TASK"; }
+    }
+
+    public MulticlassOneVsOneAnalyzer()
+      : base() {
+      AddVariableInfo(new VariableInfo(DATASET, "The dataset to use", typeof(Dataset), VariableKind.In));
+      AddVariableInfo(new VariableInfo(TARGETVARIABLE, "Target variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(TARGETCLASSVALUES, "Class values of the target variable in the original dataset", typeof(ItemList<DoubleData>), VariableKind.In));
+      AddVariableInfo(new VariableInfo(CLASSAVALUE, "The original class value of the class A in the subscope", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(CLASSBVALUE, "The original class value of the class B in the subscope", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(SAMPLESSTART, "The start of samples in the original dataset", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(SAMPLESEND, "The end of samples in the original dataset", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo(BESTMODELLSCOPE, "The variable containing the scope of the model (incl. meta data)", typeof(IScope), VariableKind.In));
+      AddVariableInfo(new VariableInfo(BESTMODELL, "The variable in the scope of the model that contains the actual model", typeof(BakedFunctionTree), VariableKind.In));
+      AddVariableInfo(new VariableInfo(VOTES, "Array with the votes for each instance", typeof(IntMatrixData), VariableKind.New));
+      AddVariableInfo(new VariableInfo(ACCURACY, "Accuracy of the one-vs-one multi-cass classifier", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Dataset dataset = GetVariableValue<Dataset>(DATASET, scope, true);
+      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
+      int samplesStart = GetVariableValue<IntData>(SAMPLESSTART, scope, true).Data;
+      int samplesEnd = GetVariableValue<IntData>(SAMPLESEND, scope, true).Data;
+      ItemList<DoubleData> classValues = GetVariableValue<ItemList<DoubleData>>(TARGETCLASSVALUES, scope, true);
+      int[,] votes = new int[samplesEnd - samplesStart, classValues.Count];
+
+      foreach(IScope childScope in scope.SubScopes) {
+        double classAValue = GetVariableValue<DoubleData>(CLASSAVALUE, childScope, true).Data;
+        double classBValue = GetVariableValue<DoubleData>(CLASSBVALUE, childScope, true).Data;
+        IScope bestScope = GetVariableValue<IScope>(BESTMODELLSCOPE, childScope, true);
+        BakedFunctionTree functionTree = GetVariableValue<BakedFunctionTree>(BESTMODELL, bestScope, true);
+
+        BakedTreeEvaluator evaluator = new BakedTreeEvaluator();
+        evaluator.ResetEvaluator(functionTree, dataset, targetVariable, samplesStart, samplesEnd, 1.0);
+
+        for(int i = 0; i < (samplesEnd - samplesStart); i++) {
+          double est = evaluator.Evaluate(i + samplesStart);
+          if(est < 0.5) {
+            CastVote(votes, i, classAValue, classValues);
+          } else {
+            CastVote(votes, i, classBValue, classValues);
+          }
+        }
+      }
+
+      int correctlyClassified = 0;
+      for(int i = 0; i < (samplesEnd - samplesStart); i++) {
+        double originalClassValue = dataset.GetValue(i + samplesStart, targetVariable);
+        double estimatedClassValue = classValues[0].Data;
+        int maxVotes = votes[i, 0];
+        int sameVotes = 0;
+        for(int j = 1; j < classValues[j].Data; j++) {
+          if(votes[i, j] > maxVotes) {
+            maxVotes = votes[i, j];
+            estimatedClassValue = classValues[j].Data;
+            sameVotes = 0;
+          } else if(votes[i, j] == maxVotes) {
+            sameVotes++;
+          }
+        }
+        if(IsEqual(originalClassValue, estimatedClassValue) && sameVotes == 0) correctlyClassified++;
+      }
+
+      double accuracy = correctlyClassified / (double)(samplesEnd - samplesStart);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(VOTES), new IntMatrixData(votes)));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(ACCURACY), new DoubleData(accuracy)));
+      return null;
+    }
+
+    private void CastVote(int[,] votes, int sample, double votedClass, ItemList<DoubleData> classValues) {
+      for(int i = 0; i < classValues.Count; i++) {
+        if(IsEqual(classValues[i].Data, votedClass)) votes[sample, i]++;
+      }
+    }
+
+    private bool IsEqual(double x, double y) {
+      return Math.Abs(x - y) < EPSILON;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.GP.StructureIdentification.Classification")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("863021a4-3cde-48be-8af6-dac1077f5fb5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ROCAnalyzer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ROCAnalyzer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.Classification/ROCAnalyzer.cs	(revision 1270)
@@ -0,0 +1,245 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.DataAnalysis;
+
+
+namespace HeuristicLab.GP.StructureIdentification.Classification {
+  public class ROCAnalyzer : OperatorBase {
+    private ItemList myRocValues;
+    private ItemList<DoubleData> myAucValues;
+
+
+    public override string Description {
+      get { return @"Calculate TPR & FPR for various thresholds on dataset"; }
+    }
+
+    public ROCAnalyzer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Values", "Item list holding the estimated and original values for the ROCAnalyzer", typeof(ItemList), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ROCValues", "The values of the ROCAnalyzer, namely TPR & FPR", typeof(ItemList), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("AUCValues", "The AUC Values for each ROC", typeof(ItemList<DoubleData>), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      #region initialize HL-variables
+      ItemList values = GetVariableValue<ItemList>("Values", scope, true);
+      myRocValues = GetVariableValue<ItemList>("ROCValues", scope, false, false);
+      if (myRocValues == null) {
+        myRocValues = new ItemList();
+        IVariableInfo info = GetVariableInfo("ROCValues");
+        if (info.Local)
+          AddVariable(new HeuristicLab.Core.Variable(info.ActualName, myRocValues));
+        else
+          scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(info.FormalName), myRocValues));
+      } else {
+        myRocValues.Clear();
+      }
+
+      myAucValues = GetVariableValue<ItemList<DoubleData>>("AUCValues", scope, false, false);
+      if (myAucValues == null) {
+        myAucValues = new ItemList<DoubleData>();
+        IVariableInfo info = GetVariableInfo("AUCValues");
+        if (info.Local)
+          AddVariable(new HeuristicLab.Core.Variable(info.ActualName, myAucValues));
+        else
+          scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(info.FormalName), myAucValues));
+      } else {
+        myAucValues.Clear();
+      }
+      #endregion
+
+      //calculate new ROC Values
+      double estimated = 0.0;
+      double original = 0.0;
+
+      //initialize classes dictionary
+      SortedDictionary<double, List<double>> classes = new SortedDictionary<double, List<double>>();
+      foreach (ItemList value in values) {
+        estimated = ((DoubleData)value[0]).Data;
+        original = ((DoubleData)value[1]).Data;
+        if (!classes.ContainsKey(original))
+          classes[original] = new List<double>();
+        classes[original].Add(estimated);
+      }
+      foreach (double key in classes.Keys)
+        classes[key].Sort();
+  
+      //calculate ROC Curve
+      foreach (double key in classes.Keys) {
+        CalculateBestROC(key, classes);
+      }
+
+      return null;
+    }
+
+    protected void CalculateBestROC(double positiveClassKey, SortedDictionary<double, List<double>> classes) {
+      List<KeyValuePair<double, double>> rocCharacteristics;
+      List<KeyValuePair<double, double>> bestROC;
+      List<KeyValuePair<double, double>> actROC;
+
+      List<double> negatives = new List<double>();
+      foreach (double key in classes.Keys) {
+        if (key != positiveClassKey)
+          negatives.AddRange(classes[key]);
+      }
+      List<double> actNegatives = negatives.Where<double>(value => value < classes[positiveClassKey].Max<double>()).ToList<double>();
+      actNegatives.Add(classes[positiveClassKey].Max<double>());
+      actNegatives.Sort();
+      actNegatives = actNegatives.Reverse<double>().ToList<double>();
+
+      double bestAUC = double.MinValue;
+      double actAUC = 0;
+      //first class
+      if (classes.Keys.ElementAt<double>(0) == positiveClassKey) {
+        rocCharacteristics = null;
+        CalculateROCValuesAndAUC(classes[positiveClassKey], actNegatives, negatives.Count, double.MinValue, ref rocCharacteristics, out  actROC, out actAUC);
+        myAucValues.Add(new DoubleData(actAUC));
+        myRocValues.Add(Convert(actROC));
+      }
+        //middle classes  
+      else if (classes.Keys.ElementAt<double>(classes.Keys.Count - 1) != positiveClassKey) {
+        rocCharacteristics = null;
+        bestROC = new List<KeyValuePair<double, double>>();
+        foreach (double minThreshold in classes[positiveClassKey].Distinct<double>()) {
+          CalculateROCValuesAndAUC(classes[positiveClassKey], actNegatives, negatives.Count, minThreshold, ref rocCharacteristics, out  actROC, out actAUC);
+          if (actAUC > bestAUC) {
+            bestAUC = actAUC;
+            bestROC = actROC;
+          }
+        }
+          myAucValues.Add(new DoubleData(bestAUC));
+          myRocValues.Add(Convert(bestROC));
+        
+      } else { //last class
+        actNegatives = negatives.Where<double>(value => value > classes[positiveClassKey].Min<double>()).ToList<double>();
+        actNegatives.Add(classes[positiveClassKey].Min<double>());
+        actNegatives.Sort();
+        CalculateROCValuesAndAUCForLastClass(classes[positiveClassKey], actNegatives, negatives.Count, out bestROC, out bestAUC);
+        myAucValues.Add(new DoubleData(bestAUC));
+        myRocValues.Add(Convert(bestROC));
+
+      }
+
+    }
+
+    protected void CalculateROCValuesAndAUC(List<double> positives, List<double> negatives, int negativesCount, double minThreshold,
+      ref List<KeyValuePair<double, double>> rocCharacteristics, out List<KeyValuePair<double, double>> roc, out double auc) {
+      double actTP = -1;
+      double actFP = -1;
+      double oldTP = -1;
+      double oldFP = -1;
+      auc = 0;
+      roc = new List<KeyValuePair<double, double>>();
+
+      actTP = positives.Count<double>(value => minThreshold <= value && value <= negatives.Max<double>());
+      actFP = negatives.Count<double>(value => minThreshold <= value );
+      //add point (1,TPR) for AUC 'correct' calculation
+      roc.Add(new KeyValuePair<double, double>(1, actTP / positives.Count));
+      oldTP = actTP;
+      oldFP = negativesCount;
+      roc.Add(new KeyValuePair<double, double>(actFP / negativesCount, actTP / positives.Count));
+
+      if (rocCharacteristics == null) {
+        rocCharacteristics = new List<KeyValuePair<double, double>>();
+        foreach (double maxThreshold in negatives.Distinct<double>()) {
+          auc += ((oldTP + actTP) / positives.Count) * ((oldFP - actFP) / negativesCount) / 2;
+          oldTP = actTP;
+          oldFP = actFP;
+          actTP = positives.Count<double>(value => minThreshold <= value && value < maxThreshold);
+          actFP = negatives.Count<double>(value => minThreshold <= value && value < maxThreshold);
+          rocCharacteristics.Add(new KeyValuePair<double, double>(oldTP - actTP, oldFP - actFP));
+          roc.Add(new KeyValuePair<double, double>(actFP / negativesCount, actTP / positives.Count));
+
+          //stop calculation if truePositiveRate == 0 => straight line with y=0 & save runtime
+          if ((actTP == 0) || (actFP == 0))
+            break;
+        }
+        auc += ((oldTP + actTP) / positives.Count) * ((oldFP - actFP) / negativesCount) / 2;
+      } else { //characteristics of ROCs calculated 
+        foreach (KeyValuePair<double, double> rocCharac in rocCharacteristics) {
+          auc += ((oldTP + actTP) / positives.Count) * ((oldFP - actFP) / negativesCount) / 2;
+          oldTP = actTP;
+          oldFP = actFP;
+          actTP = oldTP - rocCharac.Key;
+          actFP = oldFP - rocCharac.Value;
+          roc.Add(new KeyValuePair<double, double>(actFP / negativesCount, actTP / positives.Count));
+          if ((actTP == 0) || (actFP == 0))
+            break;
+        }
+        auc += ((oldTP + actTP) / positives.Count) * ((oldFP - actFP) / negativesCount) / 2;
+      }
+    }
+
+    protected void CalculateROCValuesAndAUCForLastClass(List<double> positives, List<double> negatives, int negativesCount,
+      out List<KeyValuePair<double, double>> roc, out double auc) {
+      double actTP = -1;
+      double actFP = -1;
+      double oldTP = -1;
+      double oldFP = -1;
+      auc = 0;
+      roc = new List<KeyValuePair<double, double>>();
+
+      actTP = positives.Count<double>(value => value >= negatives.Min<double>());
+      actFP = negatives.Count<double>(value => value >= negatives.Min<double>());
+      //add point (1,TPR) for AUC 'correct' calculation
+      roc.Add(new KeyValuePair<double, double>(1, actTP / positives.Count));
+      oldTP = actTP;
+      oldFP = negativesCount;
+      roc.Add(new KeyValuePair<double, double>(actFP / negativesCount, actTP / positives.Count));
+
+      foreach (double minThreshold in negatives.Distinct<double>()) {
+        auc += ((oldTP + actTP) / positives.Count) * ((oldFP - actFP) / negativesCount) / 2;
+        oldTP = actTP;
+        oldFP = actFP;
+        actTP = positives.Count<double>(value => minThreshold < value);
+        actFP = negatives.Count<double>(value => minThreshold < value);
+        roc.Add(new KeyValuePair<double, double>(actFP / negativesCount, actTP / positives.Count));
+
+        //stop calculation if truePositiveRate == 0 => straight line with y=0 & save runtime
+        if (actTP == 0 || actFP==0)
+          break;
+      }
+      auc += ((oldTP + actTP) / positives.Count) * ((oldFP - actFP) / negativesCount) / 2;
+
+    }
+
+    private ItemList Convert(List<KeyValuePair<double, double>> data) {
+      ItemList list = new ItemList();
+      ItemList row;
+      foreach (KeyValuePair<double, double> dataPoint in data) {
+        row = new ItemList();
+        row.Add(new DoubleData(dataPoint.Key));
+        row.Add(new DoubleData(dataPoint.Value));
+        list.Add(row);
+      }
+      return list;
+    }
+
+  }
+
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/AveragePercentageChangeEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/AveragePercentageChangeEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/AveragePercentageChangeEvaluator.cs	(revision 1270)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class AvergePercentageChangeEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"TASK";
+      }
+    }
+
+    public AvergePercentageChangeEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Differential", "Wether to transform the target variable to percentage change first or not.", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("APC", "The average percentage change of the model", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      bool differential = GetVariableValue<BoolData>("Differential", scope, true).Data;
+      DoubleData apc = GetVariableValue<DoubleData>("APC", scope, false, false);
+      if (apc == null) {
+        apc = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("APC"), apc));
+      }
+
+      double percentageSum = 0;
+      for (int sample = start; sample < end; sample++) {
+        double prevOriginal;
+        double originalPercentageChange;
+        double estimatedPercentageChange;
+        if (differential) {
+          prevOriginal = dataset.GetValue(sample - 1, targetVariable);
+          originalPercentageChange = (dataset.GetValue(sample, targetVariable) - prevOriginal) / prevOriginal;
+          estimatedPercentageChange = (evaluator.Evaluate(sample) - prevOriginal) / prevOriginal;
+          if (updateTargetValues) {
+            dataset.SetValue(sample, targetVariable, estimatedPercentageChange * prevOriginal + prevOriginal);
+          }
+        } else {
+          originalPercentageChange = dataset.GetValue(sample, targetVariable);
+          estimatedPercentageChange = evaluator.Evaluate(sample);
+          if (updateTargetValues) {
+            dataset.SetValue(sample, targetVariable, estimatedPercentageChange);
+          }
+        }
+        if (!double.IsNaN(originalPercentageChange) && !double.IsInfinity(originalPercentageChange)) {
+          if ((estimatedPercentageChange > 0 && originalPercentageChange > 0) ||
+            (estimatedPercentageChange < 0 && originalPercentageChange < 0)) {
+            percentageSum += Math.Abs(originalPercentageChange);
+          } else if ((estimatedPercentageChange > 0 && originalPercentageChange < 0) ||
+            (estimatedPercentageChange < 0 && originalPercentageChange > 0)) {
+            percentageSum -= Math.Abs(originalPercentageChange);
+          }
+        }
+      }
+
+      percentageSum /= (end - start);
+      if (double.IsNaN(percentageSum) || double.IsInfinity(percentageSum)) {
+        percentageSum = double.MinValue;
+      }
+      apc.Data = percentageSum;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/FunctionLibraryInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/FunctionLibraryInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/FunctionLibraryInjector.cs	(revision 1270)
@@ -0,0 +1,221 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class FunctionLibraryInjector : Core.OperatorBase {
+    private const string TARGETVARIABLE = "TargetVariable";
+    private const string AUTOREGRESSIVE = "Autoregressive";
+    private const string ALLOWEDFEATURES = "AllowedFeatures";
+    private const string MINTIMEOFFSET = "MinTimeOffset";
+    private const string MAXTIMEOFFSET = "MaxTimeOffset";
+    private const string FUNCTIONLIBRARY = "FunctionLibrary";
+
+    private Variable variable;
+    private Differential differential;
+    private GPOperatorLibrary operatorLibrary;
+
+    public override string Description {
+      get { return @"Injects a default function library for time series modeling."; }
+    }
+
+    public FunctionLibraryInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo(TARGETVARIABLE, "The target variable", typeof(IntData), Core.VariableKind.In));
+      AddVariableInfo(new Core.VariableInfo(AUTOREGRESSIVE, "Switch to turn on/off autoregressive modeling (wether to allow the target variable as input)", typeof(BoolData), Core.VariableKind.In));
+      AddVariableInfo(new Core.VariableInfo(ALLOWEDFEATURES, "List of indexes of allowed features", typeof(ItemList<IntData>), Core.VariableKind.In));
+      AddVariableInfo(new Core.VariableInfo(MINTIMEOFFSET, "Minimal time offset for all features", typeof(IntData), Core.VariableKind.In));
+      AddVariableInfo(new Core.VariableInfo(MAXTIMEOFFSET, "Maximal time offset for all feature", typeof(IntData), Core.VariableKind.In));
+      AddVariableInfo(new Core.VariableInfo(FUNCTIONLIBRARY, "Preconfigured default operator library", typeof(GPOperatorLibrary), Core.VariableKind.New));
+    }
+
+    public override Core.IOperation Apply(Core.IScope scope) {
+      IntData minTimeOffset = GetVariableValue<IntData>(MINTIMEOFFSET, scope, true);
+      IntData maxTimeOffset = GetVariableValue<IntData>(MAXTIMEOFFSET, scope, true);
+      ItemList<IntData> allowedFeatures = GetVariableValue<ItemList<IntData>>(ALLOWEDFEATURES, scope, true);
+      int targetVariable = GetVariableValue<IntData>(TARGETVARIABLE, scope, true).Data;
+      bool autoregressive = GetVariableValue<BoolData>(AUTOREGRESSIVE, scope, true).Data;
+
+      if(autoregressive) {
+        // make sure the target-variable occures in list of allowed features
+        if(!allowedFeatures.Exists(d => d.Data == targetVariable)) allowedFeatures.Add(new IntData(targetVariable));
+      } else {
+        // remove the target-variable in case it occures in allowed features
+        List<IntData> ts = allowedFeatures.FindAll(d => d.Data == targetVariable);
+        foreach(IntData t in ts) allowedFeatures.Remove(t);
+      }
+
+      InitDefaultOperatorLibrary();
+
+      int[] allowedIndexes = new int[allowedFeatures.Count];
+      for(int i = 0; i < allowedIndexes.Length; i++) {
+        allowedIndexes[i] = allowedFeatures[i].Data;
+      }
+
+      variable.SetConstraints(allowedIndexes, minTimeOffset.Data, maxTimeOffset.Data);
+      differential.SetConstraints(allowedIndexes, minTimeOffset.Data, maxTimeOffset.Data);
+
+      scope.AddVariable(new Core.Variable(scope.TranslateName(FUNCTIONLIBRARY), operatorLibrary));
+      return null;
+    }
+
+    private void InitDefaultOperatorLibrary() {
+      variable = new Variable();
+      differential = new Differential();
+      Constant constant = new Constant();
+
+      Addition addition = new Addition();
+      And and = new And();
+      Average average = new Average();
+      Cosinus cosinus = new Cosinus();
+      Division division = new Division();
+      Equal equal = new Equal();
+      Exponential exponential = new Exponential();
+      GreaterThan greaterThan = new GreaterThan();
+      IfThenElse ifThenElse = new IfThenElse();
+      LessThan lessThan = new LessThan();
+      Logarithm logarithm = new Logarithm();
+      Multiplication multiplication = new Multiplication();
+      Not not = new Not();
+      Or or = new Or();
+      Power power = new Power();
+      Signum signum = new Signum();
+      Sinus sinus = new Sinus();
+      Sqrt sqrt = new Sqrt();
+      Subtraction subtraction = new Subtraction();
+      Tangens tangens = new Tangens();
+      Xor xor = new Xor();
+
+      IFunction[] booleanFunctions = new IFunction[] {
+        and,
+        equal,
+        greaterThan,
+        lessThan,
+        not,
+        or,
+        xor };
+      IFunction[] doubleFunctions = new IFunction[] {
+        variable,
+        differential,
+        constant,
+        addition,
+        average,
+        cosinus,
+        division,
+        exponential,
+        ifThenElse,
+        logarithm,
+        multiplication,
+        power,
+        signum,
+        sinus,
+        sqrt,
+        subtraction,
+        tangens};
+
+      SetAllowedSubOperators(and, booleanFunctions);
+      SetAllowedSubOperators(equal, doubleFunctions);
+      SetAllowedSubOperators(greaterThan, doubleFunctions);
+      SetAllowedSubOperators(lessThan, doubleFunctions);
+      SetAllowedSubOperators(not, booleanFunctions);
+      SetAllowedSubOperators(or, booleanFunctions);
+      SetAllowedSubOperators(xor, booleanFunctions);
+      SetAllowedSubOperators(addition, doubleFunctions);
+      SetAllowedSubOperators(average, doubleFunctions);
+      SetAllowedSubOperators(cosinus, doubleFunctions);
+      SetAllowedSubOperators(division, doubleFunctions);
+      SetAllowedSubOperators(exponential, doubleFunctions);
+      SetAllowedSubOperators(ifThenElse, 0, booleanFunctions);
+      SetAllowedSubOperators(ifThenElse, 1, doubleFunctions);
+      SetAllowedSubOperators(ifThenElse, 2, doubleFunctions);
+      SetAllowedSubOperators(logarithm, doubleFunctions);
+      SetAllowedSubOperators(multiplication, doubleFunctions);
+      SetAllowedSubOperators(power, doubleFunctions);
+      SetAllowedSubOperators(signum, doubleFunctions);
+      SetAllowedSubOperators(sinus, doubleFunctions);
+      SetAllowedSubOperators(sqrt, doubleFunctions);
+      SetAllowedSubOperators(subtraction, doubleFunctions);
+      SetAllowedSubOperators(tangens, doubleFunctions);
+
+      operatorLibrary = new GPOperatorLibrary();
+      operatorLibrary.GPOperatorGroup.AddOperator(variable);
+      operatorLibrary.GPOperatorGroup.AddOperator(differential);
+      operatorLibrary.GPOperatorGroup.AddOperator(constant);
+      operatorLibrary.GPOperatorGroup.AddOperator(addition);
+      operatorLibrary.GPOperatorGroup.AddOperator(average);
+      operatorLibrary.GPOperatorGroup.AddOperator(and);
+      operatorLibrary.GPOperatorGroup.AddOperator(cosinus);
+      operatorLibrary.GPOperatorGroup.AddOperator(division);
+      operatorLibrary.GPOperatorGroup.AddOperator(equal);
+      operatorLibrary.GPOperatorGroup.AddOperator(exponential);
+      operatorLibrary.GPOperatorGroup.AddOperator(greaterThan);
+      operatorLibrary.GPOperatorGroup.AddOperator(ifThenElse);
+      operatorLibrary.GPOperatorGroup.AddOperator(lessThan);
+      operatorLibrary.GPOperatorGroup.AddOperator(logarithm);
+      operatorLibrary.GPOperatorGroup.AddOperator(multiplication);
+      operatorLibrary.GPOperatorGroup.AddOperator(not);
+      operatorLibrary.GPOperatorGroup.AddOperator(power);
+      operatorLibrary.GPOperatorGroup.AddOperator(or);
+      operatorLibrary.GPOperatorGroup.AddOperator(signum);
+      operatorLibrary.GPOperatorGroup.AddOperator(sinus);
+      operatorLibrary.GPOperatorGroup.AddOperator(sqrt);
+      operatorLibrary.GPOperatorGroup.AddOperator(subtraction);
+      operatorLibrary.GPOperatorGroup.AddOperator(tangens);
+      operatorLibrary.GPOperatorGroup.AddOperator(xor);
+    }
+
+    private void SetAllowedSubOperators(IFunction f, IFunction[] gs) {
+      foreach(Core.IConstraint c in f.Constraints) {
+        if(c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          typeConstraint.Clear();
+          foreach(IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        } else if(c is AllSubOperatorsTypeConstraint) {
+          AllSubOperatorsTypeConstraint typeConstraint = c as AllSubOperatorsTypeConstraint;
+          typeConstraint.Clear();
+          foreach(IFunction g in gs) {
+            typeConstraint.AddOperator(g);
+          }
+        }
+      }
+    }
+
+    private void SetAllowedSubOperators(IFunction f, int p, IFunction[] gs) {
+      foreach(Core.IConstraint c in f.Constraints) {
+        if(c is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint typeConstraint = c as SubOperatorTypeConstraint;
+          if(typeConstraint.SubOperatorIndex.Data == p) {
+            typeConstraint.Clear();
+            foreach(IFunction g in gs) {
+              typeConstraint.AddOperator(g);
+            }
+          }
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLab.GP.StructureIdentification.TimeSeries.csproj	(revision 1270)
@@ -0,0 +1,125 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6084CFB5-733F-449D-9F92-2E40D13F0514}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP.StructureIdentification.TimeSeries</RootNamespace>
+    <AssemblyName>HeuristicLab.GP.StructureIdentification.TimeSeries-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AveragePercentageChangeEvaluator.cs" />
+    <Compile Include="FunctionLibraryInjector.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="HeuristicLabGPTimeSeriesPlugin.cs" />
+    <Compile Include="ProfitEvaluator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="TheilInequalityCoefficientEvaluator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP.StructureIdentification\HeuristicLab.GP.StructureIdentification.csproj">
+      <Project>{74223A32-C726-4978-BE78-37113A18373C}</Project>
+      <Name>HeuristicLab.GP.StructureIdentification</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
+      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
+      <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLabGPTimeSeriesPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLabGPTimeSeriesPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/HeuristicLabGPTimeSeriesPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  [ClassInfo(Name = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.2")]
+  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification.TimeSeries-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP.StructureIdentification-3.2")]
+  public class HeuristicLabGPTimeSeriesPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/ProfitEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/ProfitEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/ProfitEvaluator.cs	(revision 1270)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class ProfitEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"TASK";
+      }
+    }
+
+    public ProfitEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("ExchangeRate", "The index of the variable in the dataset for the exchange rate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Profit", "The estimated profit of the model", typeof(DoubleData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("TransactionCost", "Cost of a trade in percent of the transaction volume (0..1)", typeof(DoubleData), VariableKind.In));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      int exchangeRateVarIndex = GetVariableValue<IntData>("ExchangeRate", scope, true).Data;
+      double transactionCost = GetVariableValue<DoubleData>("TransactionCost", scope, true).Data;
+      DoubleData profit = GetVariableValue<DoubleData>("Profit", scope, false, false);
+      if (profit == null) {
+        profit = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Profit"), profit));
+      }
+
+      double cA = 1.0; // start with a capital of one entity of A
+      double cB = 0;
+      double exchangeRate = double.MaxValue;
+      for (int sample = start; sample < end; sample++) {
+        exchangeRate = dataset.GetValue(sample, exchangeRateVarIndex);
+        double originalPercentageChange = dataset.GetValue(sample, targetVariable);
+        double estimatedPercentageChange = evaluator.Evaluate(sample);
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimatedPercentageChange);
+        }
+        if (!double.IsNaN(originalPercentageChange) && !double.IsInfinity(originalPercentageChange)) {
+          if (estimatedPercentageChange > 0) {
+            // prediction is the rate of B/A will increase (= get more B for one A) => exchange all B to A
+            cA += (cB / exchangeRate) * (1 - transactionCost);
+            cB = 0;
+          } else if (estimatedPercentageChange < 0) {
+            // prediction is the rate of B/A will drop (= get more A for one B) => exchange all A to B
+            cB += (cA * exchangeRate) * (1 - transactionCost);
+            cA = 0;
+          }
+        }
+      }
+
+      if (double.IsNaN(cA) || double.IsInfinity(cA) || double.IsInfinity(cB) || double.IsNaN(cB)) {
+        cA = 0;
+        cB = 0;
+      }
+      // at the end we must exchange all B back to A 
+      // (because we want to buy the local beer not import one from B-country)
+      profit.Data = cA + ((cB / exchangeRate) * (1 - transactionCost));
+      profit.Data -= 1.0; // substract the start capital to determine actual profit
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.GP.StructureIdentification.TimeSeries")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("863021a4-3cde-48be-8af6-dac1077f5fb5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/TheilInequalityCoefficientEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/TheilInequalityCoefficientEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification.TimeSeries/TheilInequalityCoefficientEvaluator.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.GP.StructureIdentification;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification.TimeSeries {
+  public class TheilInequalityCoefficientEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates
+the 'Theil inequality coefficient (Theil's U2 not U1!)' of estimated values vs. real values of 'TargetVariable'.
+
+U2 = Sqrt(1/N * Sum(P_t - A_t)^2 ) / Sqrt(1/N * Sum(A_t)^2 ) 
+
+where P_t is the predicted change of the target variable and A_t is the measured (original) change.
+(P_t = y'_t - y_(t-1), A_t = y_t - y_(t-1)).
+
+U2 is 0 for a perfect prediction and 1 for the naive model y'_t = y_(t-1). An U2 > 1 means the
+model is worse than the naive model (=> model is useless).";
+      }
+    }
+
+    public TheilInequalityCoefficientEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("TheilInequalityCoefficient", "Theil's inequality coefficient (U2) of the model", typeof(DoubleData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("TheilInequalityCoefficientBias", "Bias proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("TheilInequalityCoefficientVariance", "Variance proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("TheilInequalityCoefficientCovariance", "Covariance proportion of Theil's inequality coefficient", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      #region create result variables
+      DoubleData theilInequaliy = GetVariableValue<DoubleData>("TheilInequalityCoefficient", scope, false, false);
+      if (theilInequaliy == null) {
+        theilInequaliy = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficient"), theilInequaliy));
+      }
+      DoubleData uBias = GetVariableValue<DoubleData>("TheilInequalityCoefficientBias", scope, false, false);
+      if (uBias == null) {
+        uBias = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientBias"), uBias));
+      }
+      DoubleData uVariance = GetVariableValue<DoubleData>("TheilInequalityCoefficientVariance", scope, false, false);
+      if (uVariance == null) {
+        uVariance = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientVariance"), uVariance));
+      }
+      DoubleData uCovariance = GetVariableValue<DoubleData>("TheilInequalityCoefficientCovariance", scope, false, false);
+      if (uCovariance == null) {
+        uCovariance = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TheilInequalityCoefficientCovariance"), uCovariance));
+      }
+      #endregion
+
+      double errorsSquaredSum = 0.0;
+      double originalSquaredSum = 0.0;
+      double[] estimatedChanges = new double[end - start];
+      double[] originalChanges = new double[end - start];
+      int nSamples = 0;
+      for (int sample = start; sample < end; sample++) {
+        double prevValue = dataset.GetValue(sample - 1, targetVariable);
+        double estimatedChange = evaluator.Evaluate(sample) - prevValue;
+        double originalChange = dataset.GetValue(sample, targetVariable) - prevValue;
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimatedChange + prevValue);
+        }
+        if (!double.IsNaN(originalChange) && !double.IsInfinity(originalChange)) {
+          double error = estimatedChange - originalChange;
+          errorsSquaredSum += error * error;
+          originalSquaredSum += originalChange * originalChange;
+          estimatedChanges[sample - start] = estimatedChange;
+          originalChanges[sample - start] = originalChange;
+          nSamples++;
+        }
+      }
+      double quality = Math.Sqrt(errorsSquaredSum / nSamples) / Math.Sqrt(originalSquaredSum / nSamples);
+      if (double.IsNaN(quality) || double.IsInfinity(quality))
+        quality = double.MaxValue;
+      theilInequaliy.Data = quality; // U2
+
+      // decomposition into U_bias + U_variance + U_covariance parts
+      double bias = Statistics.Mean(estimatedChanges) - Statistics.Mean(originalChanges);
+      bias *= bias; // squared
+      uBias.Data = bias / (errorsSquaredSum / nSamples);
+
+      double variance = Statistics.StandardDeviation(estimatedChanges) - Statistics.StandardDeviation(originalChanges);
+      variance *= variance; // squared
+      uVariance.Data = variance / (errorsSquaredSum / nSamples);
+
+      // all parts add up to one so I don't have to calculate the correlation coefficient for the covariance proportion
+      uCovariance.Data = 1.0 - uBias.Data - uVariance.Data;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Addition.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Addition.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Addition.cs	(revision 1270)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using System.Linq;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Addition : FunctionBase {
+    public override string Description {
+      get {
+        return @"Returns the sum of all sub-tree results.
+    (+ 3) => 3
+    (+ 2 3) => 5
+    (+ 3 4 5) => 12";
+      }
+    }
+
+    public Addition()
+      : base() {
+      // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/And.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/And.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/And.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class And : FunctionBase {
+    public override string Description {
+      get {
+        return @"Logical AND operation. Only defined for sub-tree-results 0.0 and 1.0.
+AND is a special form, sub-trees are evaluated from the first to the last. Evaluation is 
+stopped as soon as one of the sub-trees evaluates to 0.0 (false).";
+      }
+    }
+
+    public And()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Average.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Average.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Average.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Average : FunctionBase {
+    public override string Description {
+      get {
+        return @"Returns the average (arithmetic mean) of all sub-tree results.";
+      }
+    }
+
+    public Average()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/BakedTreeEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/BakedTreeEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/BakedTreeEvaluator.cs	(revision 1270)
@@ -0,0 +1,314 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Diagnostics;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  /// <summary>
+  /// Evaluates FunctionTrees recursively by interpretation of the function symbols in each node.
+  /// Not thread-safe!
+  /// </summary>
+  public class BakedTreeEvaluator {
+    private const double EPSILON = 1.0e-7;
+    private double estimatedValueMax;
+    private double estimatedValueMin;
+
+    private class Instr {
+      public double d_arg0;
+      public short i_arg0;
+      public short i_arg1;
+      public byte arity;
+      public byte symbol;
+      public ushort exprLength;
+      public IFunction function;
+    }
+
+    private Instr[] codeArr;
+    private int PC;
+    private Dataset dataset;
+    private int sampleIndex;
+
+    public void ResetEvaluator(BakedFunctionTree functionTree, Dataset dataset, int targetVariable, int start, int end, double punishmentFactor) {
+      this.dataset = dataset;
+      double maximumPunishment = punishmentFactor * dataset.GetRange(targetVariable);
+
+      // get the mean of the values of the target variable to determine the max and min bounds of the estimated value
+      double targetMean = dataset.GetMean(targetVariable, start, end - 1);
+      estimatedValueMin = targetMean - maximumPunishment;
+      estimatedValueMax = targetMean + maximumPunishment;
+
+      List<LightWeightFunction> linearRepresentation = functionTree.LinearRepresentation;
+      codeArr = new Instr[linearRepresentation.Count];
+      int i = 0;
+      foreach (LightWeightFunction f in linearRepresentation) {
+        codeArr[i++] = TranslateToInstr(f);
+      }
+      exprIndex = 0;
+      ushort exprLength;
+      bool constExpr;
+      PatchExpressionLengthsAndConstants(0, out constExpr, out exprLength);
+    }
+
+    ushort exprIndex;
+    private void PatchExpressionLengthsAndConstants(ushort index, out bool constExpr, out ushort exprLength) {
+      exprLength = 1;
+      if (codeArr[index].arity == 0) {
+        // when no children then it's a constant expression only if the terminal is a constant
+        constExpr = codeArr[index].symbol == EvaluatorSymbolTable.CONSTANT;
+      } else {
+        constExpr = true; // when there are children it's a constant expression if all children are constant;
+      }
+      for (int i = 0; i < codeArr[index].arity; i++) {
+        exprIndex++;
+        ushort branchLength;
+        bool branchConstExpr;
+        PatchExpressionLengthsAndConstants(exprIndex, out branchConstExpr, out branchLength);
+        exprLength += branchLength;
+        constExpr &= branchConstExpr;
+      }
+
+      if (constExpr) {
+        PC = index;
+        codeArr[index].d_arg0 = EvaluateBakedCode();
+        codeArr[index].symbol = EvaluatorSymbolTable.CONSTANT;
+      }
+      codeArr[index].exprLength = exprLength;
+    }
+
+    private Instr TranslateToInstr(LightWeightFunction f) {
+      Instr instr = new Instr();
+      instr.arity = f.arity;
+      instr.symbol = EvaluatorSymbolTable.MapFunction(f.functionType);
+      switch (instr.symbol) {
+        case EvaluatorSymbolTable.DIFFERENTIAL:
+        case EvaluatorSymbolTable.VARIABLE: {
+            instr.i_arg0 = (short)f.data[0]; // var
+            instr.d_arg0 = f.data[1]; // weight
+            instr.i_arg1 = (short)f.data[2]; // sample-offset
+            instr.exprLength = 1;
+            break;
+          }
+        case EvaluatorSymbolTable.CONSTANT: {
+            instr.d_arg0 = f.data[0]; // value
+            instr.exprLength = 1;
+            break;
+          }
+        case EvaluatorSymbolTable.UNKNOWN: {
+            instr.function = f.functionType;
+            instr.exprLength = 1;
+            break;
+          }
+      }
+      return instr;
+    }
+
+    public double Evaluate(int sampleIndex) {
+      PC = 0;
+      this.sampleIndex = sampleIndex;
+
+      double estimated = EvaluateBakedCode();
+      if (double.IsNaN(estimated) || double.IsInfinity(estimated)) {
+        estimated = estimatedValueMax;
+      } else if (estimated > estimatedValueMax) {
+        estimated = estimatedValueMax;
+      } else if (estimated < estimatedValueMin) {
+        estimated = estimatedValueMin;
+      }
+      return estimated;
+    }
+
+    // skips a whole branch
+    private void SkipBakedCode() {
+      PC += codeArr[PC].exprLength;
+    }
+
+    private double EvaluateBakedCode() {
+      Instr currInstr = codeArr[PC++];
+      switch (currInstr.symbol) {
+        case EvaluatorSymbolTable.VARIABLE: {
+            int row = sampleIndex + currInstr.i_arg1;
+            if (row < 0 || row >= dataset.Rows) return double.NaN;
+            else return currInstr.d_arg0 * dataset.GetValue(row, currInstr.i_arg0);
+          }
+        case EvaluatorSymbolTable.CONSTANT: {
+            PC += currInstr.exprLength - 1;
+            return currInstr.d_arg0;
+          }
+        case EvaluatorSymbolTable.DIFFERENTIAL: {
+            int row = sampleIndex + currInstr.i_arg1;
+            if (row < 0 || row >= dataset.Rows) return double.NaN;
+            else if (row < 1) return 0.0;
+            else {
+              double prevValue = dataset.GetValue(row - 1, currInstr.i_arg0);
+              if (double.IsNaN(prevValue) || double.IsInfinity(prevValue)) return 0.0;
+              else return currInstr.d_arg0 * (dataset.GetValue(row, currInstr.i_arg0) - prevValue);
+            }
+          }
+        case EvaluatorSymbolTable.MULTIPLICATION: {
+            double result = EvaluateBakedCode();
+            for (int i = 1; i < currInstr.arity; i++) {
+              result *= EvaluateBakedCode();
+            }
+            return result;
+          }
+        case EvaluatorSymbolTable.ADDITION: {
+            double sum = EvaluateBakedCode();
+            for (int i = 1; i < currInstr.arity; i++) {
+              sum += EvaluateBakedCode();
+            }
+            return sum;
+          }
+        case EvaluatorSymbolTable.SUBTRACTION: {
+            if (currInstr.arity == 1) {
+              return -EvaluateBakedCode();
+            } else {
+              double result = EvaluateBakedCode();
+              for (int i = 1; i < currInstr.arity; i++) {
+                result -= EvaluateBakedCode();
+              }
+              return result;
+            }
+          }
+        case EvaluatorSymbolTable.DIVISION: {
+            double result;
+            if (currInstr.arity == 1) {
+              result = 1.0 / EvaluateBakedCode();
+            } else {
+              result = EvaluateBakedCode();
+              for (int i = 1; i < currInstr.arity; i++) {
+                result /= EvaluateBakedCode();
+              }
+            }
+            if (double.IsInfinity(result)) return 0.0;
+            else return result;
+          }
+        case EvaluatorSymbolTable.AVERAGE: {
+            double sum = EvaluateBakedCode();
+            for (int i = 1; i < currInstr.arity; i++) {
+              sum += EvaluateBakedCode();
+            }
+            return sum / currInstr.arity;
+          }
+        case EvaluatorSymbolTable.COSINUS: {
+            return Math.Cos(EvaluateBakedCode());
+          }
+        case EvaluatorSymbolTable.SINUS: {
+            return Math.Sin(EvaluateBakedCode());
+          }
+        case EvaluatorSymbolTable.EXP: {
+            return Math.Exp(EvaluateBakedCode());
+          }
+        case EvaluatorSymbolTable.LOG: {
+            return Math.Log(EvaluateBakedCode());
+          }
+        case EvaluatorSymbolTable.POWER: {
+            double x = EvaluateBakedCode();
+            double p = EvaluateBakedCode();
+            return Math.Pow(x, p);
+          }
+        case EvaluatorSymbolTable.SIGNUM: {
+            double value = EvaluateBakedCode();
+            if (double.IsNaN(value)) return double.NaN;
+            else return Math.Sign(value);
+          }
+        case EvaluatorSymbolTable.SQRT: {
+            return Math.Sqrt(EvaluateBakedCode());
+          }
+        case EvaluatorSymbolTable.TANGENS: {
+            return Math.Tan(EvaluateBakedCode());
+          }
+        case EvaluatorSymbolTable.AND: { // only defined for inputs 1 and 0
+            double result = EvaluateBakedCode();
+            for (int i = 1; i < currInstr.arity; i++) {
+              if (result == 0.0) SkipBakedCode();
+              else {
+                result = EvaluateBakedCode();
+              }
+              Debug.Assert(result == 0.0 || result == 1.0);
+            }
+            return result;
+          }
+        case EvaluatorSymbolTable.EQU: {
+            double x = EvaluateBakedCode();
+            double y = EvaluateBakedCode();
+            if (Math.Abs(x - y) < EPSILON) return 1.0; else return 0.0;
+          }
+        case EvaluatorSymbolTable.GT: {
+            double x = EvaluateBakedCode();
+            double y = EvaluateBakedCode();
+            if (x > y) return 1.0;
+            else return 0.0;
+          }
+        case EvaluatorSymbolTable.IFTE: { // only defined for condition 0 or 1
+            double condition = EvaluateBakedCode();
+            Debug.Assert(condition == 0.0 || condition == 1.0);
+            double result;
+            if (condition == 0.0) {
+              result = EvaluateBakedCode(); SkipBakedCode();
+            } else {
+              SkipBakedCode(); result = EvaluateBakedCode();
+            }
+            return result;
+          }
+        case EvaluatorSymbolTable.LT: {
+            double x = EvaluateBakedCode();
+            double y = EvaluateBakedCode();
+            if (x < y) return 1.0;
+            else return 0.0;
+          }
+        case EvaluatorSymbolTable.NOT: { // only defined for inputs 0 or 1
+            double result = EvaluateBakedCode();
+            Debug.Assert(result == 0.0 || result == 1.0);
+            return Math.Abs(result - 1.0);
+          }
+        case EvaluatorSymbolTable.OR: { // only defined for inputs 0 or 1
+            double result = EvaluateBakedCode();
+            for (int i = 1; i < currInstr.arity; i++) {
+              if (result > 0.0) SkipBakedCode();
+              else {
+                result = EvaluateBakedCode();
+                Debug.Assert(result == 0.0 || result == 1.0);
+              }
+            }
+            return result;
+          }
+        case EvaluatorSymbolTable.XOR: { // only defined for inputs 0 or 1
+            double x = EvaluateBakedCode();
+            double y = EvaluateBakedCode();
+            return Math.Abs(x - y);
+          }
+        case EvaluatorSymbolTable.UNKNOWN: { // evaluate functions which are not statically defined directly
+            return currInstr.function.Apply();
+          }
+        default: {
+            throw new NotImplementedException();
+          }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Constant.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Constant.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Constant.cs	(revision 1270)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Constant : FunctionBase {
+    public const string VALUE = "Value";
+
+    public override string Description {
+      get { return "Returns the value of local variable 'Value'."; }
+    }
+
+    public Constant()
+      : base() {
+      AddVariableInfo(new VariableInfo(VALUE, "The constant value", typeof(ConstrainedDoubleData), VariableKind.None));
+      GetVariableInfo(VALUE).Local = true;
+
+      ConstrainedDoubleData valueData = new ConstrainedDoubleData();
+      // initialize a default range for the contant value
+      valueData.AddConstraint(new DoubleBoundedConstraint(-20.0, 20.0));
+      HeuristicLab.Core.Variable value = new HeuristicLab.Core.Variable(VALUE, valueData);
+      AddVariable(value);
+
+      SetupInitialization();
+      SetupManipulation();
+
+      // constant can't have suboperators
+      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
+    }
+
+    private void SetupInitialization() {
+      // initialization operator
+      AddVariableInfo(new VariableInfo(INITIALIZATION, "Initialization operator-graph for constants", typeof(IOperatorGraph), VariableKind.None));
+      GetVariableInfo(INITIALIZATION).Local = false;
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor initSeq = new SequentialProcessor();
+      UniformRandomizer randomizer = new UniformRandomizer();
+      randomizer.Min = -20.0;
+      randomizer.Max = 20.0;
+
+      combinedOp.OperatorGraph.AddOperator(initSeq);
+      combinedOp.OperatorGraph.AddOperator(randomizer);
+      combinedOp.OperatorGraph.InitialOperator = initSeq;
+      initSeq.AddSubOperator(randomizer);
+      AddVariable(new HeuristicLab.Core.Variable(INITIALIZATION, combinedOp));
+    }
+
+    private void SetupManipulation() {
+      // manipulation operator
+      AddVariableInfo(new VariableInfo(MANIPULATION, "Manipulation operator-graph for constants", typeof(IOperatorGraph), VariableKind.None));
+      GetVariableInfo(MANIPULATION).Local = false;
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor manipulationSeq = new SequentialProcessor();
+      NormalRandomAdder valueAdder = new NormalRandomAdder();
+      valueAdder.Mu = 0.0;
+      valueAdder.Sigma = 0.1;
+
+      combinedOp.OperatorGraph.AddOperator(manipulationSeq);
+      combinedOp.OperatorGraph.AddOperator(valueAdder);
+      combinedOp.OperatorGraph.InitialOperator = manipulationSeq;
+      manipulationSeq.AddSubOperator(valueAdder);
+      AddVariable(new HeuristicLab.Core.Variable(MANIPULATION, combinedOp));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Cosinus.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Cosinus.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Cosinus.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Cosinus : FunctionBase {
+    public override string Description {
+      get { return "Returns the cosinus of the first sub-tree."; }
+    }
+
+    public Cosinus()
+      : base() {
+      // must have exactly one subfunction
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Differential.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Differential.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Differential.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Differential : Variable {
+
+    public override string Description {
+      get {
+        return @"Differential returns the difference between the value of a variable at t and t-1. The weight is a coefficient that is multiplied to the the difference.";
+      }
+    }
+
+    public Differential()
+      : base() {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Division.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Division.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Division.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using System.Linq;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Division : FunctionBase {
+    private const double EPSILON = 10.0E-20; // if any divisor is < EPSILON return 0
+
+    public override string Description {
+      get {
+        return @"Protected division
+Divides the result of the first sub-tree by the results of the following sub-tree.
+In case one of the divisors is 0 returns 0.
+    (/ 3) => 1/3
+    (/ 2 3) => 2/3
+    (/ 3 4 5) => 3/20
+    (/ 2 0 4) => 0
+";
+      }
+    }
+
+    public Division()
+      : base() {
+      // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Equal.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Equal.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Equal.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Equal : FunctionBase {
+    public override string Description {
+      get {
+        return @"Equal condition. Returns 1.0 if both sub-trees evaluate to the same value and 0.0 if they differ.";
+      }
+    }
+
+    public Equal()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/CoefficientOfDeterminationEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/CoefficientOfDeterminationEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/CoefficientOfDeterminationEvaluator.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class CoefficientOfDeterminationEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates
+the 'coefficient of determination' of estimated values vs. real values of 'TargetVariable'.";
+      }
+    }
+
+    public CoefficientOfDeterminationEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("R2", "The coefficient of determination of the model", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      double errorsSquaredSum = 0.0;
+      double originalDeviationTotalSumOfSquares = 0.0;
+      double targetMean = dataset.GetMean(targetVariable, start, end);
+      for (int sample = start; sample < end; sample++) {
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+        if (!double.IsNaN(original) && !double.IsInfinity(original)) {
+          double error = estimated - original;
+          errorsSquaredSum += error * error;
+
+          double origDeviation = original - targetMean;
+          originalDeviationTotalSumOfSquares += origDeviation * origDeviation;
+        }
+      }
+
+      double quality = 1 - errorsSquaredSum / originalDeviationTotalSumOfSquares;
+      if (quality > 1)
+        throw new InvalidProgramException();
+      if (double.IsNaN(quality) || double.IsInfinity(quality))
+        quality = double.MaxValue;
+
+      DoubleData r2 = GetVariableValue<DoubleData>("R2", scope, false, false);
+      if (r2 == null) {
+        r2 = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("R2"), r2));
+      }
+
+      r2.Data = quality;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs	(revision 1270)
@@ -0,0 +1,80 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class EarlyStoppingMeanSquaredErrorEvaluator : MeanSquaredErrorEvaluator {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of the dataset and calculates the mean-squared-error
+for the estimated values vs. the real values of 'TargetVariable'.
+This operator stops the computation as soon as an upper limit for the mean-squared-error is reached.";
+      }
+    }
+
+    public EarlyStoppingMeanSquaredErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("QualityLimit", "The upper limit of the MSE which is used as early stopping criterion.", typeof(DoubleData), VariableKind.In));
+    }
+
+    // evaluates the function-tree for the given target-variable and the whole dataset and returns the MSE
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      double qualityLimit = GetVariableValue<DoubleData>("QualityLimit", scope, false).Data;
+      DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false);
+      if (mse == null) {
+        mse = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MSE"), mse));
+      }
+
+      double errorsSquaredSum = 0;
+      int rows = end - start;
+      for (int sample = start; sample < end; sample++) {
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+        if (!double.IsNaN(original) && !double.IsInfinity(original)) {
+          double error = estimated - original;
+          errorsSquaredSum += error * error;
+        }
+        // check the limit and stop as soon as we hit the limit
+        if (errorsSquaredSum / rows >= qualityLimit) {
+          mse.Data = errorsSquaredSum / (sample - start + 1); // return estimated MSE (when the remaining errors are on average the same)
+          return;
+        }
+      }
+      errorsSquaredSum /= rows;
+      if (double.IsNaN(errorsSquaredSum) || double.IsInfinity(errorsSquaredSum)) {
+        errorsSquaredSum = double.MaxValue;
+      }
+
+      mse.Data = errorsSquaredSum;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/GPEvaluatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/GPEvaluatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/GPEvaluatorBase.cs	(revision 1270)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public abstract class GPEvaluatorBase : OperatorBase {
+    public GPEvaluatorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree that should be evaluated", typeof(IFunctionTree), VariableKind.In));
+      AddVariableInfo(new VariableInfo("TreeSize", "Size (number of nodes) of the tree to evaluate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Dataset", "Dataset with all samples on which to apply the function", typeof(Dataset), VariableKind.In));
+      AddVariableInfo(new VariableInfo("TargetVariable", "Index of the column of the dataset that holds the target variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("PunishmentFactor", "Punishment factor for invalid estimations", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("TotalEvaluatedNodes", "Number of evaluated nodes", typeof(DoubleData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("UseEstimatedTargetValue", "Wether to use the original (measured) or the estimated (calculated) value for the targat variable when doing autoregressive modelling", typeof(BoolData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      // get all variable values
+      int targetVariable = GetVariableValue<IntData>("TargetVariable", scope, true).Data;
+      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
+      BakedFunctionTree functionTree = GetVariableValue<BakedFunctionTree>("FunctionTree", scope, true);
+      double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data;
+      int treeSize = scope.GetVariableValue<IntData>("TreeSize", false).Data;
+      double totalEvaluatedNodes = scope.GetVariableValue<DoubleData>("TotalEvaluatedNodes", true).Data;
+      int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data;
+      int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
+      bool useEstimatedValues = GetVariableValue<BoolData>("UseEstimatedTargetValue", scope, true).Data;
+      double[] backupValues = null;
+      // prepare for autoregressive modelling by saving the original values of the target-variable to a backup array
+      if (useEstimatedValues &&
+        (backupValues == null || backupValues.Length != end - start)) {
+        backupValues = new double[end - start];
+        for (int i = start; i < end; i++) {
+          backupValues[i - start] = dataset.GetValue(i, targetVariable);
+        }
+      }
+
+      // initialize and reset the evaluator
+      BakedTreeEvaluator evaluator = new BakedTreeEvaluator();
+      evaluator.ResetEvaluator(functionTree, dataset, targetVariable, start, end, punishmentFactor);
+
+      Evaluate(scope, evaluator, dataset, targetVariable, start, end, useEstimatedValues);
+
+      // restore the values of the target variable from the backup array if necessary
+      if (useEstimatedValues) {
+        for (int i = start; i < end; i++) {
+          dataset.SetValue(i, targetVariable, backupValues[i - start]);
+        }
+      }
+
+      // update the value of total evaluated nodes
+      scope.GetVariableValue<DoubleData>("TotalEvaluatedNodes", true).Data = totalEvaluatedNodes + treeSize * (end - start);
+      return null;
+    }
+
+    public abstract void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/MeanAbsolutePercentageErrorEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/MeanAbsolutePercentageErrorEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/MeanAbsolutePercentageErrorEvaluator.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class MeanAbsolutePercentageErrorEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'Dataset' and calculates
+the 'mean absolute percentage error (scale invariant)' of estimated values vs. real values of 'TargetVariable'.";
+      }
+    }
+
+    public MeanAbsolutePercentageErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("MAPE", "The mean absolute percentage error of the model", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      double errorsSum = 0.0;
+      int n = 0;
+      for (int sample = start; sample < end; sample++) {
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+
+        if (!double.IsNaN(original) && !double.IsInfinity(original) && original != 0.0) {
+          double percent_error = Math.Abs((estimated - original) / original);
+          errorsSum += percent_error;
+          n++;
+        }
+      }
+      double quality = errorsSum / n;
+      if (double.IsNaN(quality) || double.IsInfinity(quality))
+        quality = double.MaxValue;
+
+      // create a variable for the MAPE
+      DoubleData mape = GetVariableValue<DoubleData>("MAPE", scope, false, false);
+      if (mape == null) {
+        mape = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MAPE"), mape));
+      }
+
+      mape.Data = quality;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/MeanSquaredErrorEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/MeanSquaredErrorEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/MeanSquaredErrorEvaluator.cs	(revision 1270)
@@ -0,0 +1,73 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class MeanSquaredErrorEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'DataSet' and calculates the mean-squared-error
+for the estimated values vs. the real values of 'TargetVariable'.";
+      }
+    }
+
+    public MeanSquaredErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("MSE", "The mean squared error of the model", typeof(DoubleData), VariableKind.New));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      double errorsSquaredSum = 0;
+      for (int sample = start; sample < end; sample++) {
+        double original = dataset.GetValue(sample, targetVariable);
+        double estimated = evaluator.Evaluate(sample);
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+        if (!double.IsNaN(original) && !double.IsInfinity(original)) {
+          double error = estimated - original;
+          errorsSquaredSum += error * error;
+        }
+      }
+
+      errorsSquaredSum /= (end - start);
+      if (double.IsNaN(errorsSquaredSum) || double.IsInfinity(errorsSquaredSum)) {
+        errorsSquaredSum = double.MaxValue;
+      }
+
+      DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false);
+      if (mse == null) {
+        mse = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MSE"), mse));
+      }
+
+      mse.Data = errorsSquaredSum;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/SimpleEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/SimpleEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/SimpleEvaluator.cs	(revision 1270)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class SimpleEvaluator : GPEvaluatorBase {
+    public SimpleEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Values", "The values of the target variable as predicted by the model and the original value of the target variable", typeof(ItemList), VariableKind.New | VariableKind.Out));
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      ItemList values = GetVariableValue<ItemList>("Values", scope, false, false);
+      if (values == null) {
+        values = new ItemList();
+        IVariableInfo info = GetVariableInfo("Values");
+        if (info.Local)
+          AddVariable(new HeuristicLab.Core.Variable(info.ActualName, values));
+        else
+          scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(info.FormalName), values));
+      }
+      values.Clear();
+
+      for (int sample = start; sample < end; sample++) {
+        ItemList row = new ItemList();
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+        row.Add(new DoubleData(estimated));
+        row.Add(new DoubleData(original));
+        values.Add(row);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/UncertainMeanSquaredErrorEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/UncertainMeanSquaredErrorEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/UncertainMeanSquaredErrorEvaluator.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class UncertainMeanSquaredErrorEvaluator : MeanSquaredErrorEvaluator {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of the dataset and calculates the mean-squared-error
+for the estimated values vs. the real values of 'TargetVariable'.
+This operator stops the computation as soon as an upper limit for the mean-squared-error is reached.";
+      }
+    }
+
+    public UncertainMeanSquaredErrorEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MinEvaluatedSamples", "", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("QualityLimit", "The upper limit of the MSE which is used as early stopping criterion.", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ConfidenceBounds", "Confidence bounds of the calculated MSE", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("ActuallyEvaluatedSamples", "", typeof(IntData), VariableKind.New | VariableKind.Out));
+    }
+
+    // evaluates the function-tree for the given target-variable and the whole dataset and returns the MSE
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      double qualityLimit = GetVariableValue<DoubleData>("QualityLimit", scope, false).Data;
+      int minSamples = GetVariableValue<IntData>("MinEvaluatedSamples", scope, true).Data;
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+      DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false);
+      if (mse == null) {
+        mse = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("MSE"), mse));
+      }
+      DoubleData confidenceBounds = GetVariableValue<DoubleData>("ConfidenceBounds", scope, false, false);
+      if (confidenceBounds == null) {
+        confidenceBounds = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("ConfidenceBounds"), confidenceBounds));
+      }
+      IntData evaluatedSamples = GetVariableValue<IntData>("ActuallyEvaluatedSamples", scope, false, false);
+      if (evaluatedSamples == null) {
+        evaluatedSamples = new IntData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("ActuallyEvaluatedSamples"), evaluatedSamples));
+      }
+
+      int rows = end - start;
+      double mean = 0;
+      double stdDev = 0;
+      double confidenceInterval = 0;
+      double m2 = 0;
+      int[] indexes = InitIndexes(mt, start, end);
+      int n = 0;
+      for (int sample = 0; sample < rows; sample++) {
+        double estimated = evaluator.Evaluate(indexes[sample]);
+        double original = dataset.GetValue(indexes[sample], targetVariable);
+        if (!double.IsNaN(original) && !double.IsInfinity(original)) {
+          n++;
+          double error = estimated - original;
+          double squaredError = error * error;
+          double delta = squaredError - mean;
+          mean = mean + delta / n;
+          m2 = m2 + delta * (squaredError - mean);
+
+          if (n > minSamples && n % minSamples == 0) {
+            stdDev = Math.Sqrt(Math.Sqrt(m2 / (n - 1)));
+            confidenceInterval = 2.364 * stdDev / Math.Sqrt(n);
+            if (qualityLimit < mean - confidenceInterval || qualityLimit > mean + confidenceInterval) {
+              break;
+            }
+          }
+        }
+      }
+
+      evaluatedSamples.Data = n;
+      mse.Data = mean;
+      stdDev = Math.Sqrt(Math.Sqrt(m2 / (n - 1)));
+      confidenceBounds.Data = 2.364 * stdDev / Math.Sqrt(n);
+    }
+
+    private int[] InitIndexes(MersenneTwister mt, int start, int end) {
+      int n = end - start;
+      int[] indexes = new int[n];
+      for (int i = 0; i < n; i++) indexes[i] = i + start;
+      for (int i = 0; i < n - 1; i++) {
+        int j = mt.Next(i, n);
+        int tmp = indexes[j];
+        indexes[j] = indexes[i];
+        indexes[i] = tmp;
+      }
+      return indexes;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/VarianceAccountedForEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/VarianceAccountedForEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Evaluators/VarianceAccountedForEvaluator.cs	(revision 1270)
@@ -0,0 +1,86 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class VarianceAccountedForEvaluator : GPEvaluatorBase {
+    public override string Description {
+      get {
+        return @"Evaluates 'FunctionTree' for all samples of 'DataSet' and calculates 
+the variance-accounted-for quality measure for the estimated values vs. the real values of 'TargetVariable'.
+
+The Variance Accounted For (VAF) function is computed as
+VAF(y,y') = ( 1 - var(y-y')/var(y) )
+where y' denotes the predicted / modelled values for y and var(x) the variance of a signal x.";
+      }
+    }
+
+    /// <summary>
+    /// The Variance Accounted For (VAF) function calculates is computed as
+    /// VAF(y,y') = ( 1 - var(y-y')/var(y) )
+    /// where y' denotes the predicted / modelled values for y and var(x) the variance of a signal x.
+    /// </summary>
+    public VarianceAccountedForEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("VAF", "The variance-accounted-for quality of the model", typeof(DoubleData), VariableKind.New));
+
+    }
+
+    public override void Evaluate(IScope scope, BakedTreeEvaluator evaluator, Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) {
+      int nSamples = end - start;
+      double[] errors = new double[nSamples];
+      double[] originalTargetVariableValues = new double[nSamples];
+      for (int sample = start; sample < end; sample++) {
+        double estimated = evaluator.Evaluate(sample);
+        double original = dataset.GetValue(sample, targetVariable);
+        if (updateTargetValues) {
+          dataset.SetValue(sample, targetVariable, estimated);
+        }
+        if (!double.IsNaN(original) && !double.IsInfinity(original)) {
+          errors[sample - start] = original - estimated;
+          originalTargetVariableValues[sample - start] = original;
+        }
+      }
+      double errorsVariance = Statistics.Variance(errors);
+      double originalsVariance = Statistics.Variance(originalTargetVariableValues);
+      double quality = 1 - errorsVariance / originalsVariance;
+
+      if (double.IsNaN(quality) || double.IsInfinity(quality)) {
+        quality = double.MaxValue;
+      }
+      DoubleData vaf = GetVariableValue<DoubleData>("VAF", scope, false, false);
+      if (vaf == null) {
+        vaf = new DoubleData();
+        scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("VAF"), vaf));
+      }
+
+      vaf.Data = quality;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Exponential.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Exponential.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Exponential.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Exponential : FunctionBase {
+    public override string Description {
+      get { return "Returns returns exponential of the first sub-tree (power(e, x))."; }
+    }
+
+    public Exponential()
+      : base() {
+      // must have exactly one sub-operator
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/GreaterThan.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/GreaterThan.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/GreaterThan.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class GreaterThan : FunctionBase {
+    public override string Description {
+      get {
+        return @"Greater-than condition. Returns 1.0 if the value of the first sub-tree is greater than the value of the second sub-tree and 0.0 otherwise.";
+      }
+    }
+
+    public GreaterThan()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/HeuristicLab.GP.StructureIdentification.csproj	(revision 1270)
@@ -0,0 +1,174 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{74223A32-C726-4978-BE78-37113A18373C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP.StructureIdentification</RootNamespace>
+    <AssemblyName>HeuristicLab.GP.StructureIdentification-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Addition.cs" />
+    <Compile Include="And.cs" />
+    <Compile Include="Average.cs" />
+    <Compile Include="BakedTreeEvaluator.cs" />
+    <Compile Include="Constant.cs" />
+    <Compile Include="Cosinus.cs" />
+    <Compile Include="Differential.cs" />
+    <Compile Include="Division.cs" />
+    <Compile Include="Equal.cs" />
+    <Compile Include="Evaluators\CoefficientOfDeterminationEvaluator.cs" />
+    <Compile Include="Evaluators\UncertainMeanSquaredErrorEvaluator.cs" />
+    <Compile Include="Evaluators\EarlyStoppingMeanSquaredErrorEvaluator.cs" />
+    <Compile Include="Evaluators\GPEvaluatorBase.cs" />
+    <Compile Include="Evaluators\MeanAbsolutePercentageErrorEvaluator.cs" />
+    <Compile Include="Evaluators\MeanSquaredErrorEvaluator.cs" />
+    <Compile Include="Evaluators\SimpleEvaluator.cs" />
+    <Compile Include="Evaluators\VarianceAccountedForEvaluator.cs" />
+    <Compile Include="Exponential.cs" />
+    <Compile Include="GreaterThan.cs" />
+    <Compile Include="HeuristicLabGPStructureIdentificationPlugin.cs" />
+    <Compile Include="IfThenElse.cs" />
+    <Compile Include="LessThan.cs" />
+    <Compile Include="Logarithm.cs" />
+    <Compile Include="ModelAnalyzerExporter.cs" />
+    <Compile Include="Multiplication.cs" />
+    <Compile Include="Not.cs" />
+    <Compile Include="Or.cs" />
+    <Compile Include="Power.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Signum.cs" />
+    <Compile Include="Sinus.cs" />
+    <Compile Include="Sqrt.cs" />
+    <Compile Include="StructIdProblemInjector.cs" />
+    <Compile Include="StructIdProblemInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="StructIdProblemInjectorView.Designer.cs">
+      <DependentUpon>StructIdProblemInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Subtraction.cs" />
+    <Compile Include="SymbolicExpressionExporter.cs" />
+    <Compile Include="SymbolTable.cs" />
+    <Compile Include="Tangens.cs" />
+    <Compile Include="Variable.cs" />
+    <Compile Include="Xor.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj">
+      <Project>{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}</Project>
+      <Name>HeuristicLab.DataAnalysis</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.GP\HeuristicLab.GP.csproj">
+      <Project>{1F1CF3ED-374C-4288-995B-93F6B872F571}</Project>
+      <Name>HeuristicLab.GP</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="StructIdProblemInjectorView.resx">
+      <DependentUpon>StructIdProblemInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/HeuristicLabGPStructureIdentificationPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/HeuristicLabGPStructureIdentificationPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/HeuristicLabGPStructureIdentificationPlugin.cs	(revision 1270)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  [ClassInfo(Name = "HeuristicLab.GP.StructureIdentification-3.2")]
+  [PluginFile(Filename = "HeuristicLab.GP.StructureIdentification-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.DataAnalysis-3.2")]
+  [Dependency(Dependency = "HeuristicLab.GP-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  public class HeuristicLabGPStructureIdentificationPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/IfThenElse.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/IfThenElse.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/IfThenElse.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class IfThenElse : FunctionBase {
+    public override string Description {
+      get {
+        return @"Returns the result of the second sub-tree if the first sub-tree evaluates to a value < 0.5 and the result
+of the third sub-tree if the first sub-tree evaluates to >= 0.5.";
+      }
+    }
+
+    public IfThenElse()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(3, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/LessThan.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/LessThan.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/LessThan.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class LessThan : FunctionBase {
+    public override string Description {
+      get {
+        return @"Less-than condition. Returns 1.0 if the value of the first sub-tree is less than the value of the second sub-tree and 0.0 otherwise.";
+      }
+    }
+
+    public LessThan()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Logarithm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Logarithm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Logarithm.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Logarithm : FunctionBase {
+    public override string Description {
+      get { return "Returns the natural (base e) logarithm of the first sub-tree."; }
+    }
+
+    public Logarithm()
+      : base() {
+      // must have exactly 1 suboperator
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/ModelAnalyzerExporter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/ModelAnalyzerExporter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/ModelAnalyzerExporter.cs	(revision 1270)
@@ -0,0 +1,222 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class ModelAnalyzerExporter : IFunctionTreeExporter, IFunctionTreeNameGenerator {
+    #region IFunctionTreeExporter Members
+
+    public string Name {
+      get {
+        return "HL2 ModelAnalyzer Exporter";
+      }
+    }
+
+    public bool TryExport(IFunctionTree tree, out string exported) {
+      try {
+        exported = Export(tree);
+        return true;
+      } catch(UnknownFunctionException) {
+        exported = "";
+        return false;
+      }
+    }
+
+    public string Export(IFunctionTree tree) {
+      string result = ExportFunction(tree.Function, tree);
+      if(tree.SubTrees.Count>0) 
+        result += "(\n";
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        result += Export(subTree);
+        result += ";\n";
+      }
+      result = result.TrimEnd(';', '\n');
+      if(tree.SubTrees.Count > 0) result += ")";
+      return result;
+    }
+
+    #endregion
+
+    private string ExportFunction(IFunction function, IFunctionTree tree) {
+      // this is smelly, if there is a cleaner way to have a 'dynamic' visitor 
+      // please let me know! (gkronber 14.10.2008)
+      if(function is Addition) return ((Addition)function).ExportToHL2(tree);
+      if(function is And) return ((And)function).ExportToHL2(tree);
+      if(function is Average) return ((Average)function).ExportToHL2(tree);
+      if(function is Constant) return ((Constant)function).ExportToHL2(tree);
+      if(function is Cosinus) return ((Cosinus)function).ExportToHL2(tree);
+      if(function is Differential) return ((Differential)function).ExportToHL2(tree);
+      if(function is Division) return ((Division)function).ExportToHL2(tree);
+      if(function is Equal) return ((Equal)function).ExportToHL2(tree);
+      if(function is Exponential) return ((Exponential)function).ExportToHL2(tree);
+      if(function is GreaterThan) return ((GreaterThan)function).ExportToHL2(tree);
+      if(function is IfThenElse) return ((IfThenElse)function).ExportToHL2(tree);
+      if(function is LessThan) return ((LessThan)function).ExportToHL2(tree);
+      if(function is Logarithm) return ((Logarithm)function).ExportToHL2(tree);
+      if(function is Multiplication) return ((Multiplication)function).ExportToHL2(tree);
+      if(function is Not) return ((Not)function).ExportToHL2(tree);
+      if(function is Or) return ((Or)function).ExportToHL2(tree);
+      if(function is Power) return ((Power)function).ExportToHL2(tree);
+      if(function is Signum) return ((Signum)function).ExportToHL2(tree);
+      if(function is Sinus) return ((Sinus)function).ExportToHL2(tree);
+      if(function is Sqrt) return ((Sqrt)function).ExportToHL2(tree);
+      if(function is Subtraction) return ((Subtraction)function).ExportToHL2(tree);
+      if(function is Tangens) return ((Tangens)function).ExportToHL2(tree);
+      if(function is Variable) return ((Variable)function).ExportToHL2(tree);
+      if(function is Xor) return ((Xor)function).ExportToHL2(tree);
+      throw new UnknownFunctionException(function.Name);
+    }
+
+    #region IFunctionTreeNameGenerator Members
+
+    string IFunctionTreeNameGenerator.Name {
+      get { return "HL2 Representation"; }
+    }
+
+    public string GetName(IFunctionTree tree) {
+      string name = "";
+      try {
+        name = ExportFunction(tree.Function, tree);
+      } catch(UnknownFunctionException) {
+        name = "N/A";
+      }
+      return name;
+    }
+
+    #endregion
+  }
+
+  internal static class HL2ExporterExtensions {
+    private static string GetHL2FunctionName(string name) {
+      return "[F]" + name ;
+    }
+
+    public static string ExportToHL2(this Addition addition, IFunctionTree tree) {
+      return GetHL2FunctionName("Addition[0]");
+    }
+
+    public static string ExportToHL2(this Constant constant, IFunctionTree tree) {
+      double value = ((ConstrainedDoubleData)tree.GetLocalVariable(Constant.VALUE).Value).Data;
+      return "[T]Constant(" + value.ToString("r") + ";0;0)";
+    }
+
+    public static string ExportToHL2(this Cosinus cosinus, IFunctionTree tree) {
+      return GetHL2FunctionName("Trigonometrics[1]");
+    }
+
+    public static string ExportToHL2(this Differential differential, IFunctionTree tree) {
+      double weight = ((ConstrainedDoubleData)tree.GetLocalVariable(Differential.WEIGHT).Value).Data;
+      double index = ((ConstrainedIntData)tree.GetLocalVariable(Differential.INDEX).Value).Data;
+      double offset = ((ConstrainedIntData)tree.GetLocalVariable(Differential.OFFSET).Value).Data;
+
+      return "[T]Differential(" + weight.ToString("r") + ";" + index + ";" + -offset + ")";
+    }
+
+    public static string ExportToHL2(this Division division, IFunctionTree tree) {
+      return GetHL2FunctionName("Division[0]");
+    }
+
+    public static string ExportToHL2(this Exponential exponential, IFunctionTree tree) {
+      return GetHL2FunctionName("Exponential[0]");
+    }
+
+    public static string ExportToHL2(this Logarithm logarithm, IFunctionTree tree) {
+      return GetHL2FunctionName("Logarithm[0]");
+    }
+
+    public static string ExportToHL2(this Multiplication multiplication, IFunctionTree tree) {
+      return GetHL2FunctionName("Multiplication[0]");
+    }
+
+    public static string ExportToHL2(this Power power, IFunctionTree tree) {
+      return GetHL2FunctionName("Power[0]");
+    }
+
+    public static string ExportToHL2(this Signum signum, IFunctionTree tree) {
+      return GetHL2FunctionName("Signum[0]");
+    }
+
+    public static string ExportToHL2(this Sinus sinus, IFunctionTree tree) {
+      return GetHL2FunctionName("Trigonometrics[0]");
+    }
+
+    public static string ExportToHL2(this Sqrt sqrt, IFunctionTree tree) {
+      return GetHL2FunctionName("Sqrt[0]");
+    }
+
+    public static string ExportToHL2(this Subtraction substraction, IFunctionTree tree) {
+      return GetHL2FunctionName("Subtraction[0]");
+    }
+
+    public static string ExportToHL2(this Tangens tangens, IFunctionTree tree) {
+      return GetHL2FunctionName("Trigonometrics[2]");
+    }
+
+    public static string ExportToHL2(this Variable variable, IFunctionTree tree) {
+      double weight = ((ConstrainedDoubleData)tree.GetLocalVariable(Variable.WEIGHT).Value).Data;
+      double index = ((ConstrainedIntData)tree.GetLocalVariable(Variable.INDEX).Value).Data;
+      double offset = ((ConstrainedIntData)tree.GetLocalVariable(Variable.OFFSET).Value).Data;
+
+      return "[T]Variable(" + weight.ToString("r") + ";" + index + ";" + -offset + ")";
+    }
+
+    public static string ExportToHL2(this And and, IFunctionTree tree) {
+      return GetHL2FunctionName("Logical[0]");
+    }
+
+    public static string ExportToHL2(this Average average, IFunctionTree tree) {
+      return GetHL2FunctionName("Average[0]");
+    }
+
+    public static string ExportToHL2(this IfThenElse ifThenElse, IFunctionTree tree) {
+      return GetHL2FunctionName("Conditional[0]");
+    }
+
+    public static string ExportToHL2(this Not not, IFunctionTree tree) {
+      return GetHL2FunctionName("Logical[2]");
+    }
+
+    public static string ExportToHL2(this Or or, IFunctionTree tree) {
+      return GetHL2FunctionName("Logical[1]");
+    }
+
+    public static string ExportToHL2(this Xor xor, IFunctionTree tree) {
+      return GetHL2FunctionName("Logical[3]");
+    }
+
+    public static string ExportToHL2(this Equal equal, IFunctionTree tree) {
+      return GetHL2FunctionName("Boolean[2]");
+    }
+
+    public static string ExportToHL2(this LessThan lessThan, IFunctionTree tree) {
+      return GetHL2FunctionName("Boolean[0]");
+    }
+
+    public static string ExportToHL2(this GreaterThan greaterThan, IFunctionTree tree) {
+      return GetHL2FunctionName("Boolean[4]");
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Multiplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Multiplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Multiplication.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using System.Linq;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Multiplication : FunctionBase {
+    public override string Description {
+      get {
+        return @"Returns the product of the results of all sub-tree.
+  (* 3) => 3
+  (* 2 3) => 6
+  (* 3 4 5) => 60";
+      }
+    }
+
+    public Multiplication()
+      : base() {
+      // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Not.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Not.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Not.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Not : FunctionBase {
+    public override string Description {
+      get {
+        return @"Logical NOT operation. Only defined for sub-tree-results 0.0 and 1.0.";
+      }
+    }
+
+    public Not()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Or.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Or.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Or.cs	(revision 1270)
@@ -0,0 +1,46 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Or : FunctionBase {
+    public override string Description {
+      get {
+        return @"Logical OR operation. Only defined for sub-tree-results 0.0 and 1.0.
+Special form, evaluation stops at first sub-tree that evaluates to 1.0 (true).";
+      }
+    }
+
+    public Or()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Power.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Power.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Power.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Power : FunctionBase {
+    public override string Description {
+      get { return "Returns the result of the first sub-tree to the power of the second sub-tree (power(x, y))."; }
+    }
+
+    public Power()
+      : base() {
+      // must have exactly 2 suboperators base ^ exponent
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.GP.StructureIdentification")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("863021a4-3cde-48be-8af6-dac1077f5fb5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Signum.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Signum.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Signum.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Signum : FunctionBase {
+    public override string Description {
+      get { return "Returns the signum of the first sub-tree."; }
+    }
+
+    public Signum()
+      : base() {
+      // must have exactly 1 suboperator
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Sinus.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Sinus.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Sinus.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Sinus : FunctionBase {
+    public override string Description {
+      get { return "Returns the sinus of the first sub-tree."; }
+    }
+
+    public Sinus()
+      : base() {
+      // must have exactly 1 suboperator
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Sqrt.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Sqrt.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Sqrt.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Sqrt : FunctionBase {
+    public override string Description {
+      get { return "Returns the square root of the first sub-tree."; }
+    }
+
+    public Sqrt()
+      : base() {
+      // must have exactly 1 suboperator
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjector.cs	(revision 1270)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using Core = HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class StructIdProblemInjector : Core.OperatorBase {
+    public override string Description {
+      get { return @"Injects the necessary variables for a structure identification problem."; }
+    }
+
+    public StructIdProblemInjector()
+      : base() {
+      AddVariableInfo(new Core.VariableInfo("Dataset", "Dataset", typeof(Dataset), Core.VariableKind.New));
+      GetVariableInfo("Dataset").Local = true;
+      AddVariable(new Core.Variable("Dataset", new Dataset()));
+
+      AddVariableInfo(new Core.VariableInfo("TargetVariable", "TargetVariable", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TargetVariable").Local = true;
+      AddVariable(new Core.Variable("TargetVariable", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("AllowedFeatures", "Indexes of allowed input variables", typeof(ItemList<IntData>), Core.VariableKind.New));
+      GetVariableInfo("AllowedFeatures").Local = true;
+      AddVariable(new Core.Variable("AllowedFeatures", new ItemList<IntData>()));
+
+      AddVariableInfo(new Core.VariableInfo("TrainingSamplesStart", "TrainingSamplesStart", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TrainingSamplesStart").Local = true;
+      AddVariable(new Core.Variable("TrainingSamplesStart", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("TrainingSamplesEnd", "TrainingSamplesEnd", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TrainingSamplesEnd").Local = true;
+      AddVariable(new Core.Variable("TrainingSamplesEnd", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("ValidationSamplesStart", "ValidationSamplesStart", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("ValidationSamplesStart").Local = true;
+      AddVariable(new Core.Variable("ValidationSamplesStart", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("ValidationSamplesEnd", "ValidationSamplesEnd", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("ValidationSamplesEnd").Local = true;
+      AddVariable(new Core.Variable("ValidationSamplesEnd", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("TestSamplesStart", "TestSamplesStart", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TestSamplesStart").Local = true;
+      AddVariable(new Core.Variable("TestSamplesStart", new IntData()));
+
+      AddVariableInfo(new Core.VariableInfo("TestSamplesEnd", "TestSamplesEnd", typeof(IntData), Core.VariableKind.New));
+      GetVariableInfo("TestSamplesEnd").Local = true;
+      AddVariable(new Core.Variable("TestSamplesEnd", new IntData()));
+    }
+
+    public override Core.IView CreateView() {
+      return new StructIdProblemInjectorView(this);
+    }
+
+    public override Core.IOperation Apply(Core.IScope scope) {
+      foreach(Core.VariableInfo info in VariableInfos) {
+        if(info.Local) {
+          Core.IVariable var = GetVariable(info.FormalName);
+          if(var != null) scope.AddVariable(new Core.Variable(info.ActualName, (Core.IItem)var.Value.Clone()));
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,213 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP.StructureIdentification {
+  partial class StructIdProblemInjectorView {
+    /// <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.importInstanceButton = new System.Windows.Forms.Button();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.datasetView = new HeuristicLab.DataAnalysis.DatasetView();
+      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.tabPage1 = new System.Windows.Forms.TabPage();
+      this.variablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
+      this.tabControl.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.variableInfosTabPage.SuspendLayout();
+      this.tabPage1.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // importInstanceButton
+      // 
+      this.importInstanceButton.Location = new System.Drawing.Point(6, 6);
+      this.importInstanceButton.Name = "importInstanceButton";
+      this.importInstanceButton.Size = new System.Drawing.Size(129, 21);
+      this.importInstanceButton.TabIndex = 6;
+      this.importInstanceButton.Text = "&Import...";
+      this.importInstanceButton.UseVisualStyleBackColor = true;
+      this.importInstanceButton.Click += new System.EventHandler(this.importInstanceButton_Click);
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "txt";
+      this.openFileDialog.FileName = "txt";
+      this.openFileDialog.Filter = "Text files|*.txt|All files|*.*";
+      this.openFileDialog.Title = "Import StructId File";
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.dataTabPage);
+      this.tabControl.Controls.Add(this.variableInfosTabPage);
+      this.tabControl.Controls.Add(this.tabPage1);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(507, 451);
+      this.tabControl.TabIndex = 0;
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.datasetView);
+      this.dataTabPage.Controls.Add(this.importInstanceButton);
+      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(499, 425);
+      this.dataTabPage.TabIndex = 0;
+      this.dataTabPage.Text = "Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // datasetView
+      // 
+      this.datasetView.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.datasetView.Caption = "Editor";
+      this.datasetView.Dataset = null;
+      this.datasetView.Filename = null;
+      this.datasetView.Location = new System.Drawing.Point(6, 33);
+      this.datasetView.Name = "datasetView";
+      this.datasetView.Size = new System.Drawing.Size(487, 386);
+      this.datasetView.TabIndex = 7;
+      // 
+      // variableInfosTabPage
+      // 
+      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfosTabPage.Name = "variableInfosTabPage";
+      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfosTabPage.Size = new System.Drawing.Size(499, 425);
+      this.variableInfosTabPage.TabIndex = 1;
+      this.variableInfosTabPage.Text = "Variable Infos";
+      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(493, 419);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.variablesView);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(499, 425);
+      this.tabPage1.TabIndex = 3;
+      this.tabPage1.Text = "Variables";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // variablesView
+      // 
+      this.variablesView.Caption = "Operator";
+      this.variablesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesView.Location = new System.Drawing.Point(3, 3);
+      this.variablesView.Name = "variablesView";
+      this.variablesView.Operator = null;
+      this.variablesView.Size = new System.Drawing.Size(493, 419);
+      this.variablesView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(499, 425);
+      this.descriptionTabPage.TabIndex = 2;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseDescriptionView
+      // 
+      this.operatorBaseDescriptionView.Caption = "Operator";
+      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
+      this.operatorBaseDescriptionView.Operator = null;
+      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(493, 419);
+      this.operatorBaseDescriptionView.TabIndex = 0;
+      // 
+      // StructIdProblemInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "StructIdProblemInjectorView";
+      this.Size = new System.Drawing.Size(507, 451);
+      this.tabControl.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.variableInfosTabPage.ResumeLayout(false);
+      this.tabPage1.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button importInstanceButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.TabPage variableInfosTabPage;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private HeuristicLab.Core.OperatorBaseDescriptionView operatorBaseDescriptionView;
+    private System.Windows.Forms.TabPage tabPage1;
+    private HeuristicLab.Core.OperatorBaseVariablesView variablesView;
+    private HeuristicLab.DataAnalysis.DatasetView datasetView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.cs	(revision 1270)
@@ -0,0 +1,154 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public partial class StructIdProblemInjectorView : ViewBase {
+    public StructIdProblemInjector StructIdProblemInjector {
+      get { return (StructIdProblemInjector)Item; }
+      set { base.Item = value; }
+    }
+
+    public StructIdProblemInjectorView()
+      : base() {
+      InitializeComponent();
+    }
+    public StructIdProblemInjectorView(StructIdProblemInjector structIdProblemInjector)
+      : this() {
+      StructIdProblemInjector = structIdProblemInjector;
+      variablesView.Operator = structIdProblemInjector;
+      variablesView.Update();
+    }
+
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = StructIdProblemInjector;
+      operatorBaseDescriptionView.Operator = StructIdProblemInjector;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if(StructIdProblemInjector == null) {
+        importInstanceButton.Enabled = false;
+      } else {
+        Dataset dataset = (Dataset)StructIdProblemInjector.GetVariable("Dataset").Value;
+        datasetView.Dataset = dataset;
+        importInstanceButton.Enabled = true;
+      }
+    }
+
+    private void importInstanceButton_Click(object sender, EventArgs e) {
+      if(openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        DatasetParser parser = new DatasetParser();
+        bool success = false;
+        try {
+          try {
+            parser.Import(openFileDialog.FileName, true);
+            success = true;
+          } catch(DataFormatException ex) {
+            ShowWarningMessageBox(ex);
+            // not possible to parse strictly => clear and try to parse non-strict
+            parser.Reset();
+            parser.Import(openFileDialog.FileName, false);
+            success = true;
+          }
+        } catch(DataFormatException ex) {
+          // if the non-strict parsing also failed then show the exception
+          ShowErrorMessageBox(ex);
+        }
+        if(success) {
+          Dataset dataset = (Dataset)StructIdProblemInjector.GetVariable("Dataset").Value;
+          dataset.Rows = parser.Rows;
+          dataset.Columns = parser.Columns;
+          dataset.VariableNames = parser.VariableNames;
+          dataset.Name = parser.ProblemName;
+          dataset.Samples = new double[dataset.Rows * dataset.Columns];
+          Array.Copy(parser.Samples, dataset.Samples, dataset.Columns * dataset.Rows);
+          TrySetVariable("TrainingSamplesStart", parser.TrainingSamplesStart);
+          TrySetVariable("TrainingSamplesStart", parser.TrainingSamplesStart);
+          TrySetVariable("TrainingSamplesEnd", parser.TrainingSamplesEnd);
+          TrySetVariable("ValidationSamplesStart", parser.ValidationSamplesStart);
+          TrySetVariable("ValidationSamplesEnd", parser.ValidationSamplesEnd);
+          TrySetVariable("TestSamplesStart", parser.TestSamplesStart);
+          TrySetVariable("TestSamplesEnd", parser.TestSamplesEnd);
+          TrySetVariable("TargetVariable", parser.TargetVariable);
+
+          IVariable var = StructIdProblemInjector.GetVariable("AllowedFeatures");
+          if(var != null) {
+            ItemList<IntData> allowedFeatures = (ItemList<IntData>)var.Value;
+            allowedFeatures.Clear();
+            List<int> nonInputVariables = parser.NonInputVariables;
+            for(int i = 0; i < dataset.Columns; i++) {
+              if(!nonInputVariables.Contains(i)) allowedFeatures.Add(new IntData(i));
+            }
+          }
+          Refresh();
+        }
+      }
+    }
+
+    private void TrySetVariable(string name, int value) {
+      IVariable var = StructIdProblemInjector.GetVariable(name);
+      if(var != null) {
+        ((IntData)var.Value).Data = value;
+      }
+    }
+
+    private void ShowWarningMessageBox(Exception ex) {
+      MessageBox.Show(ex.Message,
+                      "Warning - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Warning);
+    }
+    private void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(BuildErrorMessage(ex),
+                      "Error - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+    private string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while(ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/StructIdProblemInjectorView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Subtraction.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Subtraction.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Subtraction.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using System.Linq;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Subtraction : FunctionBase {
+    public override string Description {
+      get {
+        return @"Subtracts the results of sub-tree 2..n from the result of the first sub-tree.
+    (- 3) => -3
+    (- 2 3) => -1
+    (- 3 4 5) => -6";
+      }
+    }
+
+    public Subtraction()
+      : base() {
+      // 2 - 3 seems like an reasonable defaut (used for +,-,*,/) (discussion with swinkler and maffenze)
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 3));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+      AddConstraint(new SubOperatorTypeConstraint(2));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/SymbolTable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/SymbolTable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/SymbolTable.cs	(revision 1270)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  class EvaluatorSymbolTable : StorableBase {
+    public const byte ADDITION = 1;
+    public const byte AND = 2;
+    public const byte AVERAGE = 3;
+    public const byte CONSTANT = 4;
+    public const byte COSINUS = 5;
+    public const byte DIFFERENTIAL = 25;
+    public const byte DIVISION = 6;
+    public const byte EQU = 7;
+    public const byte EXP = 8;
+    public const byte GT = 9;
+    public const byte IFTE = 10;
+    public const byte LT = 11;
+    public const byte LOG = 12;
+    public const byte MULTIPLICATION = 13;
+    public const byte NOT = 14;
+    public const byte OR = 15;
+    public const byte POWER = 16;
+    public const byte SIGNUM = 17;
+    public const byte SINUS = 18;
+    public const byte SQRT = 19;
+    public const byte SUBTRACTION = 20;
+    public const byte TANGENS = 21;
+    public const byte VARIABLE = 22;
+    public const byte XOR = 23;
+    public const byte UNKNOWN = 24;
+
+    private static Dictionary<Type, byte> staticTypes = new Dictionary<Type, byte>();
+
+    // needs to be public for persistence mechanism (Activator.CreateInstance needs empty constructor)
+    static EvaluatorSymbolTable() {
+      staticTypes = new Dictionary<Type, byte>();
+      staticTypes[typeof(Addition)] = ADDITION;
+      staticTypes[typeof(And)] = AND;
+      staticTypes[typeof(Average)] = AVERAGE;
+      staticTypes[typeof(Constant)] = CONSTANT;
+      staticTypes[typeof(Cosinus)] = COSINUS;
+      staticTypes[typeof(Division)] = DIVISION;
+      staticTypes[typeof(Equal)] = EQU;
+      staticTypes[typeof(Exponential)] = EXP;
+      staticTypes[typeof(GreaterThan)] = GT;
+      staticTypes[typeof(IfThenElse)] = IFTE;
+      staticTypes[typeof(LessThan)] = LT;
+      staticTypes[typeof(Logarithm)] = LOG;
+      staticTypes[typeof(Multiplication)] = MULTIPLICATION;
+      staticTypes[typeof(Not)] = NOT;
+      staticTypes[typeof(Or)] = OR;
+      staticTypes[typeof(Power)] = POWER;
+      staticTypes[typeof(Signum)] = SIGNUM;
+      staticTypes[typeof(Sinus)] = SINUS;
+      staticTypes[typeof(Sqrt)] = SQRT;
+      staticTypes[typeof(Subtraction)] = SUBTRACTION;
+      staticTypes[typeof(Tangens)] = TANGENS;
+      staticTypes[typeof(Variable)] = VARIABLE;
+      staticTypes[typeof(Xor)] = XOR;
+      staticTypes[typeof(Differential)] = DIFFERENTIAL;
+    }
+
+    internal static byte MapFunction(IFunction function) {
+      if(staticTypes.ContainsKey(function.GetType())) return staticTypes[function.GetType()];
+      else return UNKNOWN;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/SymbolicExpressionExporter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/SymbolicExpressionExporter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/SymbolicExpressionExporter.cs	(revision 1270)
@@ -0,0 +1,219 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class SymbolicExpressionExporter : IFunctionTreeExporter, IFunctionTreeNameGenerator {
+    private StringBuilder builder;
+    private string currentIndent;
+
+    #region IFunctionTreeExporter Members
+
+    public string Name {
+      get { return "Symbolic Expression Exporter"; }
+    }
+
+
+    public string Export(IFunctionTree tree) {
+      builder = new StringBuilder();
+      currentIndent = "";
+      BuildExportString(tree);
+      return builder.ToString();
+    }
+
+    public bool TryExport(IFunctionTree tree, out string exported) {
+      try {
+        exported = Export(tree);
+        return true;
+      } catch(UnknownFunctionException) {
+        exported = "";
+        return false;
+      }
+    }
+
+    private void BuildExportString(IFunctionTree tree) {
+      builder.Append(currentIndent);
+      builder.Append("(" + ExportFunction(tree.Function, tree) + " ");
+      currentIndent += "  ";
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        builder.Append("\n");
+        BuildExportString(subTree);
+      }
+      if(tree.SubTrees.Count > 0) builder.Append(")");
+      currentIndent = currentIndent.Remove(0, 2);
+    }
+
+    private string ExportFunction(IFunction function, IFunctionTree tree) {
+      // this is smelly, if there is a cleaner way to have a 'dynamic' visitor 
+      // please let me know! (gkronber 14.10.2008)
+      if(function is Addition) return ((Addition)function).ExportToScheme();
+      if(function is And) return ((And)function).ExportToScheme();
+      if(function is Average) return ((Average)function).ExportToScheme();
+      if(function is Constant) return ((Constant)function).ExportToScheme(tree);
+      if(function is Cosinus) return ((Cosinus)function).ExportToScheme();
+      if(function is Differential) return ((Differential)function).ExportToScheme(tree);
+      if(function is Division) return ((Division)function).ExportToScheme();
+      if(function is Equal) return ((Equal)function).ExportToScheme();
+      if(function is Exponential) return ((Exponential)function).ExportToScheme();
+      if(function is GreaterThan) return ((GreaterThan)function).ExportToScheme();
+      if(function is IfThenElse) return ((IfThenElse)function).ExportToScheme();
+      if(function is LessThan) return ((LessThan)function).ExportToScheme();
+      if(function is Logarithm) return ((Logarithm)function).ExportToScheme();
+      if(function is Multiplication) return ((Multiplication)function).ExportToScheme();
+      if(function is Not) return ((Not)function).ExportToScheme();
+      if(function is Or) return ((Or)function).ExportToScheme();
+      if(function is Power) return ((Power)function).ExportToScheme();
+      if(function is Signum) return ((Signum)function).ExportToScheme();
+      if(function is Sinus) return ((Sinus)function).ExportToScheme();
+      if(function is Sqrt) return ((Sqrt)function).ExportToScheme();
+      if(function is Subtraction) return ((Subtraction)function).ExportToScheme();
+      if(function is Tangens) return ((Tangens)function).ExportToScheme();
+      if(function is Variable) return ((Variable)function).ExportToScheme(tree);
+      if(function is Xor) return ((Xor)function).ExportToScheme();
+      throw new UnknownFunctionException(function.Name);
+    }
+
+
+    #endregion
+
+    #region IFunctionTreeNameGenerator Members
+
+    string IFunctionTreeNameGenerator.Name {
+      get { return "Symbolic Expression"; }
+    }
+
+    public string GetName(IFunctionTree tree) {
+      string name = "";
+      try {
+        name = ExportFunction(tree.Function, tree);
+      } catch(UnknownFunctionException) {
+        name = "N/A";
+      }
+      return name;
+    }
+
+    #endregion
+  }
+
+  internal static class SchemeExporterExtensions {
+    public static string ExportToScheme(this Addition addition) {
+      return "+";
+    }
+
+    public static string ExportToScheme(this Constant constant, IFunctionTree tree) {
+      return tree.GetLocalVariable(Constant.VALUE).Value.ToString();
+    }
+
+    public static string ExportToScheme(this Cosinus cosinus) {
+      return "cos";
+    }
+
+    public static string ExportToScheme(this Division division) {
+      return "/";
+    }
+
+    public static string ExportToScheme(this Exponential exponential) {
+      return "exp";
+    }
+
+    public static string ExportToScheme(this Logarithm logarithm) {
+      return "log";
+    }
+
+    public static string ExportToScheme(this Multiplication multiplication) {
+      return "*";
+    }
+
+    public static string ExportToScheme(this Power power) {
+      return "expt";
+    }
+
+    public static string ExportToScheme(this Signum signum) {
+      return "sign";
+    }
+
+    public static string ExportToScheme(this Sinus sinus) {
+      return "sin";
+    }
+
+    public static string ExportToScheme(this Sqrt sqrt) {
+      return "sqrt";
+    }
+
+    public static string ExportToScheme(this Subtraction subtraction) {
+      return "-";
+    }
+
+    public static string ExportToScheme(this Tangens tangens) {
+      return "tan";
+    }
+
+    public static string ExportToScheme(this Variable variable, IFunctionTree tree) {
+      return "(variable " + tree.GetLocalVariable(Variable.WEIGHT).Value + " " +
+        tree.GetLocalVariable(Variable.INDEX).Value + " " + tree.GetLocalVariable(Variable.OFFSET).Value + ")";
+    }
+    public static string ExportToScheme(this Differential differential, IFunctionTree tree) {
+      return "(differential " + tree.GetLocalVariable(Differential.WEIGHT).Value + " " +
+        tree.GetLocalVariable(Differential.INDEX).Value + " " + tree.GetLocalVariable(Differential.OFFSET).Value + ")";
+    }
+
+    public static string ExportToScheme(this And and) {
+      return "and";
+    }
+
+    public static string ExportToScheme(this Average average) {
+      return "mean";
+    }
+
+    public static string ExportToScheme(this IfThenElse ifThenElse) {
+      return "if";
+    }
+
+    public static string ExportToScheme(this Not not) {
+      return "not";
+    }
+
+    public static string ExportToScheme(this Or or) {
+      return "or";
+    }
+
+    public static string ExportToScheme(this Xor xor) {
+      return "xor";
+    }
+
+    public static string ExportToScheme(this Equal equal) {
+      return "equ";
+    }
+
+    public static string ExportToScheme(this LessThan lessThan) {
+      return "<";
+    }
+
+    public static string ExportToScheme(this GreaterThan greaterThan) {
+      return ">";
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Tangens.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Tangens.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Tangens.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Tangens : FunctionBase {
+    public override string Description {
+      get { return "Returns the tangens of the first sub-tree."; }
+    }
+
+    public Tangens()
+      : base() {
+      // must have exactly one suboperator
+      AddConstraint(new NumberOfSubOperatorsConstraint(1, 1));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Variable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Variable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Variable.cs	(revision 1270)
@@ -0,0 +1,210 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+using HeuristicLab.Random;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public class Variable : FunctionBase {
+
+    public const string WEIGHT = "Weight";
+    public const string OFFSET = "SampleOffset";
+    public const string INDEX = "Variable";
+
+    private int minIndex;
+    private int maxIndex;
+    private int minOffset;
+    private int maxOffset;
+
+    public override string Description {
+      get {
+        return @"Variable reads a value from a dataset, multiplies that value with a given factor and returns the result.
+The variable 'SampleOffset' can be used to read a value from previous or following rows.
+The index of the row that is actually read is SampleIndex+SampleOffset).";
+      }
+    }
+
+    public Variable()
+      : base() {
+      AddVariableInfo(new VariableInfo(INDEX, "Index of the variable in the dataset representing this feature", typeof(ConstrainedIntData), VariableKind.None));
+      GetVariableInfo(INDEX).Local = true;
+      AddVariableInfo(new VariableInfo(WEIGHT, "Weight is multiplied to the feature value", typeof(ConstrainedDoubleData), VariableKind.None));
+      GetVariableInfo(WEIGHT).Local = true;
+      AddVariableInfo(new VariableInfo(OFFSET, "SampleOffset is added to the sample index", typeof(ConstrainedIntData), VariableKind.None));
+      GetVariableInfo(OFFSET).Local = true;
+      AddVariableInfo(new VariableInfo(INITIALIZATION, "Initialization operator for variables", typeof(CombinedOperator), VariableKind.None));
+      GetVariableInfo(INITIALIZATION).Local = false;
+      AddVariableInfo(new VariableInfo(MANIPULATION, "Manipulation operator for variables", typeof(CombinedOperator), VariableKind.None));
+      GetVariableInfo(MANIPULATION).Local = false;
+
+      ConstrainedDoubleData weight = new ConstrainedDoubleData();
+      // initialize a totally arbitrary range for the weight = [-20.0, 20.0]
+      weight.AddConstraint(new DoubleBoundedConstraint(-20.0, 20.0));
+      AddVariable(new HeuristicLab.Core.Variable(WEIGHT, weight));
+
+      ConstrainedIntData variable = new ConstrainedIntData();
+      AddVariable(new HeuristicLab.Core.Variable(INDEX, variable));
+      minIndex = 0; maxIndex = 100;
+
+      ConstrainedIntData sampleOffset = new ConstrainedIntData();
+      AddVariable(new HeuristicLab.Core.Variable(OFFSET, sampleOffset));
+
+      SetupInitialization();
+      SetupManipulation();
+
+      // variable can't have suboperators
+      AddConstraint(new NumberOfSubOperatorsConstraint(0, 0));
+    }
+
+    private void SetupInitialization() {
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      UniformRandomizer indexRandomizer = new UniformRandomizer();
+      indexRandomizer.Min = minIndex;
+      indexRandomizer.Max = maxIndex + 1; // uniform randomizer generates numbers in the range [min, max[
+      indexRandomizer.GetVariableInfo("Value").ActualName = INDEX;
+      indexRandomizer.Name = "Index Randomizer";
+      NormalRandomizer weightRandomizer = new NormalRandomizer();
+      weightRandomizer.Mu = 1.0;
+      weightRandomizer.Sigma = 1.0;
+      weightRandomizer.GetVariableInfo("Value").ActualName = WEIGHT;
+      weightRandomizer.Name = "Weight Randomizer";
+      UniformRandomizer offsetRandomizer = new UniformRandomizer();
+      offsetRandomizer.Min = minOffset;
+      offsetRandomizer.Max = maxOffset + 1;
+      offsetRandomizer.GetVariableInfo("Value").ActualName = OFFSET;
+      offsetRandomizer.Name = "Offset Randomizer";
+
+      combinedOp.OperatorGraph.AddOperator(seq);
+      combinedOp.OperatorGraph.AddOperator(indexRandomizer);
+      combinedOp.OperatorGraph.AddOperator(weightRandomizer);
+      combinedOp.OperatorGraph.AddOperator(offsetRandomizer);
+      combinedOp.OperatorGraph.InitialOperator = seq;
+      seq.AddSubOperator(indexRandomizer);
+      seq.AddSubOperator(weightRandomizer);
+      seq.AddSubOperator(offsetRandomizer);
+      HeuristicLab.Core.IVariable initOp = GetVariable(INITIALIZATION);
+      if(initOp == null) {
+        AddVariable(new HeuristicLab.Core.Variable(INITIALIZATION, combinedOp));
+      } else {
+        initOp.Value = combinedOp;
+      }
+    }
+
+    private void SetupManipulation() {
+      // manipulation operator
+      CombinedOperator combinedOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+      UniformRandomizer indexRandomizer = new UniformRandomizer();
+      indexRandomizer.Min = minIndex;
+      indexRandomizer.Max = maxIndex + 1;
+      indexRandomizer.GetVariableInfo("Value").ActualName = INDEX;
+      indexRandomizer.Name = "Index Randomizer";
+      NormalRandomAdder weightRandomAdder = new NormalRandomAdder();
+      weightRandomAdder.Mu = 0.0;
+      weightRandomAdder.Sigma = 0.1;
+      weightRandomAdder.GetVariableInfo("Value").ActualName = WEIGHT;
+      weightRandomAdder.Name = "Weight Adder";
+      NormalRandomAdder offsetRandomAdder = new NormalRandomAdder();
+      offsetRandomAdder.Mu = 0.0;
+      offsetRandomAdder.Sigma = 1.0;
+      offsetRandomAdder.GetVariableInfo("Value").ActualName = OFFSET;
+      offsetRandomAdder.Name = "Offset Adder";
+
+      combinedOp.OperatorGraph.AddOperator(seq);
+      combinedOp.OperatorGraph.AddOperator(indexRandomizer);
+      combinedOp.OperatorGraph.AddOperator(weightRandomAdder);
+      combinedOp.OperatorGraph.AddOperator(offsetRandomAdder);
+      combinedOp.OperatorGraph.InitialOperator = seq;
+      seq.AddSubOperator(indexRandomizer);
+      seq.AddSubOperator(weightRandomAdder);
+      seq.AddSubOperator(offsetRandomAdder);
+      HeuristicLab.Core.IVariable manipulationOp = GetVariable(MANIPULATION);
+      if(manipulationOp == null) {
+        AddVariable(new HeuristicLab.Core.Variable(MANIPULATION, combinedOp));
+      } else {
+        manipulationOp.Value = combinedOp;
+      }
+    }
+
+    public void SetConstraints(int[] allowedIndexes, int minSampleOffset, int maxSampleOffset) {
+      ConstrainedIntData offset = GetVariableValue<ConstrainedIntData>(OFFSET, null, false);
+      IntBoundedConstraint rangeConstraint = new IntBoundedConstraint();
+      this.minOffset = minSampleOffset;
+      this.maxOffset = maxSampleOffset;
+      rangeConstraint.LowerBound = minSampleOffset;
+      rangeConstraint.LowerBoundEnabled = true;
+      rangeConstraint.LowerBoundIncluded = true;
+      rangeConstraint.UpperBound = maxSampleOffset;
+      rangeConstraint.UpperBoundEnabled = true;
+      rangeConstraint.UpperBoundIncluded = true;
+      offset.AddConstraint(rangeConstraint);
+
+      ConstrainedIntData index = GetVariableValue<ConstrainedIntData>(INDEX, null, false);
+      Array.Sort(allowedIndexes);
+      minIndex = allowedIndexes[0]; maxIndex = allowedIndexes[allowedIndexes.Length - 1];
+      List<IConstraint> constraints = new List<IConstraint>();
+      int start = allowedIndexes[0];
+      int prev = start;
+      for(int i = 1; i < allowedIndexes.Length; i++) {
+        if(allowedIndexes[i] != prev + 1) {
+          IntBoundedConstraint lastRange = new IntBoundedConstraint();
+          lastRange.LowerBound = start;
+          lastRange.LowerBoundEnabled = true;
+          lastRange.LowerBoundIncluded = true;
+          lastRange.UpperBound = prev;
+          lastRange.UpperBoundEnabled = true;
+          lastRange.UpperBoundIncluded = true;
+          constraints.Add(lastRange);
+          start = allowedIndexes[i];
+          prev = start;
+        }
+        prev = allowedIndexes[i];
+      }
+      IntBoundedConstraint range = new IntBoundedConstraint();
+      range.LowerBound = start;
+      range.LowerBoundEnabled = true;
+      range.LowerBoundIncluded = true;
+      range.UpperBound = prev;
+      range.UpperBoundEnabled = true;
+      range.UpperBoundIncluded = true;
+      constraints.Add(range);
+      if(constraints.Count > 1) {
+        OrConstraint or = new OrConstraint();
+        foreach(IConstraint c in constraints) or.Clauses.Add(c);
+        index.AddConstraint(or);
+      } else {
+        index.AddConstraint(constraints[0]);
+      }
+
+      SetupInitialization();
+      SetupManipulation();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Xor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Xor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP.StructureIdentification/Xor.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Constraints;
+using HeuristicLab.DataAnalysis;
+
+namespace HeuristicLab.GP.StructureIdentification {
+  public sealed class Xor : FunctionBase {
+    public override string Description {
+      get {
+        return @"Logical XOR operation. Only defined for sub-tree-results 0.0 and 1.0.";
+      }
+    }
+
+    public Xor()
+      : base() {
+      AddConstraint(new NumberOfSubOperatorsConstraint(2, 2));
+      AddConstraint(new SubOperatorTypeConstraint(0));
+      AddConstraint(new SubOperatorTypeConstraint(1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/BakedFunctionTree.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/BakedFunctionTree.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/BakedFunctionTree.cs	(revision 1270)
@@ -0,0 +1,347 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Xml;
+using System.Globalization;
+
+namespace HeuristicLab.GP {
+
+  public class LightWeightFunction {
+    public byte arity = 0;
+    public IFunction functionType;
+    public List<double> data = new List<double>();
+
+    public LightWeightFunction Clone() {
+      LightWeightFunction clone = new LightWeightFunction();
+      clone.arity = arity;
+      clone.functionType = functionType;
+      clone.data.AddRange(data);
+      return clone;
+    }
+  }
+
+  public class BakedFunctionTree : ItemBase, IFunctionTree {
+    private List<LightWeightFunction> linearRepresentation;
+    public List<LightWeightFunction> LinearRepresentation {
+      get {
+        FlattenVariables();
+        FlattenTrees(); 
+        return linearRepresentation;
+      }
+    }
+    private bool treesExpanded = false;
+    private List<IFunctionTree> subTrees;
+    private bool variablesExpanded = false;
+    private List<IVariable> variables;
+
+    public BakedFunctionTree() {
+      linearRepresentation = new List<LightWeightFunction>();
+    }
+
+    internal BakedFunctionTree(IFunction function)
+      : this() {
+      LightWeightFunction fun = new LightWeightFunction();
+      fun.functionType = function;
+      linearRepresentation.Add(fun);
+      treesExpanded = true;
+      subTrees = new List<IFunctionTree>();
+      variables = new List<IVariable>();
+      variablesExpanded = true;
+      foreach(IVariableInfo variableInfo in function.VariableInfos) {
+        if(variableInfo.Local) {
+          variables.Add((IVariable)function.GetVariable(variableInfo.FormalName).Clone());
+        }
+      }
+    }
+
+    internal BakedFunctionTree(IFunctionTree tree)
+      : this() {
+      LightWeightFunction fun = new LightWeightFunction();
+      fun.functionType = tree.Function;
+      linearRepresentation.Add(fun);
+      foreach(IVariable variable in tree.LocalVariables) {
+        IItem value = variable.Value;
+        fun.data.Add(GetDoubleValue(value));
+      }
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        AddSubTree(new BakedFunctionTree(subTree));
+      }
+    }
+
+    private double GetDoubleValue(IItem value) {
+      if(value is DoubleData) {
+        return ((DoubleData)value).Data;
+      } else if(value is ConstrainedDoubleData) {
+        return ((ConstrainedDoubleData)value).Data;
+      } else if(value is IntData) {
+        return ((IntData)value).Data;
+      } else if(value is ConstrainedIntData) {
+        return ((ConstrainedIntData)value).Data;
+      } else throw new NotSupportedException("Invalid datatype of local variable for GP");
+    }
+
+    private int BranchLength(int branchRoot) {
+      int arity = linearRepresentation[branchRoot].arity;
+      int length = 1;
+      for(int i = 0; i < arity; i++) {
+        length += BranchLength(branchRoot + length);
+      }
+      return length;
+    }
+
+    private void FlattenTrees() {
+      if(treesExpanded) {
+        linearRepresentation[0].arity = (byte)subTrees.Count;
+        foreach(BakedFunctionTree subTree in subTrees) {
+          subTree.FlattenVariables();
+          subTree.FlattenTrees();
+          linearRepresentation.AddRange(subTree.linearRepresentation);
+        }
+        treesExpanded = false;
+        subTrees = null;
+      }
+    }
+
+    private void FlattenVariables() {
+      if(variablesExpanded) {
+        linearRepresentation[0].data.Clear();
+        foreach(IVariable variable in variables) {
+          linearRepresentation[0].data.Add(GetDoubleValue(variable.Value));
+        }
+        variablesExpanded = false;
+        variables = null;
+      }
+    }
+
+    public int Size {
+      get {
+        if(treesExpanded) {
+          int size = 1;
+          foreach(BakedFunctionTree tree in subTrees) {
+            size += tree.Size;
+          }
+          return size;
+        } else 
+        return linearRepresentation.Count;
+      }
+    }
+
+    public int Height {
+      get {
+        if(treesExpanded) {
+          int height = 0;
+          foreach(IFunctionTree subTree in subTrees) {
+            int curHeight = subTree.Height;
+            if(curHeight > height) height = curHeight;
+          }
+          return height+1;
+        } else {
+          int nextBranchStart;
+          return BranchHeight(0, out nextBranchStart);
+        }
+      }
+    }
+
+    private int BranchHeight(int branchStart, out int nextBranchStart) {
+      LightWeightFunction f = linearRepresentation[branchStart];
+      int height = 0;
+      branchStart++;
+      for(int i = 0; i < f.arity; i++) {
+        int curHeight = BranchHeight(branchStart, out nextBranchStart);
+        if(curHeight > height) height = curHeight;
+        branchStart = nextBranchStart;
+      }
+      nextBranchStart = branchStart;
+      return height + 1;
+    }
+
+    public IList<IFunctionTree> SubTrees {
+      get {
+        if(!treesExpanded) {
+          subTrees = new List<IFunctionTree>();
+          int arity = linearRepresentation[0].arity;
+          int branchIndex = 1;
+          for(int i = 0; i < arity; i++) {
+            BakedFunctionTree subTree = new BakedFunctionTree();
+            int length = BranchLength(branchIndex);
+            for(int j = branchIndex; j < branchIndex + length; j++) {
+              subTree.linearRepresentation.Add(linearRepresentation[j]);
+            }
+            branchIndex += length;
+            subTrees.Add(subTree);
+          }
+          treesExpanded = true;
+          linearRepresentation.RemoveRange(1, linearRepresentation.Count - 1);
+          linearRepresentation[0].arity = 0;
+        }
+        return subTrees;
+      }
+    }
+
+    public ICollection<IVariable> LocalVariables {
+      get {
+        if(!variablesExpanded) {
+          variables = new List<IVariable>();
+          IFunction function = Function;
+          int localVariableIndex = 0;
+          foreach(IVariableInfo variableInfo in function.VariableInfos) {
+            if(variableInfo.Local) {
+              IVariable clone = (IVariable)function.GetVariable(variableInfo.FormalName).Clone();
+              IItem value = clone.Value;
+              if(value is ConstrainedDoubleData) {
+                ((ConstrainedDoubleData)value).Data = linearRepresentation[0].data[localVariableIndex];
+              } else if(value is ConstrainedIntData) {
+                ((ConstrainedIntData)value).Data = (int)linearRepresentation[0].data[localVariableIndex];
+              } else if(value is DoubleData) {
+                ((DoubleData)value).Data = linearRepresentation[0].data[localVariableIndex];
+              } else if(value is IntData) {
+                ((IntData)value).Data = (int)linearRepresentation[0].data[localVariableIndex];
+              } else throw new NotSupportedException("Invalid local variable type for GP.");
+              variables.Add(clone);
+              localVariableIndex++;
+            }
+          }
+          variablesExpanded = true;
+          linearRepresentation[0].data.Clear();
+        }
+        return variables;
+      }
+    }
+
+    public IFunction Function {
+      get { return linearRepresentation[0].functionType; }
+    }
+
+    public IVariable GetLocalVariable(string name) {
+      foreach(IVariable var in LocalVariables) {
+        if(var.Name == name) return var;
+      }
+      return null;
+    }
+
+    public void AddVariable(IVariable variable) {
+      throw new NotSupportedException();
+    }
+
+    public void RemoveVariable(string name) {
+      throw new NotSupportedException();
+    }
+
+    public void AddSubTree(IFunctionTree tree) {
+      if(!treesExpanded) throw new InvalidOperationException();
+      subTrees.Add(tree);
+    }
+
+    public void InsertSubTree(int index, IFunctionTree tree) {
+      if(!treesExpanded) throw new InvalidOperationException();
+      subTrees.Insert(index, tree);
+    }
+
+    public void RemoveSubTree(int index) {
+      // sanity check
+      if(!treesExpanded) throw new InvalidOperationException();
+      subTrees.RemoveAt(index);
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      FlattenVariables();
+      FlattenTrees();
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode linearRepresentationNode = document.CreateElement("LinearRepresentation");
+      foreach(LightWeightFunction f in linearRepresentation) {
+        XmlNode entryNode = PersistenceManager.Persist("FunctionType", f.functionType, document, persistedObjects);
+        XmlAttribute arityAttribute = document.CreateAttribute("Arity");
+        arityAttribute.Value = f.arity+"";
+        entryNode.Attributes.Append(arityAttribute);
+        if(f.data.Count > 0) {
+          XmlAttribute dataAttribute = document.CreateAttribute("Data");
+          dataAttribute.Value = GetString(f.data);
+          entryNode.Attributes.Append(dataAttribute);
+        }
+        linearRepresentationNode.AppendChild(entryNode);
+      }
+
+      node.AppendChild(linearRepresentationNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode linearRepresentationNode = node.SelectSingleNode("LinearRepresentation");
+      foreach(XmlNode entryNode in linearRepresentationNode.ChildNodes) {
+        LightWeightFunction f = new LightWeightFunction();
+        f.arity = byte.Parse(entryNode.Attributes["Arity"].Value, CultureInfo.InvariantCulture);
+        if(entryNode.Attributes["Data"]!=null) 
+          f.data = GetList<double>(entryNode.Attributes["Data"].Value, s => double.Parse(s, CultureInfo.InvariantCulture));
+        f.functionType = (IFunction)PersistenceManager.Restore(entryNode, restoredObjects);
+        linearRepresentation.Add(f);
+      }
+      treesExpanded = false;
+      variablesExpanded = false;
+    }
+
+    private string GetString(IEnumerable<double> xs) {
+      StringBuilder builder = new StringBuilder();
+      foreach(double x in xs) {
+        builder.Append(x.ToString("r", CultureInfo.InvariantCulture) + "; ");
+      }
+      if(builder.Length > 0) builder.Remove(builder.Length - 2, 2);
+      return builder.ToString();
+    }
+
+    private List<T> GetList<T>(string s, Converter<string, T> converter) {
+      List<T> result = new List<T>();
+      string[] tokens = s.Split(new char[] { ';', ' ' }, StringSplitOptions.RemoveEmptyEntries);
+      foreach(string token in tokens) {
+        T x = converter(token.Trim());
+        result.Add(x);
+      }
+      return result;
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      BakedFunctionTree clone = new BakedFunctionTree();
+      // in case the user (de)serialized the tree between evaluation and selection we have to flatten the tree again.
+      if(treesExpanded) FlattenTrees();
+      if(variablesExpanded) FlattenVariables();
+      foreach(LightWeightFunction f in linearRepresentation) {
+        clone.linearRepresentation.Add(f.Clone());
+      }
+      return clone;
+    }
+
+    public override IView CreateView() {
+      return new FunctionTreeView(this);
+    }
+
+    //public override string ToString() {
+    //  SymbolicExpressionExporter exporter = new SymbolicExpressionExporter();
+    //  exporter.Visit(this);
+    //  return exporter.GetStringRepresentation();
+    //}
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/DefaultFunctionTreeNameGenerator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/DefaultFunctionTreeNameGenerator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/DefaultFunctionTreeNameGenerator.cs	(revision 1270)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP {
+  public class DefaultFunctionTreeNameGenerator : IFunctionTreeNameGenerator {
+    #region IFunctionTreeNameGenerator Members
+    string IFunctionTreeNameGenerator.Name {
+      get { return "Default Representation"; }
+    }
+
+    string IFunctionTreeNameGenerator.GetName(IFunctionTree tree) {
+      return tree.Function.Name;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/EqualiserController.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/EqualiserController.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/EqualiserController.cs	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP {
+  public class EqualiserController : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public EqualiserController() {
+      AddVariableInfo(new VariableInfo("EqualiserHistogram", "Histogram of the target distribution", typeof(DoubleArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("AcceptanceProbabilities", "Acceptance probabilities of individuals falling into bins", typeof(DoubleArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Histogram", "The histogram of the actual distribution", typeof(IntArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Rate", "Parameter that controls the convergence rate of the population to the equalised distribution", typeof(DoubleData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      DoubleArrayData equaliserHistogram = GetVariableValue<DoubleArrayData>("EqualiserHistogram", scope, true);
+      DoubleArrayData acceptanceProbabilities = GetVariableValue<DoubleArrayData>("AcceptanceProbabilities", scope, false, false);
+      IntArrayData currentHistogram = GetVariableValue<IntArrayData>("Histogram", scope, false, false);
+      double rate = GetVariableValue<DoubleData>("Rate", scope, false, false).Data;
+
+      double sum = 0.0;
+      Array.ForEach(currentHistogram.Data, delegate(int i) { sum += i; });
+      for(int i = 0; i < acceptanceProbabilities.Data.Length; i++) {
+        double normalizedDiff = (equaliserHistogram.Data[i] - (currentHistogram.Data[i] / sum)) / equaliserHistogram.Data[i];
+        acceptanceProbabilities.Data[i] = acceptanceProbabilities.Data[i] + normalizedDiff * rate;
+        currentHistogram.Data[i] = 0;
+      }
+      currentHistogram.FireChanged();
+      acceptanceProbabilities.FireChanged();
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionBase.cs	(revision 1270)
@@ -0,0 +1,157 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+using System.Xml;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  /// <summary>
+  /// Functions are like operators except that they do not allow sub-operators and the normal form of evaluation
+  /// is to evaluate all children first.
+  /// </summary>
+  public abstract class FunctionBase : OperatorBase, IFunction {
+    public const string INITIALIZATION = "Initialization";
+    public const string MANIPULATION = "Manipulation";
+    private List<IFunction>[] allowedSubFunctions;
+    private int minArity = -1;
+    private int maxArity = -1;
+
+    public virtual double Apply() {
+      throw new NotImplementedException();
+    }
+
+    public virtual IFunctionTree GetTreeNode() {
+      return new BakedFunctionTree(this);
+    }
+
+    public int MinArity {
+      get {
+        if(minArity < 0) RefreshArity();
+        return minArity;
+      }
+    }
+
+    public int MaxArity {
+      get {
+        if(maxArity < 0) RefreshArity();
+        return maxArity;
+      }
+    }
+
+    private void RefreshArity() {
+      minArity = 2; maxArity = 2; // default arity is 2
+      foreach(IConstraint constraint in Constraints) {
+        NumberOfSubOperatorsConstraint theConstraint = constraint as NumberOfSubOperatorsConstraint;
+        if(theConstraint != null) {
+          minArity = theConstraint.MinOperators.Data;
+          maxArity = theConstraint.MaxOperators.Data;
+        }
+      }
+    }
+
+    public IList<IFunction> AllowedSubFunctions(int index) {
+      if(allowedSubFunctions == null) {
+        // first time: analyze the constraint and create a cached copy of the allowed sub-functions
+        allowedSubFunctions = new List<IFunction>[MaxArity];
+        for(int i = 0; i < MaxArity; i++) {
+          allowedSubFunctions[i] = GetAllowedSubFunctions(i);
+        }
+      }
+      return allowedSubFunctions[index];
+    }
+
+    private List<IFunction> GetAllowedSubFunctions(int index) {
+      List<IFunction> allowedSubFunctions = new List<IFunction>();
+      foreach(IConstraint constraint in Constraints) {
+        if(constraint is SubOperatorTypeConstraint) {
+          SubOperatorTypeConstraint subOpConstraint = constraint as SubOperatorTypeConstraint;
+          if(subOpConstraint.SubOperatorIndex.Data == index) {
+            foreach(IFunction f in subOpConstraint.AllowedSubOperators) allowedSubFunctions.Add(f);
+            subOpConstraint.Changed += new EventHandler(subOpConstraint_Changed); // register an event-handler to invalidate the cache on constraing changes
+            return allowedSubFunctions;
+          }
+        } else if(constraint is AllSubOperatorsTypeConstraint) {
+          AllSubOperatorsTypeConstraint subOpConstraint = constraint as AllSubOperatorsTypeConstraint;
+          foreach(IFunction f in subOpConstraint.AllowedSubOperators) allowedSubFunctions.Add(f);
+          subOpConstraint.Changed += new EventHandler(subOpConstraint_Changed); // register an event-handler to invalidate the cache on constraint changes
+          return allowedSubFunctions;
+        }
+      }
+      return allowedSubFunctions;
+    }
+
+    private void subOpConstraint_Changed(object sender, EventArgs e) {
+      allowedSubFunctions = null;
+    }
+
+    // operator-tree style evaluation is not supported for functions.
+    public override IOperation Apply(IScope scope) {
+      throw new NotSupportedException();
+    }
+
+    private static readonly List<IOperator> emptySubOperatorList = new List<IOperator>();
+    public override IList<IOperator> SubOperators {
+      get { return emptySubOperatorList; }
+    }
+
+    public override void AddSubOperator(IOperator subOperator) {
+      throw new NotSupportedException();
+    }
+
+    public override bool TryAddSubOperator(IOperator subOperator) {
+      throw new NotSupportedException();
+    }
+
+    public override bool TryAddSubOperator(IOperator subOperator, int index) {
+      throw new NotSupportedException();
+    }
+
+    public override bool TryAddSubOperator(IOperator subOperator, int index, out ICollection<IConstraint> violatedConstraints) {
+      throw new NotSupportedException();
+    }
+
+    public override bool TryAddSubOperator(IOperator subOperator, out ICollection<IConstraint> violatedConstraints) {
+      throw new NotSupportedException();
+    }
+
+    public override void AddSubOperator(IOperator subOperator, int index) {
+      throw new NotSupportedException();
+    }
+
+    public override void RemoveSubOperator(int index) {
+      throw new NotSupportedException();
+    }
+
+    public override bool TryRemoveSubOperator(int index) {
+      throw new NotSupportedException();
+    }
+
+    public override bool TryRemoveSubOperator(int index, out ICollection<IConstraint> violatedConstraints) {
+      throw new NotSupportedException();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.Designer.cs	(revision 1270)
@@ -0,0 +1,198 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+namespace HeuristicLab.GP {
+  partial class FunctionTreeView {
+    /// <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();
+      }
+      if(selectedVariable != null) {
+        selectedVariable.Value.Changed -= new EventHandler(selectedVariable_ValueChanged);
+      }
+      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.funTreeView = new System.Windows.Forms.TreeView();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.variablesGroupBox = new System.Windows.Forms.GroupBox();
+      this.variablesSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.variablesListBox = new System.Windows.Forms.ListBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.templateTextBox = new System.Windows.Forms.TextBox();
+      this.editButton = new System.Windows.Forms.Button();
+      this.treeNodeContextMenu = new System.Windows.Forms.ContextMenu();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.variablesGroupBox.SuspendLayout();
+      this.variablesSplitContainer.Panel1.SuspendLayout();
+      this.variablesSplitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // funTreeView
+      // 
+      this.funTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.funTreeView.HideSelection = false;
+      this.funTreeView.Location = new System.Drawing.Point(0, 0);
+      this.funTreeView.Name = "funTreeView";
+      this.funTreeView.Size = new System.Drawing.Size(182, 532);
+      this.funTreeView.TabIndex = 0;
+      this.funTreeView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.funTreeView_MouseUp);
+      this.funTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.functionTreeView_AfterSelect);
+      // 
+      // splitContainer
+      // 
+      this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer.Name = "splitContainer";
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.funTreeView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.variablesGroupBox);
+      this.splitContainer.Panel2.Controls.Add(this.label1);
+      this.splitContainer.Panel2.Controls.Add(this.templateTextBox);
+      this.splitContainer.Panel2.Controls.Add(this.editButton);
+      this.splitContainer.Size = new System.Drawing.Size(735, 532);
+      this.splitContainer.SplitterDistance = 182;
+      this.splitContainer.TabIndex = 1;
+      // 
+      // variablesGroupBox
+      // 
+      this.variablesGroupBox.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.variablesGroupBox.Controls.Add(this.variablesSplitContainer);
+      this.variablesGroupBox.Location = new System.Drawing.Point(3, 31);
+      this.variablesGroupBox.Name = "variablesGroupBox";
+      this.variablesGroupBox.Size = new System.Drawing.Size(543, 498);
+      this.variablesGroupBox.TabIndex = 5;
+      this.variablesGroupBox.TabStop = false;
+      this.variablesGroupBox.Text = "Local variables";
+      // 
+      // variablesSplitContainer
+      // 
+      this.variablesSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesSplitContainer.Location = new System.Drawing.Point(3, 16);
+      this.variablesSplitContainer.Name = "variablesSplitContainer";
+      // 
+      // variablesSplitContainer.Panel1
+      // 
+      this.variablesSplitContainer.Panel1.Controls.Add(this.variablesListBox);
+      this.variablesSplitContainer.Size = new System.Drawing.Size(537, 479);
+      this.variablesSplitContainer.SplitterDistance = 179;
+      this.variablesSplitContainer.TabIndex = 0;
+      // 
+      // variablesListBox
+      // 
+      this.variablesListBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.variablesListBox.FormattingEnabled = true;
+      this.variablesListBox.Location = new System.Drawing.Point(0, 0);
+      this.variablesListBox.Name = "variablesListBox";
+      this.variablesListBox.Size = new System.Drawing.Size(179, 472);
+      this.variablesListBox.TabIndex = 0;
+      this.variablesListBox.SelectedIndexChanged += new System.EventHandler(this.variablesListBox_SelectedIndexChanged);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(3, 10);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(96, 13);
+      this.label1.TabIndex = 3;
+      this.label1.Text = "Function definition:";
+      // 
+      // templateTextBox
+      // 
+      this.templateTextBox.Location = new System.Drawing.Point(105, 7);
+      this.templateTextBox.Name = "templateTextBox";
+      this.templateTextBox.ReadOnly = true;
+      this.templateTextBox.Size = new System.Drawing.Size(190, 20);
+      this.templateTextBox.TabIndex = 2;
+      // 
+      // editButton
+      // 
+      this.editButton.Enabled = false;
+      this.editButton.Location = new System.Drawing.Point(301, 5);
+      this.editButton.Name = "editButton";
+      this.editButton.Size = new System.Drawing.Size(49, 23);
+      this.editButton.TabIndex = 1;
+      this.editButton.Text = "Edit...";
+      this.editButton.UseVisualStyleBackColor = true;
+      this.editButton.Click += new System.EventHandler(this.editButton_Click);
+      // 
+      // treeNodeContextMenu
+      // 
+      this.treeNodeContextMenu.Name = "treeNodeContextMenu";
+      // 
+      // FunctionTreeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer);
+      this.Name = "FunctionTreeView";
+      this.Size = new System.Drawing.Size(735, 532);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.Panel2.PerformLayout();
+      this.splitContainer.ResumeLayout(false);
+      this.variablesGroupBox.ResumeLayout(false);
+      this.variablesSplitContainer.Panel1.ResumeLayout(false);
+      this.variablesSplitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TreeView funTreeView;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.TextBox templateTextBox;
+    private System.Windows.Forms.Button editButton;
+    private System.Windows.Forms.GroupBox variablesGroupBox;
+    private System.Windows.Forms.SplitContainer variablesSplitContainer;
+    private System.Windows.Forms.ListBox variablesListBox;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.ContextMenu treeNodeContextMenu;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.cs	(revision 1270)
@@ -0,0 +1,188 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.GP {
+  public partial class FunctionTreeView : ViewBase {
+    private IFunctionTree functionTree;
+
+    private IFunctionTree selectedBranch;
+    private IVariable selectedVariable;
+    private IFunctionTreeNameGenerator nameGenerator;
+    private IFunctionTreeNameGenerator[] allNameGenerators;
+    private MenuItem representationsMenu;
+
+    public FunctionTreeView() {
+      nameGenerator = new DefaultFunctionTreeNameGenerator();
+      InitializeComponent();
+
+      DiscoveryService discoveryService = new DiscoveryService();
+      allNameGenerators = discoveryService.GetInstances<IFunctionTreeNameGenerator>();
+      representationsMenu = new MenuItem();
+      representationsMenu.Text = "Tree representation";
+      representationsMenu.Name = "Tree representation";
+      foreach (IFunctionTreeNameGenerator generator in allNameGenerators) {
+        MenuItem mi = new MenuItem(generator.Name, MakeNameGeneratorDelegate(generator), Shortcut.None);
+        if (generator is DefaultFunctionTreeNameGenerator) mi.Checked = true;
+        else mi.Checked = false;
+        mi.Tag = generator;
+        representationsMenu.MenuItems.Add(mi);
+      }
+    }
+
+    public FunctionTreeView(IFunctionTree functionTree)
+      : this() {
+      this.functionTree = functionTree;
+      Refresh();
+    }
+
+    protected override void UpdateControls() {
+      funTreeView.Nodes.Clear();
+      TreeNode rootNode = new TreeNode();
+      rootNode.Name = functionTree.Function.Name;
+      rootNode.Text = nameGenerator.GetName(functionTree);
+      rootNode.Tag = functionTree;
+      treeNodeContextMenu.MenuItems.Clear();
+      treeNodeContextMenu.MenuItems.Add(representationsMenu);
+      DiscoveryService discoveryService = new DiscoveryService();
+      IFunctionTreeExporter[] exporters = discoveryService.GetInstances<IFunctionTreeExporter>();
+      foreach (IFunctionTreeExporter exporter in exporters) {
+        string result;
+        // register a menu item for the exporter
+        MenuItem item = new MenuItem("Copy to clip-board (" + exporter.Name + ")",
+          MakeExporterDelegate(exporter), Shortcut.None);
+        // try to export the whole tree 
+        if (exporter.TryExport(functionTree, out result)) {
+          // if it worked enable the context-menu item
+          item.Enabled = true;
+        } else {
+          item.Enabled = false;
+        }
+        treeNodeContextMenu.MenuItems.Add(item);
+      }
+      rootNode.ContextMenu = treeNodeContextMenu;
+      funTreeView.Nodes.Add(rootNode);
+
+      foreach (IFunctionTree subTree in functionTree.SubTrees) {
+        CreateTree(rootNode, subTree);
+      }
+      funTreeView.ExpandAll();
+    }
+
+    private EventHandler MakeNameGeneratorDelegate(IFunctionTreeNameGenerator generator) {
+      return delegate(object source, EventArgs args) {
+        IFunctionTreeNameGenerator g = (IFunctionTreeNameGenerator)((MenuItem)source).Tag;
+        this.nameGenerator = g;
+        foreach (MenuItem otherMenuItem in representationsMenu.MenuItems) otherMenuItem.Checked = false;
+        ((MenuItem)source).Checked = true;
+        UpdateControls();
+      };
+    }
+
+    private EventHandler MakeExporterDelegate(IFunctionTreeExporter exporter) {
+      return delegate(object source, EventArgs args) {
+        TreeNode node = funTreeView.SelectedNode;
+        if (node == null || node.Tag == null) return;
+        Clipboard.SetText(exporter.Export((IFunctionTree)node.Tag));
+      };
+    }
+
+    private void CreateTree(TreeNode rootNode, IFunctionTree functionTree) {
+      TreeNode node = new TreeNode();
+      node.Name = functionTree.Function.Name;
+      node.Text = nameGenerator.GetName(functionTree);
+      node.Tag = functionTree;
+      node.ContextMenu = treeNodeContextMenu;
+      rootNode.Nodes.Add(node);
+      foreach (IFunctionTree subTree in functionTree.SubTrees) {
+        CreateTree(node, subTree);
+      }
+    }
+
+    private void functionTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      variablesListBox.Items.Clear();
+      variablesSplitContainer.Panel2.Controls.Clear();
+      templateTextBox.Clear();
+      editButton.Enabled = false;
+      if (funTreeView.SelectedNode != null && funTreeView.SelectedNode.Tag != null) {
+        IFunctionTree selectedBranch = (IFunctionTree)funTreeView.SelectedNode.Tag;
+        UpdateVariablesList(selectedBranch);
+        templateTextBox.Text = nameGenerator.GetName(selectedBranch);
+        this.selectedBranch = selectedBranch;
+        editButton.Enabled = true;
+      }
+    }
+
+    private void UpdateVariablesList(IFunctionTree functionTree) {
+      foreach (IVariable variable in functionTree.LocalVariables) {
+        variablesListBox.Items.Add(variable.Name);
+      }
+    }
+
+    private void variablesListBox_SelectedIndexChanged(object sender, EventArgs e) {
+      // in case we had an event-handler registered for a different variable => unregister the event-handler
+      if (selectedVariable != null) {
+        selectedVariable.Value.Changed -= new EventHandler(selectedVariable_ValueChanged);
+      }
+      if (variablesListBox.SelectedItem != null) {
+        string selectedVariableName = (string)variablesListBox.SelectedItem;
+        selectedVariable = selectedBranch.GetLocalVariable(selectedVariableName);
+        variablesSplitContainer.Panel2.Controls.Clear();
+        Control editor = (Control)selectedVariable.CreateView();
+        variablesSplitContainer.Panel2.Controls.Add(editor);
+        editor.Dock = DockStyle.Fill;
+        // register an event handler that updates the treenode when the value of the variable is changed by the user
+        selectedVariable.Value.Changed += new EventHandler(selectedVariable_ValueChanged);
+      } else {
+        variablesSplitContainer.Panel2.Controls.Clear();
+      }
+    }
+
+    void selectedVariable_ValueChanged(object sender, EventArgs e) {
+      if (funTreeView.SelectedNode != null && funTreeView.SelectedNode.Tag != null) {
+        TreeNode node = funTreeView.SelectedNode;
+        node.Text = nameGenerator.GetName(functionTree);
+      }
+    }
+
+    protected virtual void editButton_Click(object sender, EventArgs e) {
+      PluginManager.ControlManager.ShowControl(selectedBranch.Function.CreateView());
+    }
+
+    private void funTreeView_MouseUp(object sender, MouseEventArgs e) {
+      if (e.Button == MouseButtons.Right) {
+        // Select the clicked node
+        funTreeView.SelectedNode = funTreeView.GetNodeAt(e.X, e.Y);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/FunctionView.resx	(revision 1270)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="representationContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>180, 17</value>
+  </metadata>
+  <metadata name="treeNodeContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorGroup.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorGroup.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorGroup.cs	(revision 1270)
@@ -0,0 +1,228 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.GP {
+  public class GPOperatorGroup : OperatorGroup {
+    private Dictionary<IOperator, int> minTreeHeight = new Dictionary<IOperator, int>();
+    private Dictionary<IOperator, int> minTreeSize = new Dictionary<IOperator, int>();
+    private SubOperatorsConstraintAnalyser constraintAnalyser = new SubOperatorsConstraintAnalyser();
+
+    public GPOperatorGroup()
+      : base() {
+    }
+
+    public override void AddOperator(IOperator op) {
+      base.AddOperator(op);
+      var localVariableInfos = op.VariableInfos.Where(f => f.Local);
+
+      if(op.GetVariable(GPOperatorLibrary.MIN_TREE_HEIGHT) == null) {
+        op.AddVariable(new Variable(GPOperatorLibrary.MIN_TREE_HEIGHT, new IntData(-1)));
+      }
+      if(op.GetVariable(GPOperatorLibrary.MIN_TREE_SIZE) == null) {
+        op.AddVariable(new Variable(GPOperatorLibrary.MIN_TREE_SIZE, new IntData(-1)));
+      }
+      if(op.GetVariable(GPOperatorLibrary.TICKETS) == null) {
+        op.AddVariable(new Variable(GPOperatorLibrary.TICKETS, new DoubleData(1.0)));
+      }
+      foreach(IConstraint c in op.Constraints) {
+        if(c is SubOperatorTypeConstraint || c is AllSubOperatorsTypeConstraint) c.Changed += new EventHandler(UpdateTreeBounds);
+      }
+      RecalculateMinimalTreeBounds();
+      OnOperatorAdded(op);
+    }
+
+    void UpdateTreeBounds(object sender, EventArgs e) {
+      RecalculateMinimalTreeBounds();
+    }
+
+    private void RecalculateMinimalTreeBounds() {
+      minTreeHeight.Clear();
+      minTreeSize.Clear();
+      constraintAnalyser.AllPossibleOperators = Operators;
+
+      foreach(IOperator op in Operators) {
+        ((IntData)op.GetVariable(GPOperatorLibrary.MIN_TREE_HEIGHT).Value).Data = RecalculateMinimalTreeHeight(op);
+        ((IntData)op.GetVariable(GPOperatorLibrary.MIN_TREE_SIZE).Value).Data = RecalculateMinimalTreeSize(op);
+      }
+    }
+
+    private int RecalculateMinimalTreeSize(IOperator op) {
+      // check for memoized value
+      if(minTreeSize.ContainsKey(op)) {
+        return minTreeSize[op];
+      }
+
+      int minArity;
+      int maxArity;
+      GetMinMaxArity(op, out minArity, out maxArity);
+      // no suboperators possible => minimalTreeSize == 1 (the current node)
+      if(minArity == 0 && maxArity == 0) {
+        minTreeSize[op] = 1;
+        return 1;
+      }
+
+      // when suboperators are necessary we have to find the smallest possible tree (recursively)
+      // the minimal size of the parent is 1 + the sum of the minimal sizes of all subtrees
+      int subTreeSizeSum = 0;
+
+      // mark the currently processed operator to prevent infinite recursions and stack overflow
+      minTreeSize[op] = 9999;
+      for(int i = 0; i < minArity; i++) {
+        // calculate the minTreeSize of all allowed sub-operators 
+        // if the list of allowed suboperators is empty because the operator needs suboperators 
+        // but there are no valid suboperators defined in the current group then we just use an impossible 
+        // tree size here to indicate that there was a problem.
+        // usually as more operators are added to the group the problem will be corrected (by adding the missing operator).
+        // however if the missing operator is never added the high min tree size here has the effect that this operator
+        // will not be included in generated subtrees because the resulting size would always be higher than a reasonably set 
+        // maximal tree size.
+        int minSubTreeSize = constraintAnalyser.GetAllowedOperators(op, i).Select(subOp => RecalculateMinimalTreeSize(subOp))
+          .Concat(Enumerable.Repeat(9999, 1)).Min();
+        subTreeSizeSum += minSubTreeSize;
+      }
+
+      minTreeSize[op] = subTreeSizeSum + 1;
+      return subTreeSizeSum + 1;
+    }
+
+    private int RecalculateMinimalTreeHeight(IOperator op) {
+      // check for memoized value
+      if(minTreeHeight.ContainsKey(op)) {
+        return minTreeHeight[op];
+      }
+
+      int minArity;
+      int maxArity;
+      GetMinMaxArity(op, out minArity, out maxArity);
+      // no suboperators possible => minimalTreeHeight == 1
+      if(minArity == 0 && maxArity == 0) {
+        minTreeHeight[op] = 1;
+        return 1;
+      }
+
+      // when suboperators are necessary we have to find the smallest possible tree (recursively)
+      // the minimal height of the parent is 1 + the height of the largest subtree
+      int maxSubTreeHeight = 0;
+
+      // mark the currently processed operator to prevent infinite recursions leading to stack overflow
+      minTreeHeight[op] = 9999;
+      for(int i = 0; i < minArity; i++) {
+        // calculate the minTreeHeight of all possible sub-operators.
+        // use the smallest possible subTree as lower bound for the subTreeHeight.
+        // if the list of allowed suboperators is empty because the operator needs suboperators 
+        // but there are no valid suboperators defined in the current group then we use an impossible tree height
+        // to indicate that there was a problem.
+        // usually as more operators are added to the group the problem will be corrected (by adding the missing operator).
+        // however if the missing operator is never added the high min tree height here has the effect that this operator
+        // will not be included in generated subtrees because the resulting (virtual) height would always be higher than a reasonably set 
+        // maximal tree height.
+        int minSubTreeHeight = constraintAnalyser.GetAllowedOperators(op, i).Select(subOp => RecalculateMinimalTreeHeight(subOp))
+          .Concat(Enumerable.Repeat(9999, 1)).Min();
+
+        // if the smallest height of this subtree is larger than all other subtrees before we have to update the min height of the parent
+        if(minSubTreeHeight > maxSubTreeHeight) {
+          maxSubTreeHeight = minSubTreeHeight;
+        }
+      }
+
+      minTreeHeight[op] = maxSubTreeHeight + 1;
+      return maxSubTreeHeight + 1;
+    }
+
+    private void GetMinMaxArity(IOperator op, out int minArity, out int maxArity) {
+      foreach(IConstraint constraint in op.Constraints) {
+        NumberOfSubOperatorsConstraint theConstraint = constraint as NumberOfSubOperatorsConstraint;
+        if(theConstraint != null) {
+          minArity = theConstraint.MinOperators.Data;
+          maxArity = theConstraint.MaxOperators.Data;
+          return;
+        }
+      }
+      // the default arity is 2
+      minArity = 2;
+      maxArity = 2;
+    }
+
+    public override void AddSubGroup(IOperatorGroup group) {
+      throw new NotSupportedException();
+    }
+
+    public override void RemoveOperator(IOperator op) {
+      base.RemoveOperator(op);
+      op.RemoveVariable(GPOperatorLibrary.MIN_TREE_SIZE);
+      op.RemoveVariable(GPOperatorLibrary.MIN_TREE_HEIGHT);
+      op.RemoveVariable(GPOperatorLibrary.TICKETS);
+      foreach(IConstraint c in op.Constraints) {
+        if(c is SubOperatorTypeConstraint || c is AllSubOperatorsTypeConstraint) c.Changed -= new EventHandler(UpdateTreeBounds);
+      }
+
+      // remove the operator from the allowed sub-functions of the remaining operators
+      foreach(IOperator o in Operators) {
+        if(o != op) {
+          foreach(IConstraint c in o.Constraints) {
+            if(c is SubOperatorTypeConstraint) {
+              ((SubOperatorTypeConstraint)c).RemoveOperator(op);
+            } else if(c is AllSubOperatorsTypeConstraint) {
+              ((AllSubOperatorsTypeConstraint)c).RemoveOperator(op);
+            }
+          }
+        }
+      }
+      OnOperatorRemoved(op);
+    }
+
+    public override void RemoveSubGroup(IOperatorGroup group) {
+      throw new NotSupportedException();
+    }
+
+    public event EventHandler OperatorAdded;
+    public event EventHandler OperatorRemoved;
+
+    protected virtual void OnOperatorAdded(IOperator op) {
+      if(OperatorAdded != null) {
+        OperatorAdded(this, new OperatorEventArgs(op));
+      }
+    }
+    protected virtual void OnOperatorRemoved(IOperator op) {
+      if(OperatorRemoved != null) {
+        OperatorRemoved(this, new OperatorEventArgs(op));
+      }
+    }
+  }
+
+  internal class OperatorEventArgs : EventArgs {
+    public IOperator op;
+
+    public OperatorEventArgs(IOperator op) {
+      this.op = op;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibrary.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibrary.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibrary.cs	(revision 1270)
@@ -0,0 +1,86 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+
+namespace HeuristicLab.GP {
+  public class GPOperatorLibrary : ItemBase, IOperatorLibrary, IEditable  {
+    // constants for variable names
+    internal const string MIN_TREE_HEIGHT = "MinTreeHeight";
+    internal const string MIN_TREE_SIZE = "MinTreeSize";
+    internal const string TICKETS = "Tickets";
+
+    private GPOperatorGroup group;
+
+    public GPOperatorGroup GPOperatorGroup {
+      get { return group; }
+    }
+    #region IOperatorLibrary Members
+
+    public IOperatorGroup Group {
+      get { return group; }
+    }
+
+    #endregion
+
+
+    public GPOperatorLibrary()
+      : base() {
+      group = new GPOperatorGroup();
+    }
+
+    public override IView CreateView() {
+      return new GPOperatorLibraryEditor(this);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      GPOperatorLibrary clone = (GPOperatorLibrary)base.Clone(clonedObjects);
+      clone.group = (GPOperatorGroup)group.Clone(clonedObjects);
+      return clone;
+    }
+
+    #region persistence
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Group", group, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(System.Xml.XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      group = (GPOperatorGroup) PersistenceManager.Restore(node.SelectSingleNode("Group"), restoredObjects);
+    }
+    #endregion
+
+    #region IEditable Members
+
+    public IEditor CreateEditor() {
+      return new GPOperatorLibraryEditor(this);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,238 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.GP {
+  partial class GPOperatorLibraryEditor {
+    /// <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.operatorLibraryEditor = new HeuristicLab.Core.OperatorLibraryEditor();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.operatorLibraryTabPage = new System.Windows.Forms.TabPage();
+      this.initializationTabPage = new System.Windows.Forms.TabPage();
+      this.initSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.initListView = new System.Windows.Forms.ListView();
+      this.initVariableView = new HeuristicLab.Core.VariableView();
+      this.mutationTabPage = new System.Windows.Forms.TabPage();
+      this.mutationSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.mutationListView = new System.Windows.Forms.ListView();
+      this.mutationVariableView = new HeuristicLab.Core.VariableView();
+      this.tabControl.SuspendLayout();
+      this.operatorLibraryTabPage.SuspendLayout();
+      this.initializationTabPage.SuspendLayout();
+      this.initSplitContainer.Panel1.SuspendLayout();
+      this.initSplitContainer.Panel2.SuspendLayout();
+      this.initSplitContainer.SuspendLayout();
+      this.mutationTabPage.SuspendLayout();
+      this.mutationSplitContainer.Panel1.SuspendLayout();
+      this.mutationSplitContainer.Panel2.SuspendLayout();
+      this.mutationSplitContainer.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // operatorLibraryEditor
+      // 
+      this.operatorLibraryEditor.Caption = "Operator Library";
+      this.operatorLibraryEditor.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryEditor.Filename = null;
+      this.operatorLibraryEditor.Location = new System.Drawing.Point(3, 3);
+      this.operatorLibraryEditor.Name = "operatorLibraryEditor";
+      this.operatorLibraryEditor.OperatorLibrary = null;
+      this.operatorLibraryEditor.Size = new System.Drawing.Size(663, 529);
+      this.operatorLibraryEditor.TabIndex = 0;
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.operatorLibraryTabPage);
+      this.tabControl.Controls.Add(this.initializationTabPage);
+      this.tabControl.Controls.Add(this.mutationTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(677, 561);
+      this.tabControl.TabIndex = 1;
+      // 
+      // operatorLibraryTabPage
+      // 
+      this.operatorLibraryTabPage.Controls.Add(this.operatorLibraryEditor);
+      this.operatorLibraryTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorLibraryTabPage.Name = "operatorLibraryTabPage";
+      this.operatorLibraryTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorLibraryTabPage.Size = new System.Drawing.Size(669, 535);
+      this.operatorLibraryTabPage.TabIndex = 0;
+      this.operatorLibraryTabPage.Text = "Operator Library";
+      this.operatorLibraryTabPage.UseVisualStyleBackColor = true;
+      // 
+      // initializationTabPage
+      // 
+      this.initializationTabPage.Controls.Add(this.initSplitContainer);
+      this.initializationTabPage.Location = new System.Drawing.Point(4, 22);
+      this.initializationTabPage.Name = "initializationTabPage";
+      this.initializationTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.initializationTabPage.Size = new System.Drawing.Size(669, 535);
+      this.initializationTabPage.TabIndex = 1;
+      this.initializationTabPage.Text = "Initialization";
+      this.initializationTabPage.UseVisualStyleBackColor = true;
+      // 
+      // initSplitContainer
+      // 
+      this.initSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.initSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.initSplitContainer.Name = "initSplitContainer";
+      // 
+      // initSplitContainer.Panel1
+      // 
+      this.initSplitContainer.Panel1.Controls.Add(this.initListView);
+      // 
+      // initSplitContainer.Panel2
+      // 
+      this.initSplitContainer.Panel2.Controls.Add(this.initVariableView);
+      this.initSplitContainer.Size = new System.Drawing.Size(663, 529);
+      this.initSplitContainer.SplitterDistance = 221;
+      this.initSplitContainer.TabIndex = 0;
+      // 
+      // initListView
+      // 
+      this.initListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.initListView.Location = new System.Drawing.Point(0, 0);
+      this.initListView.Name = "initListView";
+      this.initListView.Size = new System.Drawing.Size(221, 529);
+      this.initListView.TabIndex = 0;
+      this.initListView.UseCompatibleStateImageBehavior = false;
+      this.initListView.View = System.Windows.Forms.View.List;
+      this.initListView.SelectedIndexChanged += new System.EventHandler(this.initListView_SelectedIndexChanged);
+      // 
+      // initVariableView
+      // 
+      this.initVariableView.Caption = "Variable";
+      this.initVariableView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.initVariableView.Location = new System.Drawing.Point(0, 0);
+      this.initVariableView.Name = "initVariableView";
+      this.initVariableView.Size = new System.Drawing.Size(438, 529);
+      this.initVariableView.TabIndex = 0;
+      this.initVariableView.Variable = null;
+      // 
+      // mutationTabPage
+      // 
+      this.mutationTabPage.Controls.Add(this.mutationSplitContainer);
+      this.mutationTabPage.Location = new System.Drawing.Point(4, 22);
+      this.mutationTabPage.Name = "mutationTabPage";
+      this.mutationTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.mutationTabPage.Size = new System.Drawing.Size(669, 535);
+      this.mutationTabPage.TabIndex = 2;
+      this.mutationTabPage.Text = "Mutation";
+      this.mutationTabPage.UseVisualStyleBackColor = true;
+      // 
+      // mutationSplitContainer
+      // 
+      this.mutationSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.mutationSplitContainer.Location = new System.Drawing.Point(3, 3);
+      this.mutationSplitContainer.Name = "mutationSplitContainer";
+      // 
+      // mutationSplitContainer.Panel1
+      // 
+      this.mutationSplitContainer.Panel1.Controls.Add(this.mutationListView);
+      // 
+      // mutationSplitContainer.Panel2
+      // 
+      this.mutationSplitContainer.Panel2.Controls.Add(this.mutationVariableView);
+      this.mutationSplitContainer.Size = new System.Drawing.Size(663, 529);
+      this.mutationSplitContainer.SplitterDistance = 221;
+      this.mutationSplitContainer.TabIndex = 0;
+      // 
+      // mutationListView
+      // 
+      this.mutationListView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.mutationListView.Location = new System.Drawing.Point(0, 0);
+      this.mutationListView.MultiSelect = false;
+      this.mutationListView.Name = "mutationListView";
+      this.mutationListView.Size = new System.Drawing.Size(221, 529);
+      this.mutationListView.TabIndex = 0;
+      this.mutationListView.UseCompatibleStateImageBehavior = false;
+      this.mutationListView.View = System.Windows.Forms.View.List;
+      this.mutationListView.SelectedIndexChanged += new System.EventHandler(this.mutationListView_SelectedIndexChanged);
+      // 
+      // mutationVariableView
+      // 
+      this.mutationVariableView.Caption = "Variable";
+      this.mutationVariableView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.mutationVariableView.Location = new System.Drawing.Point(0, 0);
+      this.mutationVariableView.Name = "mutationVariableView";
+      this.mutationVariableView.Size = new System.Drawing.Size(438, 529);
+      this.mutationVariableView.TabIndex = 0;
+      this.mutationVariableView.Variable = null;
+      // 
+      // GPOperatorLibraryEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "GPOperatorLibraryEditor";
+      this.Size = new System.Drawing.Size(677, 561);
+      this.tabControl.ResumeLayout(false);
+      this.operatorLibraryTabPage.ResumeLayout(false);
+      this.initializationTabPage.ResumeLayout(false);
+      this.initSplitContainer.Panel1.ResumeLayout(false);
+      this.initSplitContainer.Panel2.ResumeLayout(false);
+      this.initSplitContainer.ResumeLayout(false);
+      this.mutationTabPage.ResumeLayout(false);
+      this.mutationSplitContainer.Panel1.ResumeLayout(false);
+      this.mutationSplitContainer.Panel2.ResumeLayout(false);
+      this.mutationSplitContainer.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Core.OperatorLibraryEditor operatorLibraryEditor;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage operatorLibraryTabPage;
+    private System.Windows.Forms.TabPage initializationTabPage;
+    private System.Windows.Forms.TabPage mutationTabPage;
+    private System.Windows.Forms.SplitContainer initSplitContainer;
+    private System.Windows.Forms.SplitContainer mutationSplitContainer;
+    private HeuristicLab.Core.VariableView initVariableView;
+    private HeuristicLab.Core.VariableView mutationVariableView;
+    private System.Windows.Forms.ListView initListView;
+    private System.Windows.Forms.ListView mutationListView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.cs	(revision 1270)
@@ -0,0 +1,153 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP {
+  public partial class GPOperatorLibraryEditor : EditorBase {
+    public IOperatorLibrary OperatorLibrary {
+      get { return (IOperatorLibrary)Item; }
+      set { base.Item = value; }
+    }
+
+    public GPOperatorLibraryEditor(GPOperatorLibrary library)
+      : base() {
+      InitializeComponent();
+      OperatorLibrary = library;
+      operatorLibraryEditor.OperatorLibrary = library;
+
+      library.GPOperatorGroup.OperatorAdded += new EventHandler(GPOperatorLibraryView_OperatorAdded);
+      library.GPOperatorGroup.OperatorRemoved += new EventHandler(GPOperatorGroup_OperatorRemoved);
+
+      mutationVariableView.Enabled = false;
+      initVariableView.Enabled = false;
+
+      foreach(IOperator op in library.Group.Operators) {
+        if(op.GetVariable(FunctionBase.MANIPULATION) != null) {
+          ListViewItem item = new ListViewItem();
+          item.Text = op.Name;
+          item.Name = op.Name;
+          item.Tag = op;
+          mutationListView.Items.Add(item);
+        }
+        if(op.GetVariable(FunctionBase.INITIALIZATION) != null) {
+          ListViewItem item = new ListViewItem();
+          item.Name = op.Name;
+          item.Text = op.Name;
+          item.Tag = op;
+          initListView.Items.Add(item);
+        }
+      }
+    }
+
+
+    private void GPOperatorLibraryView_OperatorAdded(object sender, EventArgs e) {
+      IOperator op = ((OperatorEventArgs)e).op;
+      if(op.GetVariable(FunctionBase.MANIPULATION) != null) {
+        ListViewItem operatorMutationItem = new ListViewItem();
+        operatorMutationItem.Name = op.Name;
+        operatorMutationItem.Text = op.Name;
+        operatorMutationItem.Tag = op;
+        mutationListView.Items.Add(operatorMutationItem);
+      }
+
+      if(op.GetVariable(FunctionBase.INITIALIZATION) != null) {
+        ListViewItem operatorInitItem = new ListViewItem();
+        operatorInitItem.Name = op.Name;
+        operatorInitItem.Text = op.Name;
+        operatorInitItem.Tag = op;
+        initListView.Items.Add(operatorInitItem);
+      }
+
+      op.NameChanged += new EventHandler(op_NameChanged);
+      Refresh();
+    }
+
+    private void op_NameChanged(object sender, EventArgs e) {
+      IOperator srcOp = (IOperator)sender;
+      foreach(ListViewItem item in mutationListView.Items) {
+        if(item.Tag == srcOp) {
+          item.Name = srcOp.Name;
+          item.Text = srcOp.Name;
+          break;
+        }
+      }
+      foreach(ListViewItem item in initListView.Items) {
+        if(item.Tag == srcOp) {
+          item.Name = srcOp.Name;
+          item.Text = srcOp.Name;
+          break;
+        }
+      }
+    }
+
+
+    private void GPOperatorGroup_OperatorRemoved(object sender, EventArgs e) {
+      IOperator op = ((OperatorEventArgs)e).op;
+
+      foreach(ListViewItem item in mutationListView.Items) {
+        if(item.Tag == op) {
+          mutationListView.Items.Remove(item);
+          break;
+        }
+      }
+
+      foreach(ListViewItem item in initListView.Items) {
+        if(item.Tag == op) {
+          initListView.Items.Remove(item);
+          break;
+        }
+      }
+    }
+
+    private void mutationListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(mutationListView.SelectedItems.Count>0 && mutationListView.SelectedItems[0].Tag != null) {
+        IVariable variable = ((IOperator)mutationListView.SelectedItems[0].Tag).GetVariable(FunctionBase.MANIPULATION);
+        mutationVariableView.Enabled = true;
+        mutationVariableView.Variable = variable;
+      } else {
+        mutationVariableView.Enabled = false;
+      }
+    }
+
+    private void initListView_SelectedIndexChanged(object sender, EventArgs e) {
+      if(initListView.SelectedItems.Count>0 && initListView.SelectedItems[0].Tag != null) {
+        IVariable variable = ((IOperator)initListView.SelectedItems[0].Tag).GetVariable(FunctionBase.INITIALIZATION);
+        initVariableView.Enabled = true;
+        initVariableView.Variable = variable;
+      } else {
+        initVariableView.Enabled = false;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/GPOperatorLibraryEditor.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/HeuristicLab.GP.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/HeuristicLab.GP.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/HeuristicLab.GP.csproj	(revision 1270)
@@ -0,0 +1,172 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1F1CF3ED-374C-4288-995B-93F6B872F571}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.GP</RootNamespace>
+    <AssemblyName>HeuristicLab.GP-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BakedFunctionTree.cs" />
+    <Compile Include="DefaultFunctionTreeNameGenerator.cs" />
+    <Compile Include="EqualiserController.cs" />
+    <Compile Include="Logging\TreeArityAnalyser.cs" />
+    <Compile Include="OffspringEqualiser.cs" />
+    <Compile Include="Recombination\SizeConstrictedGPCrossoverBase.cs" />
+    <Compile Include="Recombination\GPCrossoverBase.cs" />
+    <Compile Include="Recombination\UniformCrossover.cs" />
+    <Compile Include="UnknownFunctionException.cs" />
+    <Compile Include="IFunctionTreeNameGenerator.cs" />
+    <Compile Include="IFunctionTreeExporter.cs" />
+    <Compile Include="FunctionBase.cs" />
+    <Compile Include="FunctionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="FunctionView.Designer.cs">
+      <DependentUpon>FunctionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="GPOperatorGroup.cs" />
+    <Compile Include="GPOperatorLibrary.cs" />
+    <Compile Include="GPOperatorLibraryEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="GPOperatorLibraryEditor.Designer.cs">
+      <DependentUpon>GPOperatorLibraryEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabGPPlugin.cs" />
+    <Compile Include="IFunction.cs" />
+    <Compile Include="IFunctionTree.cs" />
+    <Compile Include="Manipulation\ChangeNodeTypeManipulation.cs" />
+    <Compile Include="Manipulation\CutOutNodeManipulation.cs" />
+    <Compile Include="Manipulation\DeleteSubTreeManipulation.cs" />
+    <Compile Include="Manipulation\FullTreeShaker.cs" />
+    <Compile Include="Manipulation\OnePointShaker.cs" />
+    <Compile Include="Manipulation\SubstituteSubTreeManipulation.cs" />
+    <Compile Include="ProbabilisticTreeCreator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RampedTreeCreator.cs" />
+    <Compile Include="Recombination\LangdonHomologousCrossOver.cs" />
+    <Compile Include="Recombination\OnePointCrossOver.cs" />
+    <Compile Include="Recombination\SizeFairCrossOver.cs" />
+    <Compile Include="Recombination\StandardCrossOver.cs" />
+    <Compile Include="TreeGardener.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
+      <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
+      <Name>HeuristicLab.Selection</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="FunctionView.resx">
+      <DependentUpon>FunctionView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="GPOperatorLibraryEditor.resx">
+      <DependentUpon>GPOperatorLibraryEditor.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/HeuristicLabGPPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/HeuristicLabGPPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/HeuristicLabGPPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.GP {
+  [ClassInfo(Name = "HeuristicLab.GP-3.2")]
+  [PluginFile(Filename = "HeuristicLab.GP-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Selection-3.2")]
+  public class HeuristicLabGPPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunction.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunction.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunction.cs	(revision 1270)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP {
+  public interface IFunction : IOperator {
+    IFunctionTree GetTreeNode();
+    double Apply();
+    IList<IFunction> AllowedSubFunctions(int index);
+    int MinArity { get; }
+    int MaxArity { get; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTree.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTree.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTree.cs	(revision 1270)
@@ -0,0 +1,41 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP {
+  public interface IFunctionTree : IItem {
+    int Size { get; }
+    int Height { get; }
+    IList<IFunctionTree> SubTrees { get; }
+    ICollection<IVariable> LocalVariables { get; }
+    IFunction Function { get; }
+    IVariable GetLocalVariable(string name);
+    void AddVariable(IVariable variable);
+    void RemoveVariable(string name);
+    void AddSubTree(IFunctionTree tree);
+    void InsertSubTree(int index, IFunctionTree tree);
+    void RemoveSubTree(int index);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTreeExporter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTreeExporter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTreeExporter.cs	(revision 1270)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP {
+  public interface IFunctionTreeExporter {
+    string Name { get; }
+    string Export(IFunctionTree tree);
+    bool TryExport(IFunctionTree tree, out string exported);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTreeNameGenerator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTreeNameGenerator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/IFunctionTreeNameGenerator.cs	(revision 1270)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP {
+  public interface IFunctionTreeNameGenerator {
+    string Name { get; }
+    string GetName(IFunctionTree tree);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Logging/TreeArityAnalyser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Logging/TreeArityAnalyser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Logging/TreeArityAnalyser.cs	(revision 1270)
@@ -0,0 +1,120 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  /// <summary>
+  /// Creates a histogram of the arities of functions used in the whole GP population.
+  /// </summary>
+  public class TreeArityAnalyser : OperatorBase {
+    public override string Description {
+      get {
+        return @"Creates a histogram of the arities of functions used in the whole GP population.";
+      }
+    }
+    public TreeArityAnalyser()
+      : base() {
+      AddVariableInfo(new VariableInfo("FunctionTree", "The tree to mutate", typeof(IFunctionTree), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Histogram", "The histogram of arities over all functions in all functiontrees", typeof(ItemList<ItemList<IntData>>), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      ItemList<ItemList<IntData>> histogram = GetVariableValue<ItemList<ItemList<IntData>>>("Histogram", scope, false, false);
+      if(histogram == null) {
+        histogram = new ItemList<ItemList<IntData>>();
+        IVariableInfo info = GetVariableInfo("Histogram");
+        if(info.Local)
+          AddVariable(new HeuristicLab.Core.Variable(info.ActualName, histogram));
+        else
+          scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName(info.FormalName), histogram));
+      } else {
+        histogram.Clear();
+      }
+
+      foreach(IScope subScope in scope.SubScopes) {
+        ItemList<ItemList<IntData>> subHistogram = GetArityHistogram(subScope);
+        MergeHistogram(subHistogram, histogram);
+      }
+
+      return null;
+    }
+
+    private ItemList<ItemList<IntData>> GetArityHistogram(IScope subScope) {
+      IFunctionTree tree = GetVariableValue<IFunctionTree>("FunctionTree", subScope, false);
+      List<int> arities = new List<int>();
+      Arities(tree, arities);
+      var histogram = arities.GroupBy(x => x, (g, xs) => new { Group = g, Count = xs.Count() }).OrderBy(g=>g.Group); // count number of distinct arities
+      ItemList<ItemList<IntData>> result = new ItemList<ItemList<IntData>>();
+      
+      // translate enumerable to itemlist
+      histogram.Aggregate(result, (r, g) => { 
+        ItemList<IntData> entry = new ItemList<IntData>(); 
+        entry.Add(new IntData(g.Group));
+        entry.Add(new IntData(g.Count));
+        r.Add(entry); return r; 
+      });
+      return result;
+    }
+
+    private void Arities(IFunctionTree tree, List<int> arities) {
+      arities.Add(tree.SubTrees.Count);
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        Arities(subTree, arities);
+      }
+    }
+
+    private void MergeHistogram(ItemList<ItemList<IntData>> srcHistogram, ItemList<ItemList<IntData>> dstHistogram) {
+      int j = 0;
+      for(int i = 0; i < srcHistogram.Count; i++) {
+        int g = srcHistogram[i][0].Data;
+        int c = srcHistogram[i][1].Data;
+        int dstG, dstC;
+        if(j < dstHistogram.Count) {
+          dstG = dstHistogram[j][0].Data;
+          dstC = dstHistogram[j][1].Data;
+        } else {
+          dstG = int.MaxValue;
+          dstC = 0;
+        }
+        if(g < dstG) {
+          // new group before the current group
+          if(j < dstHistogram.Count)
+            dstHistogram.Insert(j, srcHistogram[i]);
+          else
+            dstHistogram.Add(srcHistogram[i]);
+        } else if(g == dstG) {
+          dstHistogram[j][1] = new IntData(c + dstC);
+        }
+        j++;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/ChangeNodeTypeManipulation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/ChangeNodeTypeManipulation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/ChangeNodeTypeManipulation.cs	(revision 1270)
@@ -0,0 +1,192 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class ChangeNodeTypeManipulation : OperatorBase {
+
+    public override string Description {
+      get {
+        return @"This manipulation operator selects a random tree-node and changes the function type.
+If this leads to a constraint-violation (wrong number or type of sub-trees) the sub-trees are repaired
+resulting in a valid tree again.";
+      }
+    }
+
+    public ChangeNodeTypeManipulation()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Uniform random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeSize", "The maximal allowed size (number of nodes) of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The tree to mutate", typeof(IFunctionTree), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+    }
+
+
+    public override IOperation Apply(IScope scope) {
+      IFunctionTree root = GetVariableValue<IFunctionTree>("FunctionTree", scope, false);
+      MersenneTwister random = GetVariableValue<MersenneTwister>("Random", scope, true);
+      GPOperatorLibrary library = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      IntData treeSize = GetVariableValue<IntData>("TreeSize", scope, false);
+      IntData treeHeight = GetVariableValue<IntData>("TreeHeight", scope, false);
+      int maxTreeSize = GetVariableValue<IntData>("MaxTreeSize", scope, true).Data;
+      int maxTreeHeight = GetVariableValue<IntData>("MaxTreeHeight", scope, true).Data;
+      TreeGardener gardener = new TreeGardener(random, library);
+      IFunctionTree parent = gardener.GetRandomParentNode(root);
+      IFunctionTree selectedChild;
+      int selectedChildIndex;
+      if(parent == null) {
+        selectedChildIndex = 0;
+        selectedChild = root;
+      } else {
+        selectedChildIndex = random.Next(parent.SubTrees.Count);
+        selectedChild = parent.SubTrees[selectedChildIndex];
+      }
+
+      if(selectedChild.SubTrees.Count == 0) {
+        IFunctionTree newTerminal = ChangeTerminalType(parent, selectedChild, selectedChildIndex, gardener, random);
+        if(parent == null) {
+          // no parent means the new child is the initial operator
+          // and we have to update the value in the variable
+          scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTerminal;
+        } else {
+          parent.RemoveSubTree(selectedChildIndex);
+          parent.InsertSubTree(selectedChildIndex, newTerminal);
+          // updating the variable is not necessary because it stays the same
+        }
+        Debug.Assert(gardener.IsValidTree(root));
+        // size and height stays the same when changing a terminal so no need to update the variables
+        // schedule an operation to initialize the new terminal
+        return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newTerminal), scope);
+      } else {
+        List<IFunctionTree> uninitializedBranches;
+        IFunctionTree newFunctionTree = ChangeFunctionType(parent, selectedChild, selectedChildIndex, gardener, random, out uninitializedBranches);
+        // in rare cases the function creates a tree that breaks the size limits
+        // calculate the height and size difference and 
+        // check if the size of the new tree is still in the allowed bounds
+        int oldChildSize = selectedChild.Size;
+        int oldChildHeight = selectedChild.Height;
+        int newChildSize = newFunctionTree.Size;
+        int newChildHeight = newFunctionTree.Height;
+        if((treeHeight.Data - oldChildHeight) + newChildHeight > maxTreeHeight ||
+          (treeSize.Data - oldChildSize) + newChildSize > maxTreeSize) {
+          // if size-constraints are violated don't change anything
+          return null;
+        }
+        if(parent == null) {
+          // no parent means the new function is the initial operator
+          // and we have to update the value in the variable
+          scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newFunctionTree;
+          root = newFunctionTree;
+        } else {
+          // remove the old child
+          parent.RemoveSubTree(selectedChildIndex);
+          // add the new child as sub-tree of parent
+          parent.InsertSubTree(selectedChildIndex, newFunctionTree);
+        }
+        // update size and height
+        treeSize.Data = (treeSize.Data - oldChildSize) + newChildSize;
+        treeHeight.Data = root.Height; // must recalculate height because we can't know wether the manipulated branch was the deepest branch
+        // check if whole tree is ok
+        Debug.Assert(gardener.IsValidTree(root));
+        // return a composite operation that initializes all created sub-trees
+        return gardener.CreateInitializationOperation(uninitializedBranches, scope);
+      }
+    }
+  
+
+    private IFunctionTree ChangeTerminalType(IFunctionTree parent, IFunctionTree child, int childIndex, TreeGardener gardener, MersenneTwister random) {
+      IList<IFunction> allowedTerminals;
+      if (parent == null) {
+        allowedTerminals = gardener.Terminals;
+      } else {
+        allowedTerminals = new List<IFunction>();
+        var allAllowedChildren = gardener.GetAllowedSubFunctions(parent.Function, childIndex);
+        foreach(IFunction c in allAllowedChildren) {
+          if(gardener.IsTerminal(c)) allowedTerminals.Add(c);
+        }
+      }
+      // selecting from the terminals should always work since the current child was also a terminal
+      // so in the worst case we will just create a new terminal of the same type again.
+      return gardener.CreateRandomTree(allowedTerminals, 1, 1);
+    }
+
+    private IFunctionTree ChangeFunctionType(IFunctionTree parent, IFunctionTree child, int childIndex, TreeGardener gardener, MersenneTwister random,
+      out List<IFunctionTree> uninitializedBranches) {
+      // since there are subtrees, we have to check which 
+      // and how many of the existing subtrees we can reuse.
+      // first let's choose the function we want to use instead of the old child. For this we have to determine the
+      // pool of allowed functions based on constraints of the parent if there is one.
+      IList<IFunction> allowedFunctions = gardener.GetAllowedSubFunctions(parent!=null?parent.Function:null, childIndex);
+      // try to make a tree with the same arity as the old child.
+      int actualArity = child.SubTrees.Count;
+      // create a new tree-node for a randomly selected function
+      IFunction selectedFunction = allowedFunctions[random.Next(allowedFunctions.Count)];
+      // arity of the selected operator
+      int minArity = selectedFunction.MinArity;
+      int maxArity = selectedFunction.MaxArity;
+      // if the old child had too many sub-trees then the new child should keep as many sub-trees as possible
+      if (actualArity > maxArity)
+        actualArity = maxArity;
+      if(actualArity < minArity)
+        actualArity = minArity;
+      // create a list that holds old sub-trees that we can reuse in the new tree
+      List<IFunctionTree> availableSubTrees = new List<IFunctionTree>(child.SubTrees);
+      List<IFunctionTree> freshSubTrees = new List<IFunctionTree>();
+      IFunctionTree newTree = selectedFunction.GetTreeNode();
+      // randomly select the sub-trees that we keep
+      for (int i = 0; i < actualArity; i++) {
+        // fill all sub-tree slots of the new tree
+        // if for a given slot i there are multiple existing sub-trees that can be used in that slot
+        // then use a random existing sub-tree. When there are no existing sub-trees
+        // that fit in the given slot then create a new random tree and use it for the slot
+        ICollection<IFunction> allowedSubFunctions = gardener.GetAllowedSubFunctions(selectedFunction, i);
+        var matchingSubTrees = availableSubTrees.Where(subTree => allowedSubFunctions.Contains(subTree.Function));
+        if (matchingSubTrees.Count() > 0) {
+          IFunctionTree selectedSubTree = matchingSubTrees.ElementAt(random.Next(matchingSubTrees.Count()));
+          // we can just add it as subtree
+          newTree.InsertSubTree(i, selectedSubTree);
+          availableSubTrees.Remove(selectedSubTree); // the branch shouldn't be available for the following slots
+        } else {
+          // no existing matching tree found => create a new tree of minimal size
+          IFunctionTree freshTree = gardener.CreateRandomTree(allowedSubFunctions, 1, 1);
+          freshSubTrees.AddRange(gardener.GetAllSubTrees(freshTree));
+          newTree.InsertSubTree(i, freshTree);
+        }
+      }
+      freshSubTrees.Add(newTree);
+      uninitializedBranches = freshSubTrees;
+      return newTree;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/CutOutNodeManipulation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/CutOutNodeManipulation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/CutOutNodeManipulation.cs	(revision 1270)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using System;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class CutOutNodeManipulation : OperatorBase {
+    public override string Description {
+      get {
+        return @"Takes a tree, selects a random node of the tree and then tries to replace a random sub-tree
+of that node with one of the childs of the selected child.
+
+               O                             O
+              / \                           / \
+             O   X                         O   2
+                / \    2 is selected =>       / \
+               1   2                         4   5
+              /   / \
+             3   4   5
+";
+      }
+    }
+
+    public CutOutNodeManipulation()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Uniform random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeSize", "The maximal allowed size (number of nodes) of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The tree to mutate", typeof(IFunctionTree), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+    }
+
+
+    public override IOperation Apply(IScope scope) {
+      IFunctionTree root = GetVariableValue<IFunctionTree>("FunctionTree", scope, true);
+      MersenneTwister random = GetVariableValue<MersenneTwister>("Random", scope, true);
+      GPOperatorLibrary library = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      int maxTreeHeight = GetVariableValue<IntData>("MaxTreeHeight", scope, true).Data;
+      int maxTreeSize = GetVariableValue<IntData>("MaxTreeSize", scope, true).Data;
+      TreeGardener gardener = new TreeGardener(random, library);
+      IFunctionTree parent = gardener.GetRandomParentNode(root);
+      // parent == null means we should cut out the root node
+      // => return a random sub-tree of the root
+      if (parent == null) {
+        // when there are sub-trees then replace the old tree with a random sub-tree
+        if (root.SubTrees.Count > 0) {
+          root = root.SubTrees[random.Next(root.SubTrees.Count)];
+          GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
+          GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
+          // update the variable
+          scope.GetVariable(scope.TranslateName("FunctionTree")).Value = root;
+          Debug.Assert(gardener.IsValidTree(root));
+          // we reused a sub-tree so we don't have to schedule initialization operations
+          return null;
+        } else {
+          // we want to cut the root node and there are no sub-trees => create a new random terminal
+          IFunctionTree newTree;
+          newTree = gardener.CreateRandomTree(gardener.Terminals, 1, 1);
+          GetVariableValue<IntData>("TreeSize", scope, true).Data = newTree.Size;
+          GetVariableValue<IntData>("TreeHeight", scope, true).Data = newTree.Height;
+          // update the variable
+          scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTree;
+          Debug.Assert(gardener.IsValidTree(newTree));
+          // schedule an operation to initialize the whole tree
+          return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newTree), scope);
+        }
+      }
+      // select a child to cut away
+      int childIndex = random.Next(parent.SubTrees.Count);
+      IFunctionTree child = parent.SubTrees[childIndex];
+      // match the sub-trees of the child with the allowed sub-trees of the parent
+      ICollection<IFunction> allowedFunctions = gardener.GetAllowedSubFunctions(parent.Function, childIndex);
+      IFunctionTree[] possibleChilds = child.SubTrees.Where(t => allowedFunctions.Contains(t.Function)).ToArray();
+      if (possibleChilds.Length > 0) {
+        // replace child with a random child of that child
+        IFunctionTree selectedChild = possibleChilds[random.Next(possibleChilds.Length)];        
+        parent.RemoveSubTree(childIndex);
+        parent.InsertSubTree(childIndex, selectedChild);
+        Debug.Assert(gardener.IsValidTree(root));
+        // update the size and height of our tree
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
+        // don't need to schedule initialization operations
+        return null;
+      } else {
+        // can't reuse an existing branch => create a new tree
+        // determine the level of the parent
+        int parentLevel = gardener.GetBranchLevel(root, parent);
+        // first remove the old child (first step essential!)
+        parent.RemoveSubTree(childIndex);
+        // then determine the number of nodes left over after the child has been removed!
+        int remainingNodes = root.Size;
+        allowedFunctions = gardener.GetAllowedSubFunctions(parent.Function, childIndex);
+        IFunctionTree newFunctionTree = gardener.CreateRandomTree(allowedFunctions, maxTreeSize - remainingNodes, maxTreeHeight - parentLevel);
+        parent.InsertSubTree(childIndex, newFunctionTree);
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
+        Debug.Assert(gardener.IsValidTree(root));
+        // schedule an initialization operation for the new function-tree
+        return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newFunctionTree), scope);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/DeleteSubTreeManipulation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/DeleteSubTreeManipulation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/DeleteSubTreeManipulation.cs	(revision 1270)
@@ -0,0 +1,103 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class DeleteSubTreeManipulation : OperatorBase {
+    public override string Description {
+      get {
+        return @"Deletes a random sub-tree of the input tree. If the remaining tree is not valid 
+the operator tries to fix the tree by generating random subtrees where necessary.";
+      }
+    }
+
+    public DeleteSubTreeManipulation()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Uniform random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeSize", "The maximal allowed size (number of nodes) of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The tree to mutate", typeof(IFunctionTree), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+    }
+
+
+    public override IOperation Apply(IScope scope) {
+      IFunctionTree root = GetVariableValue<IFunctionTree>("FunctionTree", scope, true);
+      MersenneTwister random = GetVariableValue<MersenneTwister>("Random", scope, true);
+      GPOperatorLibrary library = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      TreeGardener gardener = new TreeGardener(random, library);
+      IFunctionTree parent = gardener.GetRandomParentNode(root);
+
+      // parent==null means the whole tree should be deleted.
+      // => return a new minimal random tree
+      if(parent == null) {
+        IFunctionTree newTree = gardener.CreateBalancedRandomTree(1, 1);
+        // check if the tree is ok
+        Debug.Assert(gardener.IsValidTree(newTree));
+        // update sizes to match the new tree
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = newTree.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = newTree.Height;
+        scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTree;
+
+        // schedule an operation to initialize the newly created operator
+        return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newTree), scope);
+      }
+
+      // select a branch to prune
+      int childIndex = random.Next(parent.SubTrees.Count);
+      if(parent.SubTrees.Count > parent.Function.MinArity) {
+        parent.RemoveSubTree(childIndex);
+        // actually since the next sub-trees are shifted in the place of the removed branch
+        // it might be possible that these sub-trees are not allowed in the place of the old branch
+        // we ignore this problem for now.
+        // when this starts to become a problem a possible solution is to go through the shifted branches from the place of the shifted
+        // and find the first one that doesn't fit. At this position we insert a new randomly initialized subtree of matching type (gkronber 25.12.07)
+
+        Debug.Assert(gardener.IsValidTree(root));
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
+        // root hasn't changed so don't need to update 'FunctionTree' variable
+        return null;
+      } else {
+        // replace with a minimal random seedling
+        parent.RemoveSubTree(childIndex);
+        ICollection<IFunction> allowedFunctions = gardener.GetAllowedSubFunctions(parent.Function, childIndex);
+        IFunctionTree newFunctionTree = gardener.CreateRandomTree(allowedFunctions, 1, 1);
+        parent.InsertSubTree(childIndex, newFunctionTree);
+        Debug.Assert(gardener.IsValidTree(root));
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
+        // again the root hasn't changed so we don't need to update the 'FunctionTree' variable
+        // but we have to return an initialization operation for the newly created tree
+        return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newFunctionTree), scope);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/FullTreeShaker.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/FullTreeShaker.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/FullTreeShaker.cs	(revision 1270)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.GP {
+  public class FullTreeShaker : DelegatingOperator {
+    public override string Description {
+      get { return "Manipulates all tree nodes for which a '" + FunctionBase.MANIPULATION + "' variable is defined."; }
+    }
+
+    public FullTreeShaker()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "A random generator (uniform)", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "Operator library that defines operator mutations", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ShakingFactor", "Variable that determines the force of the shaking operation", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree that should be mutated", typeof(IFunctionTree), VariableKind.In | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      GPOperatorLibrary library = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      IFunctionTree tree = GetVariableValue<IFunctionTree>("FunctionTree", scope, false);
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+
+      // enqueue all mutation operations as parallel operations
+      CompositeOperation next = new CompositeOperation();
+      next.ExecuteInParallel = false;
+
+      Scope tempScope = new Scope("Temp. manipulation scope");
+
+      TreeGardener gardener = new TreeGardener(mt, library);
+      var parametricBranches = gardener.GetAllSubTrees(tree).Where(branch => branch.Function.GetVariable(FunctionBase.MANIPULATION) != null);
+      foreach(IFunctionTree subTree in parametricBranches) {
+        IOperator mutation = (IOperator)subTree.Function.GetVariable(FunctionBase.MANIPULATION).Value;
+
+        // store all local variables into a temporary scope
+        Scope mutationScope = new Scope();
+        foreach(IVariable variable in subTree.LocalVariables) {
+          mutationScope.AddVariable(variable);
+        }
+
+        tempScope.AddSubScope(mutationScope);
+        next.AddOperation(new AtomicOperation(mutation, mutationScope));
+      }
+
+      // save all existing sub-scopes in a backup scope
+      Scope backupScope = new Scope("backup");
+      foreach(Scope subScope in scope.SubScopes) {
+        backupScope.AddSubScope(subScope);
+      }
+
+      scope.AddSubScope(tempScope); // scope containing a subscope for each manipulation
+      scope.AddSubScope(backupScope); // scope containing the old subscopes
+
+      // schedule a reducer operation to delete all temporary scopes and restore
+      // the subscopes of the backup scope after all manipulations are finished.
+      next.AddOperation(new AtomicOperation(new RightReducer(), scope));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/OnePointShaker.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/OnePointShaker.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/OnePointShaker.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.GP {
+  public class OnePointShaker : DelegatingOperator {
+    public override string Description {
+      get { return "Selects a random node of all tree-nodes that have a '"+FunctionBase.MANIPULATION+"' variable defined and manipulates the selected node."; }
+    }
+
+    public OnePointShaker()
+      : base() {
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "Operator library that defines mutation operations for operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "A random generator (uniform)", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ShakingFactor", "Factor that determines the force of the shaking operation", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The function tree that should be mutated", typeof(IFunctionTree), VariableKind.In | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      GPOperatorLibrary library = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      IFunctionTree tree = GetVariableValue<IFunctionTree>("FunctionTree", scope, false);
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+      TreeGardener gardener = new TreeGardener(mt, library);
+
+      // get all nodes for which a manipulation is defined
+      var parametricBranches = gardener.GetAllSubTrees(tree).Where(branch => branch.Function.GetVariable(FunctionBase.MANIPULATION) != null);
+
+      if(parametricBranches.Count() == 0) return null; // don't manipulate anything if there are no nodes with a manipulation operator
+
+      IFunctionTree selectedBranch = parametricBranches.ElementAt(mt.Next(parametricBranches.Count()));
+      IOperator mutation = (IOperator)selectedBranch.Function.GetVariable(FunctionBase.MANIPULATION).Value;
+      CompositeOperation next = new CompositeOperation();
+
+      // store all local variables into a temporary scope
+      Scope tempScope = new Scope("Temp. manipulation scope");
+      foreach(IVariable variable in selectedBranch.LocalVariables) {
+        tempScope.AddVariable(variable);
+      }
+
+      // save the exising sub-scops in a backup scope
+      Scope backupScope = new Scope("backup");
+      foreach (Scope subScope in scope.SubScopes) {
+        backupScope.AddSubScope(subScope);
+      }
+
+      // add the new sub-scopes
+      scope.AddSubScope(tempScope);
+      scope.AddSubScope(backupScope);
+
+      // the next operation should first manipulate and then restore the sub-scopes from the backup scope
+      next.AddOperation(new AtomicOperation(mutation, tempScope));
+      next.AddOperation(new AtomicOperation(new RightReducer(), scope));
+
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/SubstituteSubTreeManipulation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/SubstituteSubTreeManipulation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Manipulation/SubstituteSubTreeManipulation.cs	(revision 1270)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class SubstituteSubTreeManipulation : OperatorBase {
+
+    public override string Description {
+      get { return "Selects a random node of the tree and replaces it with randomly initialized subtree."; }
+    }
+
+    public SubstituteSubTreeManipulation()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Uniform random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeSize", "The maximal allowed size (number of nodes) of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The tree to manipulate", typeof(IFunctionTree), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.In | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IFunctionTree root = GetVariableValue<IFunctionTree>("FunctionTree", scope, true);
+      MersenneTwister random = GetVariableValue<MersenneTwister>("Random", scope, true);
+      GPOperatorLibrary library = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      int maxTreeHeight = GetVariableValue<IntData>("MaxTreeHeight", scope, true).Data;
+      int maxTreeSize = GetVariableValue<IntData>("MaxTreeSize", scope, true).Data;
+      int treeSize = GetVariableValue<IntData>("TreeSize", scope, true).Data;
+      int treeHeight = GetVariableValue<IntData>("TreeHeight", scope, true).Data;
+      TreeGardener gardener = new TreeGardener(random, library);
+      IFunctionTree parent = gardener.GetRandomParentNode(root);
+      if(parent == null) {
+        // parent == null means we should subsitute the whole tree
+        // => create a new random tree
+        IFunctionTree newTree = gardener.CreateRandomTree(gardener.AllFunctions, maxTreeSize, maxTreeHeight);
+        Debug.Assert(gardener.IsValidTree(newTree));
+
+        // update the variables in the scope with the new values
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = newTree.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = newTree.Height;
+        scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTree;
+        
+        // return a CompositeOperation that randomly initializes the new tree
+        return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newTree), scope);
+      } else {
+        // determine a random child of the parent to be replaced
+        int childIndex = random.Next(parent.SubTrees.Count);
+        // get the list of allowed functions for the new sub-tree
+        ICollection<IFunction> allowedFunctions = gardener.GetAllowedSubFunctions(parent.Function, childIndex);
+        if(allowedFunctions.Count == 0) {
+          // don't change anything
+          // this shouldn't happen
+          throw new InvalidProgramException();
+        }
+
+        // calculate the maximum size and height of the new sub-tree based on the location where
+        // it will be inserted
+        int parentLevel = gardener.GetBranchLevel(root, parent);
+        int maxSubTreeHeight = maxTreeHeight - parentLevel;
+        int maxSubTreeSize = maxTreeSize - (treeSize - parent.SubTrees[childIndex].Size);
+
+        // create a random function tree
+        IFunctionTree newTree = gardener.CreateRandomTree(allowedFunctions, maxSubTreeSize, maxSubTreeHeight);
+        parent.RemoveSubTree(childIndex);
+        parent.InsertSubTree(childIndex, newTree);
+
+        Debug.Assert(gardener.IsValidTree(root));
+        // update the values of treeSize and treeHeight
+        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
+        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
+        // the root hasn't changed so we don't need to update 
+        // return a CompositeOperation that randomly initializes all nodes of the new subtree
+        return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(newTree), scope);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/OffspringEqualiser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/OffspringEqualiser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/OffspringEqualiser.cs	(revision 1270)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.GP {
+  public class OffspringEqualiser : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public OffspringEqualiser() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Value", "The value to equalise", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("BinSize", "Size of histogram bins", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("EqualiserHistogram", "Histogram of the target distribution", typeof(DoubleArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("AcceptanceProbabilities", "Acceptance probabilities of individuals falling into bins", typeof(DoubleArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Histogram", "The histogram of the actual distribution", typeof(IntArrayData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      int binSize = GetVariableValue<IntData>("BinSize", scope, true).Data;
+      DoubleArrayData equaliserHistogram = GetVariableValue<DoubleArrayData>("EqualiserHistogram", scope, true);
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      DoubleArrayData acceptanceProbabilities = GetVariableValue<DoubleArrayData>("AcceptanceProbabilities", scope, true);
+      IntArrayData currentHistogram = GetVariableValue<IntArrayData>("Histogram", scope, true);
+
+      int value = GetVariableValue<IntData>("Value", scope, false).Data;
+      int bin = value / binSize;
+      if(bin<acceptanceProbabilities.Data.Length && random.NextDouble() < acceptanceProbabilities.Data[bin]) {
+        currentHistogram.Data[bin]++;
+        currentHistogram.FireChanged();
+        return new AtomicOperation(SubOperators[0], scope);
+      } else {
+        scope.AddVariable(new Variable(scope.TranslateName("Quality"), new DoubleData(double.NaN)));
+        return null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/ProbabilisticTreeCreator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/ProbabilisticTreeCreator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/ProbabilisticTreeCreator.cs	(revision 1270)
@@ -0,0 +1,83 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using System;
+using HeuristicLab.Random;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class ProbabilisticTreeCreator : OperatorBase {
+    private int MAX_TRIES { get { return 100; } }
+
+    public override string Description {
+      get { return @"Generates a new random operator tree."; }
+    }
+
+    public ProbabilisticTreeCreator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Uniform random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MinTreeSize", "The minimal allowed size of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeSize", "The maximal allowed size of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The created tree", typeof(IFunctionTree), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      GPOperatorLibrary opLibrary = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      int minTreeSize = GetVariableValue<IntData>("MinTreeSize", scope, true).Data;
+      int maxTreeSize = GetVariableValue<IntData>("MaxTreeSize", scope, true).Data;
+      int maxTreeHeight = GetVariableValue<IntData>("MaxTreeHeight", scope, true).Data;
+
+      TreeGardener gardener = new TreeGardener(random, opLibrary);
+
+      int treeSize = random.Next(minTreeSize, maxTreeSize + 1);
+
+      IFunctionTree root;
+      int actualTreeSize;
+      int actualTreeHeight;
+      int tries = 0;
+      do {
+        root = gardener.PTC2(random, treeSize, maxTreeHeight);
+        actualTreeSize = root.Size;
+        actualTreeHeight = root.Height;
+        if (tries++ >= MAX_TRIES) {
+          // try a different size
+          treeSize = random.Next(minTreeSize, maxTreeSize + 1);
+          tries = 0;
+        }
+      } while (actualTreeSize > maxTreeSize || actualTreeHeight > maxTreeHeight);
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("FunctionTree"), root));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeSize"), new IntData(actualTreeSize)));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeHeight"), new IntData(actualTreeHeight)));
+
+      return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(root), scope);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.GP")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("863021a4-3cde-48be-8af6-dac1077f5fb5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/RampedTreeCreator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/RampedTreeCreator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/RampedTreeCreator.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Linq;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using System;
+using HeuristicLab.Random;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class RampedTreeCreator : OperatorBase {
+    public override string Description {
+      get { return @"Generates a new random operator tree."; }
+    }
+
+    public RampedTreeCreator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Uniform random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MinTreeHeight", "The minimal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("BalancedTreesRate", "Determines how many trees should be balanced", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The created tree", typeof(IFunctionTree), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      GPOperatorLibrary opLibrary = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      int minTreeHeight = GetVariableValue<IntData>("MinTreeHeight", scope, true).Data;
+      int maxTreeHeight = GetVariableValue<IntData>("MaxTreeHeight", scope, true).Data;
+      double balancedTreesRate = GetVariableValue<DoubleData>("BalancedTreesRate", scope, true).Data;
+
+      TreeGardener gardener = new TreeGardener(random, opLibrary);
+
+      int treeHeight = random.Next(minTreeHeight, maxTreeHeight + 1);
+      IFunctionTree root;
+      if(random.NextDouble() <= balancedTreesRate) {
+        root = gardener.CreateBalancedRandomTree(Int32.MaxValue, treeHeight);
+      } else {
+        root = gardener.CreateUnbalancedRandomTree(Int32.MaxValue, treeHeight);
+      }
+
+      int actualTreeSize = root.Size;
+      int actualTreeHeight = root.Height;
+
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("FunctionTree"), root));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeSize"), new IntData(actualTreeSize)));
+      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeHeight"), new IntData(actualTreeHeight)));
+
+      Debug.Assert(gardener.IsValidTree(root) && actualTreeHeight <= maxTreeHeight);
+
+      return gardener.CreateInitializationOperation(gardener.GetAllSubTrees(root), scope);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/GPCrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/GPCrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/GPCrossoverBase.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public abstract class GPCrossoverBase : OperatorBase {
+    public GPCrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("OperatorLibrary", "The operator library containing all available operators", typeof(GPOperatorLibrary), VariableKind.In));
+      AddVariableInfo(new VariableInfo("FunctionTree", "The tree to mutate", typeof(IFunctionTree), VariableKind.In | VariableKind.New));
+      AddVariableInfo(new VariableInfo("TreeSize", "The size (number of nodes) of the tree", typeof(IntData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("TreeHeight", "The height of the tree", typeof(IntData), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      MersenneTwister random = GetVariableValue<MersenneTwister>("Random", scope, true);
+      GPOperatorLibrary opLibrary = GetVariableValue<GPOperatorLibrary>("OperatorLibrary", scope, true);
+      TreeGardener gardener = new TreeGardener(random, opLibrary);
+
+      if ((scope.SubScopes.Count % 2) != 0)
+        throw new InvalidOperationException("Number of parents is not even");
+
+      int children = scope.SubScopes.Count / 2;
+      for (int i = 0; i < children; i++) {
+        IFunctionTree parent0 = TakeNextParent(scope);
+        IFunctionTree parent1 = TakeNextParent(scope);
+
+        // randomly swap parents to remove a possible bias from selection (e.g. when using gender-specific selection)
+        if (random.NextDouble() < 0.5) {
+          IFunctionTree tmp = parent0;
+          parent0 = parent1;
+          parent1 = tmp;
+        }
+
+        IFunctionTree child = Cross(scope, gardener, random, parent0, parent1);
+        Debug.Assert(gardener.IsValidTree(child));
+        IScope childScope = new Scope(i.ToString());
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("FunctionTree"), child));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeSize"), new IntData(child.Size)));
+        childScope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("TreeHeight"), new IntData(child.Height)));
+        scope.AddSubScope(childScope);
+      }
+
+      return null;
+    }
+
+    internal abstract IFunctionTree Cross(IScope scope, TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1);
+
+    private IFunctionTree TakeNextParent(IScope scope) {
+      IFunctionTree parent = GetVariableValue<IFunctionTree>("FunctionTree", scope.SubScopes[0], false);
+      scope.RemoveSubScope(scope.SubScopes[0]);
+      return parent;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/LangdonHomologousCrossOver.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/LangdonHomologousCrossOver.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/LangdonHomologousCrossOver.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  /// <summary>
+  /// Implementation of a homologous crossover operator as described in: 
+  /// William B. Langdon 
+  /// Size Fair and Homologous Tree Genetic Programming Crossovers, 
+  /// Genetic Programming and Evolvable Machines, Vol. 1, Number 1/2, pp. 95-119, April 2000
+  /// </summary>
+  public class LangdonHomologousCrossOver : SizeFairCrossOver {
+    protected override IFunctionTree SelectReplacement(MersenneTwister random, List<int> replacedTrail, List<CrossoverPoint> crossoverPoints) {
+      List<CrossoverPoint> bestPoints = new List<CrossoverPoint> { crossoverPoints[0] };
+      int bestMatchLength = MatchingSteps(replacedTrail, crossoverPoints[0].trail);
+      for (int i = 1; i < crossoverPoints.Count; i++) {
+        int currentMatchLength = MatchingSteps(replacedTrail, crossoverPoints[i].trail);
+        if (currentMatchLength > bestMatchLength) {
+          bestMatchLength = currentMatchLength;
+          bestPoints.Clear();
+          bestPoints.Add(crossoverPoints[i]);
+        } else if (currentMatchLength == bestMatchLength) {
+          bestPoints.Add(crossoverPoints[i]);
+        }
+      }
+      return bestPoints[random.Next(bestPoints.Count)].tree;
+    }
+    private int MatchingSteps(List<int> t1, List<int> t2) {
+      int n = Math.Min(t1.Count, t2.Count);
+      for (int i = 0; i < n; i++) if (t1[i] != t2[i]) return i;
+      return n;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/OnePointCrossOver.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/OnePointCrossOver.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/OnePointCrossOver.cs	(revision 1270)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  /// <summary>
+  /// Implementation of a homologous one point crossover operator as described in: 
+  /// W. B. Langdon and R. Poli.  Foundations of Genetic Programming. Springer-Verlag, 2002.
+  /// </summary>
+  public class OnePointCrossOver : SizeConstrictedGPCrossoverBase {
+    // internal data structure to represent crossover points
+    private class CrossoverPoint {
+      public IFunctionTree parent0;
+      public IFunctionTree parent1;
+      public int childIndex;
+    }
+    public override string Description {
+      get {
+        return @"One point crossover for trees as described in W. B. Langdon and R. Poli. Foundations of Genetic Programming. Springer-Verlag, 2002.";
+      }
+    }
+
+    internal override IFunctionTree Cross(TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1, int maxTreeSize, int maxTreeHeight) {
+      List<CrossoverPoint> allowedCrossOverPoints = new List<CrossoverPoint>();
+      GetCrossOverPoints(gardener, tree0, tree1, maxTreeSize - tree0.Size, allowedCrossOverPoints);
+      if (allowedCrossOverPoints.Count > 0) {
+        CrossoverPoint crossOverPoint = allowedCrossOverPoints[random.Next(allowedCrossOverPoints.Count)];
+        IFunctionTree parent0 = crossOverPoint.parent0;
+        IFunctionTree branch1 = crossOverPoint.parent1.SubTrees[crossOverPoint.childIndex];
+        parent0.RemoveSubTree(crossOverPoint.childIndex);
+        parent0.InsertSubTree(crossOverPoint.childIndex, branch1);
+      }
+      return tree0;
+    }
+
+    private void GetCrossOverPoints(TreeGardener gardener, IFunctionTree branch0, IFunctionTree branch1, int maxNewNodes, List<CrossoverPoint> crossoverPoints) {
+      if (branch0.SubTrees.Count != branch1.SubTrees.Count) return;
+
+      for (int i = 0; i < branch0.SubTrees.Count; i++) {
+        // if the current branch can be attached as a sub-tree to branch0
+        if (gardener.GetAllowedSubFunctions(branch0.Function, i).Contains(branch1.SubTrees[i].Function) &&
+           branch1.SubTrees[i].Size - branch0.SubTrees[i].Size <= maxNewNodes) {
+          CrossoverPoint p = new CrossoverPoint();
+          p.childIndex = i;
+          p.parent0 = branch0;
+          p.parent1 = branch1;
+          crossoverPoints.Add(p);
+        }
+        GetCrossOverPoints(gardener, branch0.SubTrees[i], branch1.SubTrees[i], maxNewNodes, crossoverPoints);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/SizeConstrictedGPCrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/SizeConstrictedGPCrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/SizeConstrictedGPCrossoverBase.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public abstract class SizeConstrictedGPCrossoverBase : GPCrossoverBase {
+
+    private int MaxRecombinationTries { get { return 20; } }
+
+    public SizeConstrictedGPCrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("MaxTreeHeight", "The maximal allowed height of the tree", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaxTreeSize", "The maximal allowed size (number of nodes) of the tree", typeof(IntData), VariableKind.In));
+    }
+
+    internal override IFunctionTree Cross(IScope scope, TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1) {
+      int maxTreeHeight = GetVariableValue<IntData>("MaxTreeHeight", scope, true).Data;
+      int maxTreeSize = GetVariableValue<IntData>("MaxTreeSize", scope, true).Data;
+
+      // when tree0 is terminal then try to cross into tree1, when tree1 is also terminal just return tree0 unchanged.
+      IFunctionTree newTree;
+      int tries = 0;
+      do {
+        if (tries++ > MaxRecombinationTries)
+          // if after so many tries it was not possible to create a solution within the given size constraints just return the tree without changes.
+          return tree0;
+        if (tree0.SubTrees.Count > 0) {
+          newTree = Cross(gardener, random, (IFunctionTree)tree0.Clone(), (IFunctionTree)tree1.Clone(), maxTreeSize, maxTreeHeight);
+        } else if (tree1.SubTrees.Count > 0) {
+          newTree = Cross(gardener, random, (IFunctionTree)tree1.Clone(), (IFunctionTree)tree0.Clone(), maxTreeSize, maxTreeHeight);
+        } else newTree = tree0;
+      } while (newTree.Size > maxTreeSize || newTree.Height > maxTreeHeight);
+      return newTree;
+    }
+
+    internal abstract IFunctionTree Cross(TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1, int maxTreeSize, int maxTreeHeight);
+
+    private IFunctionTree TakeNextParent(IScope scope) {
+      IFunctionTree parent = GetVariableValue<IFunctionTree>("FunctionTree", scope.SubScopes[0], false);
+      scope.RemoveSubScope(scope.SubScopes[0]);
+      return parent;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/SizeFairCrossOver.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/SizeFairCrossOver.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/SizeFairCrossOver.cs	(revision 1270)
@@ -0,0 +1,153 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  /// <summary>
+  /// Implementation of a size fair crossover operator as described in: 
+  /// William B. Langdon 
+  /// Size Fair and Homologous Tree Genetic Programming Crossovers, 
+  /// Genetic Programming and Evolvable Machines, Vol. 1, Number 1/2, pp. 95-119, April 2000
+  /// </summary>
+  public class SizeFairCrossOver : SizeConstrictedGPCrossoverBase {
+    private int MaxRecombinationTries { get { return 20; } }
+    // private data structure for crossover points
+    protected class CrossoverPoint {
+      public IFunctionTree tree;
+      public int branchSize;
+      public List<int> trail;
+    }
+
+    internal override IFunctionTree Cross(TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1, int maxTreeSize, int maxTreeHeight) {
+      int tries = 0;
+      IFunctionTree insertedBranch = null;
+      IFunctionTree parent = null;
+      int removedBranchIndex = 0;
+      do {
+        // select a random suboperator of the 'receiving' tree
+        while (parent == null) parent = gardener.GetRandomParentNode(tree0);
+        removedBranchIndex = random.Next(parent.SubTrees.Count);
+        insertedBranch = GetReplacementBranch(random, gardener, tree0, parent, removedBranchIndex, tree1, maxTreeSize, maxTreeHeight);
+      } while (insertedBranch == null && tries++ < MaxRecombinationTries);
+
+      if (insertedBranch != null) {
+        // replace the branch below the crossoverpoint with the selected branch from root1
+        parent.RemoveSubTree(removedBranchIndex);
+        parent.InsertSubTree(removedBranchIndex, insertedBranch);
+      }
+      return tree0;
+    }
+
+    private IFunctionTree GetReplacementBranch(MersenneTwister random, TreeGardener gardener, IFunctionTree intoTree, IFunctionTree parent, int replacedBranchIndex, IFunctionTree fromTree, int maxTreeSize, int maxTreeHeight) {
+      IList<IFunction> allowedFunctions = gardener.GetAllowedSubFunctions(parent.Function, replacedBranchIndex);
+      int removedBranchSize = parent.SubTrees[replacedBranchIndex].Size;
+      int maxBranchSize = maxTreeSize - (intoTree.Size - removedBranchSize);
+      int maxBranchHeight = maxTreeHeight - gardener.GetBranchLevel(intoTree, parent);  // returns 1 if intoTree==parent and 2 if parent is a child of intoTree
+      List<int> replacedTrail = GetTrail(intoTree, parent);
+      replacedTrail.Add(replacedBranchIndex);
+
+      List<CrossoverPoint> shorterBranches = new List<CrossoverPoint>();
+      List<CrossoverPoint> longerBranches = new List<CrossoverPoint>();
+      List<CrossoverPoint> equalLengthBranches = new List<CrossoverPoint>();
+
+      FindPossibleBranches(fromTree, allowedFunctions, maxBranchSize, maxBranchHeight, removedBranchSize, shorterBranches, equalLengthBranches, longerBranches, new List<int>());
+
+      if (shorterBranches.Count > 0 && longerBranches.Count > 0) {
+        double pEqualLength = equalLengthBranches.Count > 0 ? 1.0 / removedBranchSize : 0.0;
+        double pLonger;
+        if (parent.Size == maxTreeSize) {
+          pLonger = 0.0;
+        } else {
+          pLonger = (1.0 - pEqualLength) / (longerBranches.Count * (1.0 + longerBranches.Average(p => p.branchSize) / shorterBranches.Average(p => p.branchSize)));
+        }
+        double pShorter = (1.0 - pEqualLength - pLonger);
+
+        double r = random.NextDouble();
+        if (r < pLonger) {
+          return SelectReplacement(random, replacedTrail, longerBranches);
+        } else if (r < pLonger + pShorter) {
+          return SelectReplacement(random, replacedTrail, shorterBranches);
+        } else {
+          return SelectReplacement(random, replacedTrail, equalLengthBranches);
+        }
+      } else if (equalLengthBranches.Count > 0) {
+        return SelectReplacement(random, replacedTrail, equalLengthBranches);
+      } else {
+        return null;
+      }
+    }
+
+    protected virtual IFunctionTree SelectReplacement(MersenneTwister random, List<int> replacedTrail, List<CrossoverPoint> crossoverPoints) {
+      return crossoverPoints[random.Next(crossoverPoints.Count)].tree;
+    }
+
+    private void FindPossibleBranches(IFunctionTree tree, IList<IFunction> allowedFunctions, int maxBranchSize, int maxBranchHeight, int removedBranchSize,
+      List<CrossoverPoint> shorterBranches, List<CrossoverPoint> equalLengthBranches, List<CrossoverPoint> longerBranches, List<int> trail) {
+      int treeSize = tree.Size;
+      if (allowedFunctions.Contains(tree.Function) && treeSize <= maxBranchSize && tree.Height <= maxBranchHeight) {
+        CrossoverPoint p = new CrossoverPoint();
+        p.branchSize = treeSize;
+        p.tree = tree;
+        p.trail = new List<int>(trail);
+        if (treeSize < removedBranchSize) shorterBranches.Add(p);
+        else if (treeSize > removedBranchSize) longerBranches.Add(p);
+        else equalLengthBranches.Add(p);
+      }
+      for (int i = 0; i < tree.SubTrees.Count; i++) {
+        trail.Add(i);
+        FindPossibleBranches(tree.SubTrees[i], allowedFunctions, maxBranchSize, maxBranchHeight, removedBranchSize, shorterBranches, equalLengthBranches, longerBranches, trail);
+        trail.RemoveAt(trail.Count - 1);
+      }
+    }
+
+    private List<int> GetTrail(IFunctionTree root, IFunctionTree branch) {
+      List<int> trail = new List<int>();
+      GetTrail(root, branch, trail);
+      trail.Reverse();
+      trail.RemoveAt(trail.Count - 1);
+      return trail;
+    }
+    private void GetTrail(IFunctionTree root, IFunctionTree branch, List<int> trail) {
+      if (root == branch) {
+        trail.Add(-1); // add flag that there was a match
+        return;
+      }
+
+      for (int i = 0; i < root.SubTrees.Count; i++) {
+        GetTrail(root.SubTrees[i], branch, trail);
+        if (trail.Count > 0) {
+          trail.Add(i);
+          return;
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/StandardCrossOver.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/StandardCrossOver.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/StandardCrossOver.cs	(revision 1270)
@@ -0,0 +1,85 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  public class StandardCrossOver : SizeConstrictedGPCrossoverBase {
+    private int MaxRecombinationTries { get { return 20; } }
+
+    public override string Description {
+      get {
+        return @"Takes two parent individuals P0 and P1 each. Selects a random node N0 of P0 and a random node N1 of P1.
+And replaces the branch with root0 N0 in P0 with N1 from P1 if the tree-size limits are not violated.
+When recombination with N0 and N1 would create a tree that is too large or invalid the operator randomly selects new N0 and N1 
+until a valid configuration is found.";
+      }
+    }
+
+    internal override IFunctionTree Cross(TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1, int maxTreeSize, int maxTreeHeight) {
+      int tries = 0;
+      List<IFunctionTree> allowedCrossoverPoints = null;
+      IFunctionTree parent0;
+      int replacedChildIndex;
+      do {
+        // select a random crossover point in the first parent tree0
+        parent0 = null;
+        while (parent0 == null) parent0 = gardener.GetRandomParentNode(tree0);
+        // select a random branch to replace
+        replacedChildIndex = random.Next(parent0.SubTrees.Count);
+
+        // calculate the max size and height that the inserted branch can have 
+        int maxInsertedBranchSize = maxTreeSize - (tree0.Size - parent0.SubTrees[replacedChildIndex].Size);
+        int maxInsertedBranchHeight = maxTreeHeight - gardener.GetBranchLevel(tree0, parent0); // branchlevel is 1 if tree0==parent0
+
+        IList<IFunction> allowedFunctions = gardener.GetAllowedSubFunctions(parent0.Function, replacedChildIndex);
+        allowedCrossoverPoints = GetPossibleCrossoverPoints(gardener, tree1, maxInsertedBranchSize, maxInsertedBranchHeight, allowedFunctions);
+      } while (allowedCrossoverPoints.Count == 0 && tries++ < MaxRecombinationTries);
+
+      if (allowedCrossoverPoints.Count > 0) {
+        IFunctionTree branch1 = allowedCrossoverPoints[random.Next(allowedCrossoverPoints.Count)];
+
+        // replace the branch in tree0 with the selected branch from tree1
+        parent0.RemoveSubTree(replacedChildIndex);
+        parent0.InsertSubTree(replacedChildIndex, branch1);
+      }
+      return tree0;
+    }
+
+    private List<IFunctionTree> GetPossibleCrossoverPoints(TreeGardener gardener, IFunctionTree tree, int maxInsertedBranchSize, int maxInsertedBranchHeight, IList<IFunction> allowedFunctions) {
+      List<IFunctionTree> crossoverPoints = new List<IFunctionTree>();
+      foreach (IFunctionTree possiblePoint in gardener.GetAllSubTrees(tree)) {
+        if (allowedFunctions.Contains(possiblePoint.Function) && possiblePoint.Size <= maxInsertedBranchSize && possiblePoint.Height <= maxInsertedBranchHeight)
+          crossoverPoints.Add(possiblePoint);
+      }
+      return crossoverPoints;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/UniformCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/UniformCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/Recombination/UniformCrossover.cs	(revision 1270)
@@ -0,0 +1,162 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+
+namespace HeuristicLab.GP {
+  /// <summary>
+  /// Implementation of a homologous uniform crossover operator as described in: 
+  /// R. Poli and W. B. Langdon.  On the Search Properties of Different Crossover Operators in Genetic Programming.
+  /// In Proceedings of Genetic Programming '98, Madison, Wisconsin, 1998.
+  /// </summary>
+  public class UniformCrossover : SizeConstrictedGPCrossoverBase {
+    // internal datastructure to represent crossover points
+    private class CrossoverPoint {
+      public IFunctionTree Parent0;
+      public IFunctionTree Parent1;
+      public int ChildIndex;
+      public bool IsInternal;
+    }
+
+    public override string Description {
+      get {
+        return @"Uniform crossover as defined by Poli and Langdon";
+      }
+    }
+
+    internal override IFunctionTree Cross(TreeGardener gardener, MersenneTwister random, IFunctionTree tree0, IFunctionTree tree1, int maxTreeSize, int maxTreeHeight) {
+      List<CrossoverPoint> allowedCrossOverPoints = new List<CrossoverPoint>();
+      GetCrossOverPoints(gardener, tree0, tree1, allowedCrossOverPoints);
+      // iterate through the list of crossover points and swap nodes with p=0.5
+      foreach (CrossoverPoint crossoverPoint in allowedCrossOverPoints) {
+        if (random.NextDouble() < 0.5) {
+          if (crossoverPoint.IsInternal) {
+            ExchangeNodes(crossoverPoint);
+          } else {
+            SwapSubtrees(crossoverPoint);
+          }
+        }
+      }
+      return tree0;
+    }
+
+    private void GetCrossOverPoints(TreeGardener gardener, IFunctionTree branch0, IFunctionTree branch1, List<CrossoverPoint> crossoverPoints) {
+      if (branch0.SubTrees.Count != branch1.SubTrees.Count) return; // branches have to have same number of sub-trees to be valid crossover points
+      // iterate over all sub-trees
+      for (int i = 0; i < branch0.SubTrees.Count; i++) {
+        IFunctionTree currentSubTree0 = branch0.SubTrees[i];
+        IFunctionTree currentSubTree1 = branch1.SubTrees[i];
+        // when the current sub-tree in branch1 can be attached as a child of branch0
+        // and the sub-tree of branch0 can be attached as child of branch1.
+        // note: we have to check both cases because either branch0 or branch1 can end up in the result tree
+        if (gardener.GetAllowedSubFunctions(branch0.Function, i).Contains(currentSubTree1.Function) &&
+          gardener.GetAllowedSubFunctions(branch1.Function, i).Contains(currentSubTree0.Function)) {
+          // and the sub-tree is at the border of the common region 
+          if (currentSubTree0.SubTrees.Count != currentSubTree1.SubTrees.Count) {
+            // then we have found a valid crossover point
+            CrossoverPoint p = new CrossoverPoint();
+            p.ChildIndex = i;
+            p.Parent0 = branch0;
+            p.Parent1 = branch1;
+            p.IsInternal = false;
+            crossoverPoints.Add(p);
+          } else {
+            // when the sub-trees are not on the border of the common region
+            // we also have to check if the children of the current sub-trees of branch0 and branch1 can be exchanged 
+            if (CanHaveSubTrees(gardener, currentSubTree0, currentSubTree1.SubTrees) &&
+              CanHaveSubTrees(gardener, currentSubTree1, currentSubTree0.SubTrees)) {
+              CrossoverPoint p = new CrossoverPoint();
+              p.ChildIndex = i;
+              p.Parent0 = branch0;
+              p.Parent1 = branch1;
+              p.IsInternal = true;
+              crossoverPoints.Add(p);
+            }
+          }
+        }
+        GetCrossOverPoints(gardener, currentSubTree0, currentSubTree1, crossoverPoints);
+      }
+    }
+
+    private bool CanHaveSubTrees(TreeGardener gardener, IFunctionTree parent, IList<IFunctionTree> subTrees) {
+      for (int i = 0; i < subTrees.Count; i++) {
+        if (!gardener.GetAllowedSubFunctions(parent.Function, i).Contains(subTrees[i].Function)) return false;
+      }
+      return true;
+    }
+
+    private void ExchangeNodes(CrossoverPoint crossoverPoint) {
+      IFunctionTree parent0 = crossoverPoint.Parent0;
+      IFunctionTree parent1 = crossoverPoint.Parent1;
+      int childIndex = crossoverPoint.ChildIndex;
+      IFunctionTree branch0 = crossoverPoint.Parent0.SubTrees[childIndex];
+      IFunctionTree branch1 = crossoverPoint.Parent1.SubTrees[childIndex];
+      // exchange the branches in the parent
+      parent0.RemoveSubTree(childIndex);
+      parent0.InsertSubTree(childIndex, branch1);
+      parent1.RemoveSubTree(childIndex);
+      parent1.InsertSubTree(childIndex, branch0);
+
+      ExchangeChildren(branch0, branch1);
+    }
+
+    private void SwapSubtrees(CrossoverPoint crossoverPoint) {
+      IFunctionTree parent0 = crossoverPoint.Parent0;
+      IFunctionTree parent1 = crossoverPoint.Parent1;
+      int childIndex = crossoverPoint.ChildIndex;
+      IFunctionTree branch0 = crossoverPoint.Parent0.SubTrees[childIndex];
+      IFunctionTree branch1 = crossoverPoint.Parent1.SubTrees[childIndex];
+      // insert branch1 into parent0 replacing branch0
+      parent0.RemoveSubTree(childIndex);
+      parent0.InsertSubTree(childIndex, branch1);
+      // insert branch0 into parent1 replacing branch1
+      parent1.RemoveSubTree(childIndex);
+      parent1.InsertSubTree(childIndex, branch0);
+    }
+
+    private void ExchangeChildren(IFunctionTree branch0, IFunctionTree branch1) {
+      List<IFunctionTree> branch0Children = new List<IFunctionTree>(branch0.SubTrees); // lists to backup subtrees
+      List<IFunctionTree> branch1Children = new List<IFunctionTree>(branch1.SubTrees);
+
+      // remove children of branch0 and branch1
+      while (branch1.SubTrees.Count > 0) branch1.RemoveSubTree(0);
+      while (branch0.SubTrees.Count > 0) branch0.RemoveSubTree(0);
+
+      // add original children of branch0 to branch1
+      foreach (IFunctionTree subTree in branch0Children) {
+        branch1.AddSubTree(subTree);
+      }
+      // add original children of branch1 to branch0
+      foreach (IFunctionTree subTree in branch1Children) {
+        branch0.AddSubTree(subTree);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/TreeGardener.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/TreeGardener.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/TreeGardener.cs	(revision 1270)
@@ -0,0 +1,498 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Constraints;
+using System.Diagnostics;
+using HeuristicLab.Data;
+using System.Linq;
+using HeuristicLab.Random;
+using HeuristicLab.Operators;
+using System.Collections;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.GP {
+  internal class TreeGardener {
+    private IRandom random;
+    private GPOperatorLibrary funLibrary;
+    private List<IFunction> functions;
+
+    private List<IFunction> terminals;
+    internal IList<IFunction> Terminals {
+      get { return terminals; }
+    }
+
+    private List<IFunction> allFunctions;
+    internal IList<IFunction> AllFunctions {
+      get { return allFunctions; }
+    }
+
+    #region constructors
+    internal TreeGardener(IRandom random, GPOperatorLibrary funLibrary) {
+      this.random = random;
+      this.funLibrary = funLibrary;
+      this.allFunctions = new List<IFunction>();
+      terminals = new List<IFunction>();
+      functions = new List<IFunction>();
+      // init functions and terminals based on constraints
+      foreach(IFunction fun in funLibrary.Group.Operators) {
+        if(fun.MaxArity == 0) {
+          terminals.Add(fun);
+          allFunctions.Add(fun);
+        } else {
+          functions.Add(fun);
+          allFunctions.Add(fun);
+        }
+      }
+    }
+    #endregion
+
+    #region random initialization
+    /// <summary>
+    /// Creates a random balanced tree with a maximal size and height. When the max-height or max-size are 1 it will return a random terminal.
+    /// In other cases it will return either a terminal (tree of size 1) or any other tree with a function in it's root (at least height 2).
+    /// </summary>
+    /// <param name="maxTreeSize">Maximal size of the tree (number of nodes).</param>
+    /// <param name="maxTreeHeight">Maximal height of the tree.</param>
+    /// <returns></returns>
+    internal IFunctionTree CreateBalancedRandomTree(int maxTreeSize, int maxTreeHeight) {
+      IFunction rootFunction = GetRandomRoot(maxTreeSize, maxTreeHeight);
+      IFunctionTree tree = MakeBalancedTree(rootFunction, maxTreeHeight - 1);
+      return tree;
+    }
+
+    /// <summary>
+    /// Creates a random (unbalanced) tree with a maximal size and height. When the max-height or max-size are 1 it will return a random terminal.
+    /// In other cases it will return either a terminal (tree of size 1) or any other tree with a function in it's root (at least height 2).
+    /// </summary>
+    /// <param name="maxTreeSize">Maximal size of the tree (number of nodes).</param>
+    /// <param name="maxTreeHeight">Maximal height of the tree.</param>
+    /// <returns></returns>
+    internal IFunctionTree CreateUnbalancedRandomTree(int maxTreeSize, int maxTreeHeight) {
+      IFunction rootFunction = GetRandomRoot(maxTreeSize, maxTreeHeight);
+      IFunctionTree tree = MakeUnbalancedTree(rootFunction, maxTreeHeight - 1);
+      return tree;
+    }
+
+    internal IFunctionTree PTC2(IRandom random, int size, int maxDepth) {
+      return PTC2(random, GetRandomRoot(size, maxDepth), size, maxDepth);
+    }
+
+    internal IFunctionTree PTC2(IRandom random, IFunction rootF, int size, int maxDepth) {
+      IFunctionTree root = rootF.GetTreeNode();
+      if(size <= 1 || maxDepth <= 1) return root;
+      List<object[]> list = new List<object[]>();
+      int currentSize = 1;
+      int totalListMinSize = 0;
+      int minArity = root.Function.MinArity;
+      int maxArity = root.Function.MaxArity;
+      if(maxArity >= size) {
+        maxArity = size;
+      }
+      int actualArity = random.Next(minArity, maxArity + 1);
+      totalListMinSize += GetMinimalTreeSize(root.Function) - 1;
+      for(int i = 0; i < actualArity; i++) {
+        // insert a dummy sub-tree and add the pending extension to the list
+        root.AddSubTree(null);
+        list.Add(new object[] { root, i, 2 });
+      }
+
+      while(list.Count > 0 && totalListMinSize + currentSize < size) {
+        int randomIndex = random.Next(list.Count);
+        object[] nextExtension = list[randomIndex];
+        list.RemoveAt(randomIndex);
+        IFunctionTree parent = (IFunctionTree)nextExtension[0];
+        int a = (int)nextExtension[1];
+        int d = (int)nextExtension[2];
+        if(d == maxDepth) {
+          parent.RemoveSubTree(a);
+          IFunctionTree branch = CreateRandomTree(GetAllowedSubFunctions(parent.Function, a), 1, 1);
+          parent.InsertSubTree(a, branch); // insert a smallest possible tree
+          currentSize += branch.Size;
+          totalListMinSize -= branch.Size;
+        } else {
+          IFunction selectedFunction = RandomSelect(GetAllowedSubFunctions(parent.Function, a).Where(
+            f => !IsTerminal(f) && GetMinimalTreeHeight(f) + (d - 1) <= maxDepth).ToArray());
+          IFunctionTree newTree = selectedFunction.GetTreeNode();
+          parent.RemoveSubTree(a);
+          parent.InsertSubTree(a, newTree);
+          currentSize++;
+          totalListMinSize--;
+
+          minArity = selectedFunction.MinArity;
+          maxArity = selectedFunction.MaxArity;
+          if(maxArity >= size) {
+            maxArity = size;
+          }
+          actualArity = random.Next(minArity, maxArity + 1);
+          for(int i = 0; i < actualArity; i++) {
+            // insert a dummy sub-tree and add the pending extension to the list
+            newTree.AddSubTree(null);
+            list.Add(new object[] { newTree, i, d + 1 });
+          }
+          totalListMinSize += GetMinimalTreeSize(newTree.Function) - 1;
+        }
+      }
+      while(list.Count > 0) {
+        int randomIndex = random.Next(list.Count);
+        object[] nextExtension = list[randomIndex];
+        list.RemoveAt(randomIndex);
+        IFunctionTree parent = (IFunctionTree)nextExtension[0];
+        int a = (int)nextExtension[1];
+        int d = (int)nextExtension[2];
+        parent.RemoveSubTree(a);
+        parent.InsertSubTree(a,
+          CreateRandomTree(GetAllowedSubFunctions(parent.Function, a), 1, 1)); // append a tree with minimal possible height
+      }
+      return root;
+    }
+
+    /// <summary>
+    /// selects a random function from allowedFunctions and creates a random (unbalanced) tree with maximal size and height.
+    /// </summary>
+    /// <param name="allowedFunctions">Set of allowed functions.</param>
+    /// <param name="maxTreeSize">Maximal size of the tree (number of nodes).</param>
+    /// <param name="maxTreeHeight">Maximal height of the tree.</param>
+    /// <returns>New random unbalanced tree</returns>
+    internal IFunctionTree CreateRandomTree(ICollection<IFunction> allowedFunctions, int maxTreeSize, int maxTreeHeight) {
+      // get the minimal needed height based on allowed functions and extend the max-height if necessary
+      int minTreeHeight = allowedFunctions.Select(f => GetMinimalTreeHeight(f)).Min();
+      if(minTreeHeight > maxTreeHeight)
+        maxTreeHeight = minTreeHeight;
+      // get the minimal needed size based on allowed functions and extend the max-size if necessary
+      int minTreeSize = allowedFunctions.Select(f => GetMinimalTreeSize(f)).Min();
+      if(minTreeSize > maxTreeSize)
+        maxTreeSize = minTreeSize;
+
+      // select a random value for the size and height
+      int treeHeight = random.Next(minTreeHeight, maxTreeHeight + 1);
+      int treeSize = random.Next(minTreeSize, maxTreeSize + 1);
+
+      // filter the set of allowed functions and select only from those that fit into the given maximal size and height limits
+      IFunction[] possibleFunctions = allowedFunctions.Where(f => GetMinimalTreeHeight(f) <= treeHeight &&
+        GetMinimalTreeSize(f) <= treeSize).ToArray();
+      IFunction selectedFunction = RandomSelect(possibleFunctions);
+
+      // build the tree 
+      IFunctionTree root;
+      root = PTC2(random, selectedFunction, maxTreeSize, maxTreeHeight);
+      return root;
+    }
+
+    internal CompositeOperation CreateInitializationOperation(ICollection<IFunctionTree> trees, IScope scope) {
+      // needed for the parameter shaking operation
+      CompositeOperation initializationOperation = new CompositeOperation();
+      Scope tempScope = new Scope("Temp. initialization scope");
+
+      var parametricTrees = trees.Where(t => t.Function.GetVariable(FunctionBase.INITIALIZATION) != null);
+      foreach(IFunctionTree tree in parametricTrees) {
+        // enqueue an initialization operation for each operator with local variables 
+        IOperator initialization = (IOperator)tree.Function.GetVariable(FunctionBase.INITIALIZATION).Value;
+        Scope initScope = new Scope();
+        // copy the local variables into a temporary scope used for initialization
+        foreach(IVariable variable in tree.LocalVariables) {
+          initScope.AddVariable(variable);
+        }
+        tempScope.AddSubScope(initScope);
+        initializationOperation.AddOperation(new AtomicOperation(initialization, initScope));
+      }
+      Scope backupScope = new Scope("backup");
+      foreach(Scope subScope in scope.SubScopes) {
+        backupScope.AddSubScope(subScope);
+      }
+      scope.AddSubScope(tempScope);
+      scope.AddSubScope(backupScope);
+      // add an operation to remove the temporary scopes        
+      initializationOperation.AddOperation(new AtomicOperation(new RightReducer(), scope));
+      return initializationOperation;
+    }
+    #endregion
+
+    #region tree information gathering
+    internal IFunctionTree GetRandomParentNode(IFunctionTree tree) {
+      List<IFunctionTree> parentNodes = new List<IFunctionTree>();
+
+      // add null for the parent of the root node
+      parentNodes.Add(null);
+
+      TreeForEach(tree, delegate(IFunctionTree possibleParentNode) {
+        if(possibleParentNode.SubTrees.Count > 0) {
+          parentNodes.Add(possibleParentNode);
+        }
+      });
+
+      return parentNodes[random.Next(parentNodes.Count)];
+    }
+
+    internal ICollection<IFunctionTree> GetAllSubTrees(IFunctionTree root) {
+      List<IFunctionTree> allTrees = new List<IFunctionTree>();
+      TreeForEach(root, t => { allTrees.Add(t); });
+      return allTrees;
+    }
+
+    /// <summary>
+    /// returns the height level of branch in the tree
+    /// if the branch == tree => 1
+    /// if branch is in the sub-trees of tree => 2
+    /// ...
+    /// if branch is not found => -1
+    /// </summary>
+    /// <param name="tree">root of the function tree to process</param>
+    /// <param name="branch">branch that is searched in the tree</param>
+    /// <returns></returns>
+    internal int GetBranchLevel(IFunctionTree tree, IFunctionTree branch) {
+      return GetBranchLevelHelper(tree, branch, 1);
+    }
+
+    // 'tail-recursive' helper
+    private int GetBranchLevelHelper(IFunctionTree tree, IFunctionTree branch, int level) {
+      if(branch == tree) return level;
+
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        int result = GetBranchLevelHelper(subTree, branch, level + 1);
+        if(result != -1) return result;
+      }
+
+      return -1;
+    }
+
+    internal bool IsValidTree(IFunctionTree tree) {
+      for(int i = 0; i < tree.SubTrees.Count; i++) {
+        if(!tree.Function.AllowedSubFunctions(i).Contains(tree.SubTrees[i].Function)) return false;
+      }
+
+      if(tree.SubTrees.Count < tree.Function.MinArity || tree.SubTrees.Count > tree.Function.MaxArity)
+        return false;
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        if(!IsValidTree(subTree)) return false;
+      }
+      return true;
+    }
+
+    // returns a random branch from the specified level in the tree
+    internal IFunctionTree GetRandomBranch(IFunctionTree tree, int level) {
+      if(level == 0) return tree;
+      List<IFunctionTree> branches = new List<IFunctionTree>();
+      GetBranchesAtLevel(tree, level, branches);
+      return branches[random.Next(branches.Count)];
+    }
+    #endregion
+
+    #region function information (arity, allowed childs and parents)
+    internal ICollection<IFunction> GetPossibleParents(List<IFunction> list) {
+      List<IFunction> result = new List<IFunction>();
+      foreach(IFunction f in functions) {
+        if(IsPossibleParent(f, list)) {
+          result.Add(f);
+        }
+      }
+      return result;
+    }
+
+    private bool IsPossibleParent(IFunction f, List<IFunction> children) {
+      int minArity = f.MinArity;
+      int maxArity = f.MaxArity;
+      // note: we can't assume that the operators in the children list have different types!
+
+      // when the maxArity of this function is smaller than the list of operators that
+      // should be included as sub-operators then it can't be a parent
+      if(maxArity < children.Count()) {
+        return false;
+      }
+      int nSlots = Math.Max(minArity, children.Count);
+
+      List<HashSet<IFunction>> slotSets = new List<HashSet<IFunction>>();
+
+      // we iterate through all slots for sub-trees and calculate the set of 
+      // allowed functions for this slot.
+      // we only count those slots that can hold at least one of the children that we should combine
+      for(int slot = 0; slot < nSlots; slot++) {
+        HashSet<IFunction> functionSet = new HashSet<IFunction>(f.AllowedSubFunctions(slot));
+        if(functionSet.Count() > 0) {
+          slotSets.Add(functionSet);
+        }
+      }
+
+      // ok at the end of this operation we know how many slots of the parent can actually
+      // hold one of our children.
+      // if the number of slots is smaller than the number of children we can be sure that
+      // we can never combine all children as sub-trees of the function and thus the function
+      // can't be a parent.
+      if(slotSets.Count() < children.Count()) {
+        return false;
+      }
+
+      // finally we sort the sets by size and beginning from the first set select one
+      // function for the slot and thus remove it as possible sub-tree from the remaining sets.
+      // when we can successfully assign all available children to a slot the function is a valid parent
+      // when only a subset of all children can be assigned to slots the function is no valid parent
+      slotSets.Sort((p, q) => p.Count() - q.Count());
+
+      int assignments = 0;
+      for(int i = 0; i < slotSets.Count() - 1; i++) {
+        if(slotSets[i].Count > 0) {
+          IFunction selected = slotSets[i].ElementAt(0);
+          assignments++;
+          for(int j = i + 1; j < slotSets.Count(); j++) {
+            slotSets[j].Remove(selected);
+          }
+        }
+      }
+
+      // sanity check 
+      if(assignments > children.Count) throw new InvalidProgramException();
+      return assignments == children.Count - 1;
+    }
+    internal IList<IFunction> GetAllowedParents(IFunction child, int childIndex) {
+      List<IFunction> parents = new List<IFunction>();
+      foreach(IFunction function in functions) {
+        ICollection<IFunction> allowedSubFunctions = GetAllowedSubFunctions(function, childIndex);
+        if(allowedSubFunctions.Contains(child)) {
+          parents.Add(function);
+        }
+      }
+      return parents;
+    }
+    internal bool IsTerminal(IFunction f) {
+      return f.MinArity == 0 && f.MaxArity == 0;
+    }
+    internal IList<IFunction> GetAllowedSubFunctions(IFunction f, int index) {
+      if(f == null) {
+        return allFunctions;
+      } else {
+        return f.AllowedSubFunctions(index);
+      }
+    }
+    #endregion
+
+    #region private utility methods
+    private IFunction GetRandomRoot(int maxTreeSize, int maxTreeHeight) {
+      if(maxTreeHeight == 1 || maxTreeSize == 1) {
+        IFunction selectedTerminal = RandomSelect(terminals);
+        return selectedTerminal;
+      } else {
+        IFunction[] possibleFunctions = functions.Where(f => GetMinimalTreeHeight(f) <= maxTreeHeight &&
+          GetMinimalTreeSize(f) <= maxTreeSize).ToArray();
+        IFunction selectedFunction = RandomSelect(possibleFunctions);
+        return selectedFunction;
+      }
+    }
+
+
+    private IFunctionTree MakeUnbalancedTree(IFunction parent, int maxTreeHeight) {
+      if(maxTreeHeight == 0) return parent.GetTreeNode();
+      int minArity = parent.MinArity;
+      int maxArity = parent.MaxArity;
+      int actualArity = random.Next(minArity, maxArity + 1);
+      if(actualArity > 0) {
+        IFunctionTree parentTree = parent.GetTreeNode();
+        for(int i = 0; i < actualArity; i++) {
+          IFunction[] possibleFunctions = GetAllowedSubFunctions(parent, i).Where(f => GetMinimalTreeHeight(f) <= maxTreeHeight).ToArray();
+          IFunction selectedFunction = RandomSelect(possibleFunctions);
+          IFunctionTree newSubTree = MakeUnbalancedTree(selectedFunction, maxTreeHeight - 1);
+          parentTree.InsertSubTree(i, newSubTree);
+        }
+        return parentTree;
+      }
+      return parent.GetTreeNode();
+    }
+
+
+    // NOTE: this method doesn't build fully balanced trees because we have constraints on the
+    // types of possible sub-functions which can indirectly impose a limit for the depth of a given sub-tree
+    private IFunctionTree MakeBalancedTree(IFunction parent, int maxTreeHeight) {
+      if(maxTreeHeight == 0) return parent.GetTreeNode();
+      int minArity = parent.MinArity;
+      int maxArity = parent.MaxArity;
+      int actualArity = random.Next(minArity, maxArity + 1);
+      if(actualArity > 0) {
+        IFunctionTree parentTree = parent.GetTreeNode();
+        for(int i = 0; i < actualArity; i++) {
+          // first try to find a function that fits into the maxHeight limit
+          IFunction[] possibleFunctions = GetAllowedSubFunctions(parent, i).Where(f => GetMinimalTreeHeight(f) <= maxTreeHeight &&
+            !IsTerminal(f)).ToArray();
+          // no possible function found => extend function set to terminals
+          if(possibleFunctions.Length == 0) {
+            possibleFunctions = GetAllowedSubFunctions(parent, i).Where(f => IsTerminal(f)).ToArray();
+            IFunction selectedTerminal = RandomSelect(possibleFunctions);
+            IFunctionTree newTree = selectedTerminal.GetTreeNode();
+            parentTree.InsertSubTree(i, newTree);
+          } else {
+            IFunction selectedFunction = RandomSelect(possibleFunctions);
+            IFunctionTree newTree = MakeBalancedTree(selectedFunction, maxTreeHeight - 1);
+            parentTree.InsertSubTree(i, newTree);
+          }
+        }
+        return parentTree;
+      }
+      return parent.GetTreeNode();
+    }
+
+    private int GetMinimalTreeHeight(IOperator op) {
+      return ((IntData)op.GetVariable(GPOperatorLibrary.MIN_TREE_HEIGHT).Value).Data;
+    }
+
+    private int GetMinimalTreeSize(IOperator op) {
+      return ((IntData)op.GetVariable(GPOperatorLibrary.MIN_TREE_SIZE).Value).Data;
+    }
+
+    private void TreeForEach(IFunctionTree tree, Action<IFunctionTree> action) {
+      action(tree);
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        TreeForEach(subTree, action);
+      }
+    }
+
+    private void GetBranchesAtLevel(IFunctionTree tree, int level, List<IFunctionTree> result) {
+      if(level == 1) result.AddRange(tree.SubTrees);
+      foreach(IFunctionTree subTree in tree.SubTrees) {
+        if(subTree.Height >= level - 1)
+          GetBranchesAtLevel(subTree, level - 1, result);
+      }
+    }
+
+    private IFunction RandomSelect(IList<IFunction> functionSet) {
+      double[] accumulatedTickets = new double[functionSet.Count];
+      double ticketAccumulator = 0;
+      int i = 0;
+      // precalculate the slot-sizes
+      foreach(IFunction function in functionSet) {
+        ticketAccumulator += ((DoubleData)function.GetVariable(GPOperatorLibrary.TICKETS).Value).Data;
+        accumulatedTickets[i] = ticketAccumulator;
+        i++;
+      }
+      // throw ball
+      double r = random.NextDouble() * ticketAccumulator;
+      // find the slot that has been hit
+      for(i = 0; i < accumulatedTickets.Length; i++) {
+        if(r < accumulatedTickets[i]) return functionSet[i];
+      }
+      // sanity check
+      throw new InvalidProgramException(); // should never happen
+    }
+
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/UnknownFunctionException.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/UnknownFunctionException.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.GP/UnknownFunctionException.cs	(revision 1270)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.GP {
+  public class UnknownFunctionException : Exception {
+    public UnknownFunctionException(string functionName)
+      : base("Function "+functionName+" was not expected and can't be handled.") {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.ServiceModel;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Threading;
+using System.IO;
+using System.Net;
+using System.Diagnostics;
+
+namespace HeuristicLab.Grid {
+  public partial class ClientForm : Form {
+    private GridClient client;
+    public ClientForm() {
+      InitializeComponent();
+
+      client = new GridClient();
+      UpdateControl();
+    }
+
+    private void startButton_Click(object sender, EventArgs e) {
+      client.Start(addressTextBox.Text);
+      UpdateControl();
+    }
+
+    private void stopButton_Click(object sender, EventArgs e) {
+      client.Stop();
+      UpdateControl();
+    }
+
+    private void UpdateControl() {
+      if(client.Waiting) {
+        startButton.Enabled = false;
+        stopButton.Enabled = true;
+        statusTextBox.Text = "Waiting for engine";
+      } else if(client.Executing) {
+        startButton.Enabled = false;
+        stopButton.Enabled = true;
+        statusTextBox.Text = "Executing engine";
+      } else if(client.Stopped) {
+        startButton.Enabled = true;
+        stopButton.Enabled = false;
+        statusTextBox.Text = "Stopped";
+      }
+      statusStrip.Text = client.StatusMessage;
+    }
+
+    private void timer_Tick(object sender, EventArgs e) {
+      UpdateControl();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.designer.cs	(revision 1270)
@@ -0,0 +1,158 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Grid {
+  partial class ClientForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.label1 = new System.Windows.Forms.Label();
+      this.stopButton = new System.Windows.Forms.Button();
+      this.startButton = new System.Windows.Forms.Button();
+      this.addressTextBox = new System.Windows.Forms.TextBox();
+      this.statusLabel = new System.Windows.Forms.Label();
+      this.statusTextBox = new System.Windows.Forms.TextBox();
+      this.statusStrip = new System.Windows.Forms.StatusStrip();
+      this.timer = new System.Windows.Forms.Timer(this.components);
+      this.SuspendLayout();
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(9, 9);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(81, 13);
+      this.label1.TabIndex = 7;
+      this.label1.Text = "&Server address:";
+      // 
+      // stopButton
+      // 
+      this.stopButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.stopButton.Enabled = false;
+      this.stopButton.Location = new System.Drawing.Point(96, 61);
+      this.stopButton.Name = "stopButton";
+      this.stopButton.Size = new System.Drawing.Size(75, 23);
+      this.stopButton.TabIndex = 6;
+      this.stopButton.Text = "St&op";
+      this.stopButton.UseVisualStyleBackColor = true;
+      this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.startButton.Location = new System.Drawing.Point(12, 61);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(75, 23);
+      this.startButton.TabIndex = 5;
+      this.startButton.Text = "St&art";
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.startButton_Click);
+      // 
+      // addressTextBox
+      // 
+      this.addressTextBox.Location = new System.Drawing.Point(96, 6);
+      this.addressTextBox.Name = "addressTextBox";
+      this.addressTextBox.Size = new System.Drawing.Size(222, 20);
+      this.addressTextBox.TabIndex = 4;
+      // 
+      // statusLabel
+      // 
+      this.statusLabel.AutoSize = true;
+      this.statusLabel.Location = new System.Drawing.Point(12, 33);
+      this.statusLabel.Name = "statusLabel";
+      this.statusLabel.Size = new System.Drawing.Size(67, 13);
+      this.statusLabel.TabIndex = 8;
+      this.statusLabel.Text = "&Client status:";
+      // 
+      // statusTextBox
+      // 
+      this.statusTextBox.Location = new System.Drawing.Point(96, 30);
+      this.statusTextBox.Name = "statusTextBox";
+      this.statusTextBox.ReadOnly = true;
+      this.statusTextBox.Size = new System.Drawing.Size(222, 20);
+      this.statusTextBox.TabIndex = 9;
+      // 
+      // statusStrip
+      // 
+      this.statusStrip.Location = new System.Drawing.Point(0, 87);
+      this.statusStrip.Name = "statusStrip";
+      this.statusStrip.Size = new System.Drawing.Size(330, 22);
+      this.statusStrip.TabIndex = 10;
+      this.statusStrip.Text = "statusStrip1";
+      // 
+      // timer
+      // 
+      this.timer.Enabled = true;
+      this.timer.Interval = 1000;
+      this.timer.Tick += new System.EventHandler(this.timer_Tick);
+      // 
+      // ClientForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(330, 109);
+      this.Controls.Add(this.statusStrip);
+      this.Controls.Add(this.statusTextBox);
+      this.Controls.Add(this.statusLabel);
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.stopButton);
+      this.Controls.Add(this.startButton);
+      this.Controls.Add(this.addressTextBox);
+      this.Name = "ClientForm";
+      this.Text = "Grid Client";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Button stopButton;
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.TextBox addressTextBox;
+    private System.Windows.Forms.Label statusLabel;
+    private System.Windows.Forms.TextBox statusTextBox;
+    private System.Windows.Forms.StatusStrip statusStrip;
+    private System.Windows.Forms.Timer timer;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ClientForm.resx	(revision 1270)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="timer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>121, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/Database.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/Database.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/Database.cs	(revision 1270)
@@ -0,0 +1,317 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using System.Data.Common;
+using System.Threading;
+
+namespace HeuristicLab.Grid {
+  class Database {
+    private string connectionString;
+    private ReaderWriterLockSlim rwLock;
+    private DbProviderFactory factory;
+    public Database(string connectionString) {
+      this.connectionString = connectionString;
+      rwLock = new ReaderWriterLockSlim();
+      factory = DbProviderFactories.GetFactory("System.Data.SQLite");
+    }
+
+    #region create empty database
+    public void CreateNew() {
+      rwLock.EnterWriteLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand cmd = cnn.CreateCommand()) {
+              cmd.CommandText = "CREATE TABLE Job (ID integer primary key autoincrement, Guid text, Status text, CreationTime DateTime, StartTime DateTime, RawData blob)";
+              cmd.Transaction = t;
+              cmd.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+    #endregion
+
+    internal void InsertJob(Guid guid, JobState jobState, byte[] rawData) {
+      rwLock.EnterWriteLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Insert into Job (Guid, Status, CreationTime, StartTime, RawData) values (@Guid, @Status, @CreationTime, @StartTime, @RawData)";
+              DbParameter guidParam = c.CreateParameter();
+              guidParam.ParameterName = "@Guid";
+              guidParam.Value = guid.ToString();
+              c.Parameters.Add(guidParam);
+              DbParameter statusParam = c.CreateParameter();
+              statusParam.ParameterName = "@Status";
+              statusParam.Value = jobState.ToString();
+              c.Parameters.Add(statusParam);
+              DbParameter creationParam = c.CreateParameter();
+              creationParam.ParameterName = "@CreationTime";
+              DateTime now = DateTime.Now;
+              creationParam.Value = now;
+              c.Parameters.Add(creationParam);
+              DbParameter startParam = c.CreateParameter();
+              startParam.ParameterName = "@StartTime";
+              if(jobState == JobState.Busy) startParam.Value = now;
+              else startParam.Value = null;
+              c.Parameters.Add(startParam);
+              DbParameter rawDataParam = c.CreateParameter();
+              rawDataParam.ParameterName = "@RawData";
+              rawDataParam.Value = rawData;
+              c.Parameters.Add(rawDataParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+
+    }
+
+    internal JobEntry GetNextWaitingJob() {
+      rwLock.EnterUpgradeableReadLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          JobEntry job = new JobEntry();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "select guid,creationtime,starttime,rawdata from job, (select id from job where status=@Status order by creationtime limit 1) as next where job.id=next.id";
+              DbParameter statusParameter = c.CreateParameter();
+              statusParameter.ParameterName = "@Status";
+              statusParameter.Value = JobState.Waiting.ToString();
+              c.Parameters.Add(statusParameter);
+              DbDataReader r = c.ExecuteReader();
+              if(!r.HasRows) {
+                r.Close();
+                t.Commit();
+                return null;
+              }
+              r.Read();              
+              job.Status = JobState.Busy;
+              job.Guid = r.GetGuid(0);
+              job.CreationTime = r.GetDateTime(1);
+              job.StartTime = r.IsDBNull(2) ? null : new Nullable<DateTime>(r.GetDateTime(2));
+              job.RawData = (byte[])r.GetValue(3);
+              r.Close();
+            }
+            rwLock.EnterWriteLock();
+            try {
+              using(DbCommand updateCmd = cnn.CreateCommand()) {
+                updateCmd.Transaction = t;
+                updateCmd.CommandText = "Update job set Status=@Status where Guid=@Guid";
+                DbParameter statusParam = updateCmd.CreateParameter();
+                statusParam.ParameterName = "@Status";
+                statusParam.Value = JobState.Busy.ToString();
+                DbParameter guidParam = updateCmd.CreateParameter();
+                guidParam.ParameterName = "@Guid";
+                guidParam.Value = job.Guid.ToString();
+                updateCmd.Parameters.Add(statusParam);
+                updateCmd.Parameters.Add(guidParam);
+                updateCmd.ExecuteNonQuery();
+              }
+              t.Commit();
+            } finally {
+              rwLock.ExitWriteLock();
+            }
+            return job;
+          }
+        }
+      } finally {
+        rwLock.ExitUpgradeableReadLock();
+      }
+    }
+
+    internal void SetJobResult(Guid guid, byte[] result) {
+      rwLock.EnterWriteLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Update Job set Status=@Status, RawData=@RawData where Guid=@Guid";
+              DbParameter rawDataParam = c.CreateParameter();
+              DbParameter statusParam = c.CreateParameter();
+              DbParameter guidParam = c.CreateParameter();
+              rawDataParam.ParameterName = "@RawData";
+              rawDataParam.Value = result;
+              guidParam.ParameterName = "@Guid";
+              guidParam.Value = guid.ToString();
+              statusParam.ParameterName = "@Status";
+              statusParam.Value = JobState.Finished.ToString();
+              c.Parameters.Add(rawDataParam);
+              c.Parameters.Add(statusParam);
+              c.Parameters.Add(guidParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+    internal void UpdateJobState(Guid guid, JobState jobState) {
+      rwLock.EnterWriteLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          using(DbTransaction t = cnn.BeginTransaction()) {
+            using(DbCommand c = cnn.CreateCommand()) {
+              c.Transaction = t;
+              c.CommandText = "Update Job set Status=@Status, StartTime=@StartTime where Guid=@Guid";
+              DbParameter statusParam = c.CreateParameter();
+              DbParameter startTimeParam = c.CreateParameter();
+              DbParameter guidParam = c.CreateParameter();
+              startTimeParam.ParameterName = "@StartTime";
+              if(jobState == JobState.Busy)
+                startTimeParam.Value = DateTime.Now;
+              else
+                startTimeParam.Value = null;
+              guidParam.ParameterName = "@Guid";
+              guidParam.Value = guid.ToString();
+              statusParam.ParameterName = "@Status";
+              statusParam.Value = jobState.ToString();
+              c.Parameters.Add(startTimeParam);
+              c.Parameters.Add(statusParam);
+              c.Parameters.Add(guidParam);
+              c.ExecuteNonQuery();
+            }
+            t.Commit();
+          }
+        }
+      } finally {
+        rwLock.ExitWriteLock();
+      }
+    }
+
+
+    internal JobEntry GetJob(Guid guid) {
+      rwLock.EnterReadLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          DbCommand c = cnn.CreateCommand();
+          c.CommandText = "Select Status, CreationTime, StartTime, Rawdata from Job where Guid=@Guid";
+          DbParameter guidParameter = c.CreateParameter();
+          guidParameter.ParameterName = "@Guid";
+          guidParameter.Value = guid.ToString();
+          c.Parameters.Add(guidParameter);
+          DbDataReader r = c.ExecuteReader();
+          if(r.HasRows) {
+            r.Read();
+            JobEntry job = new JobEntry();
+            job.Guid = guid;
+            job.Status = (JobState)Enum.Parse(typeof(JobState), r.GetString(0));
+            job.CreationTime = r.GetDateTime(1);
+            job.StartTime = r.IsDBNull(2) ? null : new Nullable<DateTime>(r.GetDateTime(2));
+            job.RawData = (byte[])r.GetValue(3);
+            return job;
+          }
+          r.Close();
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return null;
+    }
+
+    internal JobState GetJobState(Guid guid) {
+      rwLock.EnterReadLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          DbCommand c = cnn.CreateCommand();
+          c.CommandText = "Select Status from Job where Guid=@Guid";
+          DbParameter guidParameter = c.CreateParameter();
+          guidParameter.ParameterName = "@Guid";
+          guidParameter.Value = guid.ToString();
+          c.Parameters.Add(guidParameter);
+          DbDataReader r = c.ExecuteReader();
+          if(r.HasRows) {
+            r.Read();
+            return (JobState)Enum.Parse(typeof(JobState), r.GetString(0));
+          }
+          r.Close();
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+      return JobState.Unknown;
+    }
+
+    internal long GetJobCount(JobState status) {
+      rwLock.EnterReadLock();
+      try {
+        using (DbConnection cnn = factory.CreateConnection()) {
+          cnn.ConnectionString = connectionString;
+          cnn.Open();
+          DbCommand c = cnn.CreateCommand();
+          c.CommandText = "Select Count(id) from Job where Status=@Status";
+          DbParameter stateParameter = c.CreateParameter();
+          stateParameter.ParameterName = "@Status";
+          stateParameter.Value = status.ToString();
+          c.Parameters.Add(stateParameter);
+          return (long)c.ExecuteScalar();
+        }
+      } finally {
+        rwLock.ExitReadLock();
+      }
+    }
+
+    /// <summary>
+    /// Does nothing right now (= running jobs that disappear are never restarted).
+    /// </summary>
+    internal void RestartExpiredActiveJobs() {
+    }
+
+    /// <summary>
+    /// Does nothing right now (= results are never deleted).
+    /// </summary>
+    internal void DeleteExpiredResults() {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/EngineRunner.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/EngineRunner.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/EngineRunner.cs	(revision 1270)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Threading;
+using HeuristicLab.PluginInfrastructure;
+using System.Reflection;
+
+namespace HeuristicLab.Grid {
+  internal class EngineRunner: MarshalByRefObject {
+    private ManualResetEvent engineFinished = new ManualResetEvent(false);
+
+    internal byte[] Execute(byte[] engine) {
+      ProcessingEngine currentEngine = (ProcessingEngine)PersistenceManager.RestoreFromGZip(engine);
+      engineFinished.Reset();
+      currentEngine.Finished += new EventHandler(currentEngine_Finished);
+      currentEngine.Execute();
+      
+      engineFinished.WaitOne();
+            
+      // if the engine was stopped because of an error (not suspended because of a breakpoint) 
+      // it's not necessary to return the whole engine
+      // instead just return an empty engine that has the aborted flag set
+      if(currentEngine.Canceled && !currentEngine.Suspended) {
+        currentEngine.Reset();
+        currentEngine.OperatorGraph.Clear();
+        currentEngine.Abort();
+      }
+
+      // when the engine executed without error it's OK to clear the operator graph because
+      // it is not needed to gather the results of the eninge (kept in scope-tree)
+      if(!currentEngine.Canceled && !currentEngine.Suspended) {
+        currentEngine.OperatorGraph.Clear();
+      }
+
+      return PersistenceManager.SaveToGZip(currentEngine);
+    }
+
+    void currentEngine_Finished(object sender, EventArgs e) {
+      engineFinished.Set();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/EngineStore.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/EngineStore.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/EngineStore.cs	(revision 1270)
@@ -0,0 +1,122 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Linq;
+using System.Threading;
+using System.ServiceModel;
+using System.Data.Common;
+
+namespace HeuristicLab.Grid {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
+  public class EngineStore : IEngineStore {
+    private Database database;
+
+    private static readonly string dbFile = AppDomain.CurrentDomain.BaseDirectory + "/enginestore.db3";
+    private static readonly string connectionString = "Data Source=\"" + dbFile + "\";Pooling=False";
+
+    private int waitingJobs;
+    public int WaitingJobs {
+      get {
+        return waitingJobs;
+      }
+    }
+    private int runningJobs;
+    public int RunningJobs {
+      get {
+        return runningJobs;
+      }
+    }
+    private int results;
+    public int WaitingResults {
+      get {
+        return results;
+      }
+    }
+    private object locker = new object();
+    public EngineStore() {
+      DbProviderFactory fact;
+      fact = DbProviderFactories.GetFactory("System.Data.SQLite");
+      if(!System.IO.File.Exists(dbFile)) {
+        database = new Database(connectionString);
+        database.CreateNew();
+      } else {
+        database = new Database(connectionString);
+      }
+
+      // init counters
+      waitingJobs = (int)database.GetJobCount(JobState.Waiting);
+      runningJobs = (int)database.GetJobCount(JobState.Busy);
+      results = (int)database.GetJobCount(JobState.Finished);
+    }
+
+    public bool TryTakeEngine(out Guid guid, out byte[] engine) {
+      JobEntry nextWaitingJob = database.GetNextWaitingJob();
+      if(nextWaitingJob == null) {
+        guid = Guid.Empty; engine = null;
+        return false;
+      } else {
+        guid = nextWaitingJob.Guid;
+        engine = nextWaitingJob.RawData;
+        lock(locker) {
+          runningJobs++;
+          waitingJobs--;
+        }
+        return true;
+      }
+    }
+
+    public void StoreResult(Guid guid, byte[] result) {
+      database.DeleteExpiredResults();
+      // add the new result
+      database.SetJobResult(guid, result);
+      lock(locker) {
+        results++;
+        runningJobs--;
+      }
+    }
+
+    internal void AddEngine(Guid guid, byte[] engine) {
+      database.InsertJob(guid, JobState.Waiting, engine);
+      lock(locker) {
+        waitingJobs++;
+      }
+    }
+
+    internal byte[] GetResult(Guid guid) {
+      if(GetJobState(guid) == JobState.Finished) {
+        JobEntry entry = database.GetJob(guid);
+        return entry.RawData;
+      } else {
+        // JobState is Busy, Waiting or Unknown
+        // no result yet, check for which jobs we waited too long and requeue those jobs
+        database.RestartExpiredActiveJobs();
+        return null;
+      }
+    }
+
+    internal JobState GetJobState(Guid guid) {
+      return database.GetJobState(guid);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridClient.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridClient.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridClient.cs	(revision 1270)
@@ -0,0 +1,196 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using System.Diagnostics;
+using System.Threading;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  class GridClient {
+    private string uri;
+    private ChannelFactory<IEngineStore> factory;
+    private System.Timers.Timer fetchOperationTimer;
+    private IEngineStore engineStore;
+    private object connectionLock = new object();
+    private const int CONNECTION_RETRY_TIMEOUT_SEC = 10;
+    private const int MAX_RETRIES = 10;
+
+    public bool Waiting {
+      get {
+        return !executing && !stopped;
+      }
+    }
+
+    private bool executing;
+    public bool Executing {
+      get {
+        return executing;
+      }
+    }
+
+    private bool stopped;
+    public bool Stopped {
+      get {
+        return stopped;
+      }
+    }
+
+    private string statusMessage = "";
+    public string StatusMessage {
+      get {
+        return statusMessage;
+      }
+    }
+
+    internal GridClient() {
+      fetchOperationTimer = new System.Timers.Timer();
+      fetchOperationTimer.Interval = 200;
+      fetchOperationTimer.Elapsed += new System.Timers.ElapsedEventHandler(fetchOperationTimer_Elapsed);
+      stopped = true;
+    }
+
+    internal void Start(string uri) {
+      try {
+        this.uri = uri;
+        ResetConnection();
+        fetchOperationTimer.Start();
+        stopped = false;
+      } catch(CommunicationException ex) {
+        statusMessage = DateTime.Now.ToShortTimeString()+": Exception while connecting to the server: " + ex.Message;
+        fetchOperationTimer.Stop();
+      }
+    }
+
+    internal void Stop() {
+      fetchOperationTimer.Stop();
+      lock(connectionLock) {
+        if(factory.State == CommunicationState.Opened || factory.State == CommunicationState.Opening) {
+          IAsyncResult closeResult = factory.BeginClose(null, null);
+          factory.EndClose(closeResult);
+        }
+      }
+      stopped = true;
+    }
+
+    private void ResetConnection() {
+      Trace.TraceInformation("Reset connection in GridClient");
+      NetTcpBinding binding = new NetTcpBinding();
+      binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
+      binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
+      binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
+      factory = new ChannelFactory<IEngineStore>(binding);
+      engineStore = factory.CreateChannel(new EndpointAddress(uri));
+    }
+
+    private void fetchOperationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      try {
+        byte[] engineXml = null;
+        Guid currentGuid;
+        // first stop the timer!
+        fetchOperationTimer.Stop();
+        bool gotEngine = false;
+        lock(connectionLock) {
+          if(stopped) return;
+          try {
+            gotEngine = engineStore.TryTakeEngine(out currentGuid, out engineXml);
+          } catch(TimeoutException) {
+            ChangeStatusMessage("TimeoutException while trying to get an engine");
+            currentGuid = Guid.Empty;
+            // timeout -> just start the timer again
+            fetchOperationTimer.Interval = 5000;
+            fetchOperationTimer.Start();
+          } catch(CommunicationException) {
+            ChangeStatusMessage("CommunicationException while trying to get an engine");
+            // connection problem -> reset connection and start the timer again
+            ResetConnection();
+            currentGuid = Guid.Empty;
+            fetchOperationTimer.Interval = 5000;
+            fetchOperationTimer.Start();
+          }
+        }
+        // got engine from server and user didn't press stop -> execute the engine
+        if(gotEngine && !stopped) {
+          executing = true;
+          AppDomain engineDomain = PluginManager.Manager.CreateAndInitAppDomain("Engine domain");
+          Type engineRunnerType = typeof(EngineRunner);
+          
+          EngineRunner runner = (EngineRunner)engineDomain.CreateInstanceAndUnwrap(engineRunnerType.Assembly.GetName().Name, engineRunnerType.FullName);
+          byte[] resultXml = runner.Execute(engineXml);
+          bool success = false;
+          int retries = 0;
+          do {
+            lock(connectionLock) {
+              if(!stopped) {
+                try {
+                  engineStore.StoreResult(currentGuid, resultXml);
+                  success = true;
+                } catch(TimeoutException) {
+                  ChangeStatusMessage("TimeoutException while trying to store the result of an engine");
+                  success = false;
+                  retries++;
+                  Thread.Sleep(TimeSpan.FromSeconds(CONNECTION_RETRY_TIMEOUT_SEC));
+                } catch(CommunicationException) {
+                  ChangeStatusMessage("CommunicationException while trying to store the result of an engine");
+                  ResetConnection();
+                  success = false;
+                  retries++;
+                  Thread.Sleep(TimeSpan.FromSeconds(CONNECTION_RETRY_TIMEOUT_SEC));
+                }
+              }
+            }
+          } while(!stopped && !success && retries < MAX_RETRIES);
+          // dispose the AppDomain that was created to run the job
+          AppDomain.Unload(engineDomain);
+          executing = false;
+          // ok if we could store the result it's probable that the server can send us another engine use a small time-interval
+          if(success)
+            fetchOperationTimer.Interval = 100;
+          else fetchOperationTimer.Interval = 30000; // if there were problems -> sleep for a longer time
+          // clear state
+          currentGuid = Guid.Empty;
+          // start the timer
+          fetchOperationTimer.Start();
+        } else {
+          // ok we didn't get engine -> if the user didn't press stop this means that the server doesn't have engines for us
+          // if the user pressed stop we must not start the timer
+          if(!stopped) {
+            // start the timer again
+            fetchOperationTimer.Interval = 5000;
+            fetchOperationTimer.Start();
+          }
+        }
+      } catch(Exception ex) {
+        // in case something goes wrong when creating / unloading the AppDomain
+        ChangeStatusMessage("Uncaught exception " + ex.Message);
+        Stop();
+      }
+    }
+
+    private void ChangeStatusMessage(string msg) {
+      Trace.TraceWarning(msg);
+      statusMessage = DateTime.Now.ToShortTimeString() + ": " + msg;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridClientApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridClientApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridClientApplication.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  [ClassInfo(Name = "Grid Client", Description="Client application for the distributed engine grid.", AutoRestart = true)]
+  class GridClientApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new ClientForm();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridServer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridServer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridServer.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ServiceModel;
+
+namespace HeuristicLab.Grid {
+  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
+  public class GridServer : IGridServer {
+
+    private EngineStore engineStore;
+
+    public GridServer(EngineStore engineStore) {
+      this.engineStore = engineStore;
+    }
+
+    public JobState JobState(Guid guid) {
+      return engineStore.GetJobState(guid);
+    }
+
+    public Guid BeginExecuteEngine(byte[] engine) {
+      Guid guid = Guid.NewGuid();
+      engineStore.AddEngine(guid, engine);
+      return guid;
+    }
+
+    public byte[] TryEndExecuteEngine(Guid guid) {
+      return engineStore.GetResult(guid);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridServerApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridServerApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/GridServerApplication.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  [ClassInfo(Name = "Grid Server", Description = "Server application for the distributed engine grid.", AutoRestart=true)]
+  class GridServerApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new ServerForm();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/HeuristicLab.Grid.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/HeuristicLab.Grid.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/HeuristicLab.Grid.csproj	(revision 1270)
@@ -0,0 +1,140 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{545CE756-98D8-423B-AC2E-6E7D70926E5C}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Grid</RootNamespace>
+    <AssemblyName>HeuristicLab.Grid-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Grid-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Grid-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClientForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ClientForm.designer.cs">
+      <DependentUpon>ClientForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Database.cs" />
+    <Compile Include="EngineRunner.cs" />
+    <Compile Include="EngineStore.cs" />
+    <Compile Include="GridClient.cs" />
+    <Compile Include="GridClientApplication.cs" />
+    <Compile Include="GridServer.cs" />
+    <Compile Include="GridServerApplication.cs" />
+    <Compile Include="HeuristicLabGridPlugin.cs" />
+    <Compile Include="IEngineStore.cs" />
+    <Compile Include="IGridServer.cs" />
+    <Compile Include="JobManager.cs" />
+    <Compile Include="ProcessingEngine.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="JobEntry.cs" />
+    <Compile Include="ServerForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ServerForm.designer.cs">
+      <DependentUpon>ServerForm.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ClientForm.resx">
+      <DependentUpon>ClientForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ServerForm.resx">
+      <DependentUpon>ServerForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/HeuristicLabGridPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/HeuristicLabGridPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/HeuristicLabGridPlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  [ClassInfo(Name = "HeuristicLab.Grid-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Grid-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabGridPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/IEngineStore.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/IEngineStore.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/IEngineStore.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.ServiceModel;
+
+namespace HeuristicLab.Grid {
+
+  [ServiceContract(Namespace = "http://HeuristicLab.Grid")]
+  interface IEngineStore {
+    [OperationContract]
+    bool TryTakeEngine(out Guid guid, out byte[] engine);
+
+    [OperationContract]
+    void StoreResult(Guid guid, byte[] result);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/IGridServer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/IGridServer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/IGridServer.cs	(revision 1270)
@@ -0,0 +1,45 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ServiceModel;
+using System.Text;
+
+namespace HeuristicLab.Grid {
+  public enum JobState {
+    Unknown,
+    Waiting,
+    Busy,
+    Finished
+  }
+
+
+  [ServiceContract(Namespace = "http://HeuristicLab.Grid")]
+  public interface IGridServer {
+    [OperationContract]
+    JobState JobState(Guid guid);
+    [OperationContract]
+    Guid BeginExecuteEngine(byte[] engine);
+    [OperationContract]
+    byte[] TryEndExecuteEngine(Guid engineGuid);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/JobEntry.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/JobEntry.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/JobEntry.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Grid {
+  public class JobEntry {
+    public Guid Guid { get; set; }
+    public JobState Status { get; set; }
+    public DateTime CreationTime { get; set; }
+    public DateTime? StartTime { get; set; }
+    public byte[] RawData { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/JobManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/JobManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/JobManager.cs	(revision 1270)
@@ -0,0 +1,289 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Grid;
+using System.Threading;
+using HeuristicLab.Core;
+using System.IO;
+using System.Windows.Forms;
+using System.Diagnostics;
+
+namespace HeuristicLab.Grid {
+  public class JobExecutionException : ApplicationException {
+    public JobExecutionException(string msg) : base(msg) { }
+  }
+
+  public class JobManager {
+    private const int MAX_RESTARTS = 5;
+    private const int MAX_CONNECTION_RETRIES = 10;
+    private const int RETRY_TIMEOUT_SEC = 60;
+    private const int RESULT_POLLING_TIMEOUT = 5;
+
+    private class Job {
+      public Guid guid;
+      public ProcessingEngine engine;
+      public ManualResetEvent waitHandle;
+      public int restarts;
+    }
+
+    private IGridServer server;
+    private string address;
+    private object waitingQueueLock = new object();
+    private Queue<Job> waitingJobs = new Queue<Job>();
+    private object runningQueueLock = new object();
+    private Queue<Job> runningJobs = new Queue<Job>();
+    private Dictionary<AtomicOperation, byte[]> results = new Dictionary<AtomicOperation, byte[]>();
+
+    private List<IOperation> erroredOperations = new List<IOperation>();
+    private object connectionLock = new object();
+    private object dictionaryLock = new object();
+
+    private AutoResetEvent runningWaitHandle = new AutoResetEvent(false);
+    private AutoResetEvent waitingWaitHandle = new AutoResetEvent(false);
+
+    private ChannelFactory<IGridServer> factory;
+
+    public JobManager(string address) {
+      this.address = address;
+      Thread starterThread = new Thread(StartEngines);
+      Thread resultsGatheringThread = new Thread(GetResults);
+      starterThread.Start();
+      resultsGatheringThread.Start();
+    }
+
+    public void Reset() {
+      ResetConnection();
+      lock(dictionaryLock) {
+        foreach(Job j in waitingJobs) {
+          j.waitHandle.Close();
+        }
+        waitingJobs.Clear();
+        foreach(Job j in runningJobs) {
+          j.waitHandle.Close();
+        }
+        runningJobs.Clear();
+        results.Clear();
+        erroredOperations.Clear();
+      }
+    }
+
+    private void ResetConnection() {
+      Trace.TraceInformation("Reset connection in JobManager");
+      lock(connectionLock) {
+        // open a new channel
+        NetTcpBinding binding = new NetTcpBinding();
+        binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
+        binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
+        binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
+
+        factory = new ChannelFactory<IGridServer>(binding);
+        server = factory.CreateChannel(new EndpointAddress(address));
+      }
+    }
+
+    public void StartEngines() {
+      try {
+        while(true) {
+          Job job = null;
+          lock(waitingQueueLock) {
+            if(waitingJobs.Count > 0) job = waitingJobs.Dequeue();
+          }
+          if(job==null) waitingWaitHandle.WaitOne(); // no jobs waiting
+          else {
+            Guid currentEngineGuid = TryStartExecuteEngine(job.engine);
+            if(currentEngineGuid == Guid.Empty) {
+              // couldn't start the job -> requeue
+              if(job.restarts < MAX_RESTARTS) {
+                job.restarts++;
+                lock(waitingQueueLock) waitingJobs.Enqueue(job);
+                waitingWaitHandle.Set();
+              } else {
+                // max restart count reached -> give up on this job and flag error
+                lock(dictionaryLock) {
+                  erroredOperations.Add(job.engine.InitialOperation);
+                  job.waitHandle.Set();
+                }
+              }
+            } else {
+              // job started successfully
+              job.guid = currentEngineGuid;
+              lock(runningQueueLock) {
+                runningJobs.Enqueue(job);
+                runningWaitHandle.Set();
+              }
+            }
+          }
+        }
+      } catch(Exception e) {
+        Trace.TraceError("Exception "+e+" in JobManager.StartEngines() killed the start-engine thread\n"+e.StackTrace);
+      }
+    }
+
+
+    public void GetResults() {
+      try {
+        while(true) {
+          Job job = null;
+          lock(runningQueueLock) {
+            if(runningJobs.Count > 0) job = runningJobs.Dequeue();
+          }
+          if(job == null) runningWaitHandle.WaitOne(); // no jobs running
+          else {
+            byte[] zippedResult = TryEndExecuteEngine(server, job.guid);
+            if(zippedResult != null) { // successful
+              lock(dictionaryLock) {
+                // store result
+                results[job.engine.InitialOperation] = zippedResult;
+                // notify consumer that result is ready
+                job.waitHandle.Set();
+              }
+            } else {
+              // there was a problem -> check the state of the job and restart if necessary
+              JobState jobState = TryGetJobState(server, job.guid);
+              if(jobState == JobState.Unknown) {
+                job.restarts++;
+                lock(waitingQueueLock) {
+                  waitingJobs.Enqueue(job);
+                  waitingWaitHandle.Set();
+                }
+              } else {
+                // job still active at the server 
+                lock(runningQueueLock) {
+                  runningJobs.Enqueue(job);
+                  runningWaitHandle.Set();
+                }
+                Thread.Sleep(TimeSpan.FromSeconds(RESULT_POLLING_TIMEOUT)); // sleep a while before trying to get the next result
+              }
+            }
+          }
+        }
+      } catch(Exception e) {
+        Trace.TraceError("Exception " + e + " in JobManager.GetResults() killed the results-gathering thread\n"+ e.StackTrace);
+      }
+    }
+
+    public WaitHandle BeginExecuteOperation(IScope globalScope, AtomicOperation operation) {
+      return BeginExecuteEngine(new ProcessingEngine(globalScope, operation));
+    }
+
+    public WaitHandle BeginExecuteEngine(ProcessingEngine engine) {
+      Job job = new Job();
+      job.engine = engine;
+      job.waitHandle = new ManualResetEvent(false);
+      job.restarts = 0;
+      lock(waitingQueueLock) {
+        waitingJobs.Enqueue(job);
+      }
+      waitingWaitHandle.Set();
+      return job.waitHandle;
+    }
+
+    private byte[] ZipEngine(ProcessingEngine engine) {
+      return PersistenceManager.SaveToGZip(engine);
+    }
+
+    public ProcessingEngine EndExecuteOperation(AtomicOperation operation) {
+      if(erroredOperations.Contains(operation)) {
+        erroredOperations.Remove(operation);
+        throw new JobExecutionException("Maximal number of job restarts reached. There is a problem with the connection to the grid-server.");
+      } else {
+        byte[] zippedResult = null;
+        lock(dictionaryLock) {
+          zippedResult = results[operation];
+          results.Remove(operation);
+        }
+        // restore the engine 
+        return (ProcessingEngine)PersistenceManager.RestoreFromGZip(zippedResult);
+      }
+    }
+
+    private Guid TryStartExecuteEngine(ProcessingEngine engine) {
+      byte[] zippedEngine = ZipEngine(engine);
+      int retries = 0;
+      Guid guid = Guid.Empty;
+      do {
+        try {
+          lock(connectionLock) {
+            guid = server.BeginExecuteEngine(zippedEngine);
+          }
+          return guid;
+        } catch(TimeoutException) {
+          retries++;
+          Thread.Sleep(TimeSpan.FromSeconds(RETRY_TIMEOUT_SEC));
+        } catch(CommunicationException) {
+          ResetConnection();
+          retries++;
+          Thread.Sleep(TimeSpan.FromSeconds(RETRY_TIMEOUT_SEC));
+        }
+      } while(retries < MAX_CONNECTION_RETRIES);
+      Trace.TraceWarning("Reached max connection retries in TryStartExecuteEngine");
+      return Guid.Empty;
+    }
+
+    private byte[] TryEndExecuteEngine(IGridServer server, Guid engineGuid) {
+      int retries = 0;
+      do {
+        try {
+          lock(connectionLock) {
+            byte[] zippedResult = server.TryEndExecuteEngine(engineGuid);
+            return zippedResult;
+          }
+        } catch(TimeoutException) {
+          retries++;
+          Thread.Sleep(TimeSpan.FromSeconds(RETRY_TIMEOUT_SEC));
+        } catch(CommunicationException) {
+          ResetConnection();
+          retries++;
+          Thread.Sleep(TimeSpan.FromSeconds(RETRY_TIMEOUT_SEC));
+        }
+      } while(retries < MAX_CONNECTION_RETRIES);
+      Trace.TraceWarning("Reached max connection retries in TryEndExecuteEngine");
+      return null;
+    }
+
+    private JobState TryGetJobState(IGridServer server, Guid engineGuid) {
+      // check if the server is still working on the job
+      int retries = 0;
+      do {
+        try {
+          lock(connectionLock) {
+            JobState jobState = server.JobState(engineGuid);
+            return jobState;
+          }
+        } catch(TimeoutException) {
+          retries++;
+          Thread.Sleep(TimeSpan.FromSeconds(RETRY_TIMEOUT_SEC));
+        } catch(CommunicationException) {
+          ResetConnection();
+          retries++;
+          Thread.Sleep(TimeSpan.FromSeconds(RETRY_TIMEOUT_SEC));
+        }
+      } while(retries < MAX_CONNECTION_RETRIES);
+      Trace.TraceWarning("Reached max connection retries in TryGetJobState");
+      return JobState.Unknown;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ProcessingEngine.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ProcessingEngine.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ProcessingEngine.cs	(revision 1270)
@@ -0,0 +1,137 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Threading;
+using System.Diagnostics;
+
+namespace HeuristicLab.Grid {
+  public class ProcessingEngine : EngineBase {
+    private AtomicOperation initialOperation;
+    public AtomicOperation InitialOperation {
+      get { return initialOperation; }
+      set { initialOperation = value; }
+    }
+
+    private string errorMessage;
+    public string ErrorMessage {
+      get { return errorMessage; }
+    }
+
+    private bool suspended;
+    public bool Suspended {
+      get { return suspended; }
+    }
+
+    public ProcessingEngine()
+      : base() {
+    }
+
+    public ProcessingEngine(IScope globalScope, AtomicOperation initialOperation)
+      : base() {
+      this.initialOperation = initialOperation;
+      myGlobalScope = globalScope;
+      myExecutionStack.Push(initialOperation);
+    }
+
+    private void Suspend() {
+      Abort();
+      suspended = true;
+    }
+
+    public override void Execute() {
+      suspended = false;
+      base.Execute();
+    }
+
+    public override void ExecuteSteps(int steps) {
+      suspended = false;
+      base.ExecuteSteps(steps);
+    }
+
+    protected override void ProcessNextOperation() {
+      IOperation operation = myExecutionStack.Pop();
+      if(operation is AtomicOperation) {
+        AtomicOperation atomicOperation = (AtomicOperation)operation;
+        IOperation next = null;
+        try {
+          next = atomicOperation.Operator.Execute(atomicOperation.Scope);
+        } catch(Exception ex) {
+          errorMessage = CreateErrorMessage(ex);
+          Trace.TraceWarning(errorMessage);
+          // push operation on stack again
+          myExecutionStack.Push(atomicOperation);
+          Abort();
+        }
+        if(next != null)
+          myExecutionStack.Push(next);
+        if(atomicOperation.Operator.Breakpoint) Suspend();
+      } else if(operation is CompositeOperation) {
+        CompositeOperation compositeOperation = (CompositeOperation)operation;
+        for(int i = compositeOperation.Operations.Count - 1; i >= 0; i--)
+          myExecutionStack.Push(compositeOperation.Operations[i]);
+      }
+    }
+
+    #region persistence
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute canceledAttr = document.CreateAttribute("Canceled");
+      canceledAttr.Value = Canceled.ToString();
+      node.Attributes.Append(canceledAttr);
+      XmlAttribute suspendedAttr = document.CreateAttribute("Suspended");
+      suspendedAttr.Value = Suspended.ToString();
+      node.Attributes.Append(suspendedAttr);
+      if(errorMessage != null) {
+        XmlAttribute errorMessageAttr = document.CreateAttribute("ErrorMessage");
+        errorMessageAttr.Value = ErrorMessage;
+        node.Attributes.Append(errorMessageAttr);
+      }
+      node.AppendChild(PersistenceManager.Persist("InitialOperation", initialOperation, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myCanceled = bool.Parse(node.Attributes["Canceled"].Value);
+      suspended = bool.Parse(node.Attributes["Suspended"].Value);
+      if(node.Attributes["ErrorMessage"] != null) errorMessage = node.Attributes["ErrorMessage"].Value;
+      initialOperation = (AtomicOperation)PersistenceManager.Restore(node.SelectSingleNode("InitialOperation"), restoredObjects);
+    }
+    #endregion
+
+    private string CreateErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while(ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Grid")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.cs	(revision 1270)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using System.Diagnostics;
+
+namespace HeuristicLab.Grid {
+  public partial class ServerForm : Form {
+
+    private EngineStore jobStore;
+    private GridServer server;
+    private ServiceHost externalHost;
+    private ServiceHost internalHost;
+
+    public ServerForm() {
+      InitializeComponent();
+
+      IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
+      // windows XP returns the external ip on index 0 while windows vista returns the external ip as one of the last entries
+      // also if IPv6 protocol is installed we want to find an entry that is IPv4
+      int index = 0;
+      if (System.Environment.OSVersion.Version.Major >= 6) {
+        for (index = addresses.Length - 1; index >= 0; index--)
+          if (addresses[index].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
+            break;
+      }
+      externalAddressTextBox.Text = "net.tcp://" + addresses[index] + ":8000/Grid/Service";
+      internalAddressTextBox.Text = "net.tcp://" + addresses[index] + ":8001/Grid/JobStore";
+
+      jobStore = new EngineStore();
+      server = new GridServer(jobStore);
+      Start();
+    }
+
+    private void Start() {
+      externalHost = new ServiceHost(server, new Uri(externalAddressTextBox.Text));
+      internalHost = new ServiceHost(jobStore, new Uri(internalAddressTextBox.Text));
+      ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior();
+      throttlingBehavior.MaxConcurrentSessions = 20;
+      internalHost.Description.Behaviors.Add(throttlingBehavior);
+      try {
+        NetTcpBinding binding = new NetTcpBinding();
+        binding.MaxReceivedMessageSize = 100000000; // 100Mbytes
+        binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
+        binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
+
+        externalHost.AddServiceEndpoint(typeof(IGridServer), binding, externalAddressTextBox.Text);
+        externalHost.Open();
+
+        internalHost.AddServiceEndpoint(typeof(IEngineStore), binding, internalAddressTextBox.Text);
+        internalHost.Open();
+      } catch (CommunicationException ex) {
+        MessageBox.Show("An exception occurred: " + ex.Message);
+        externalHost.Abort();
+        internalHost.Abort();
+      }
+    }
+    private void statusUpdateTimer_Tick(object sender, EventArgs e) {
+      waitingJobsTextBox.Text = jobStore.WaitingJobs+"";
+      waitingResultsTextBox.Text = jobStore.WaitingResults+"";
+      runningJobsTextBox.Text = jobStore.RunningJobs+"";
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.designer.cs	(revision 1270)
@@ -0,0 +1,194 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Grid {
+  partial class ServerForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      this.externalAddressTextBox = new System.Windows.Forms.TextBox();
+      this.externalAddressLabel = new System.Windows.Forms.Label();
+      this.internalAddressLabel = new System.Windows.Forms.Label();
+      this.internalAddressTextBox = new System.Windows.Forms.TextBox();
+      this.runningJobsLabel = new System.Windows.Forms.Label();
+      this.runningJobsTextBox = new System.Windows.Forms.TextBox();
+      this.waitingJobsLabel = new System.Windows.Forms.Label();
+      this.waitingJobsTextBox = new System.Windows.Forms.TextBox();
+      this.waitingResultsLabel = new System.Windows.Forms.Label();
+      this.waitingResultsTextBox = new System.Windows.Forms.TextBox();
+      this.statusUpdateTimer = new System.Windows.Forms.Timer(this.components);
+      this.SuspendLayout();
+      // 
+      // externalAddressTextBox
+      // 
+      this.externalAddressTextBox.Location = new System.Drawing.Point(106, 6);
+      this.externalAddressTextBox.Name = "externalAddressTextBox";
+      this.externalAddressTextBox.ReadOnly = true;
+      this.externalAddressTextBox.Size = new System.Drawing.Size(229, 20);
+      this.externalAddressTextBox.TabIndex = 0;
+      // 
+      // externalAddressLabel
+      // 
+      this.externalAddressLabel.AutoSize = true;
+      this.externalAddressLabel.Location = new System.Drawing.Point(12, 9);
+      this.externalAddressLabel.Name = "externalAddressLabel";
+      this.externalAddressLabel.Size = new System.Drawing.Size(88, 13);
+      this.externalAddressLabel.TabIndex = 3;
+      this.externalAddressLabel.Text = "&External address:";
+      // 
+      // internalAddressLabel
+      // 
+      this.internalAddressLabel.AutoSize = true;
+      this.internalAddressLabel.Location = new System.Drawing.Point(12, 34);
+      this.internalAddressLabel.Name = "internalAddressLabel";
+      this.internalAddressLabel.Size = new System.Drawing.Size(85, 13);
+      this.internalAddressLabel.TabIndex = 5;
+      this.internalAddressLabel.Text = "&Internal address:";
+      // 
+      // internalAddressTextBox
+      // 
+      this.internalAddressTextBox.Location = new System.Drawing.Point(106, 31);
+      this.internalAddressTextBox.Name = "internalAddressTextBox";
+      this.internalAddressTextBox.ReadOnly = true;
+      this.internalAddressTextBox.Size = new System.Drawing.Size(229, 20);
+      this.internalAddressTextBox.TabIndex = 4;
+      // 
+      // runningJobsLabel
+      // 
+      this.runningJobsLabel.AutoSize = true;
+      this.runningJobsLabel.Location = new System.Drawing.Point(12, 99);
+      this.runningJobsLabel.Name = "runningJobsLabel";
+      this.runningJobsLabel.Size = new System.Drawing.Size(72, 13);
+      this.runningJobsLabel.TabIndex = 9;
+      this.runningJobsLabel.Text = "&Running jobs:";
+      // 
+      // runningJobsTextBox
+      // 
+      this.runningJobsTextBox.Location = new System.Drawing.Point(106, 96);
+      this.runningJobsTextBox.Name = "runningJobsTextBox";
+      this.runningJobsTextBox.ReadOnly = true;
+      this.runningJobsTextBox.Size = new System.Drawing.Size(90, 20);
+      this.runningJobsTextBox.TabIndex = 8;
+      this.runningJobsTextBox.Text = "0";
+      this.runningJobsTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      // 
+      // waitingJobsLabel
+      // 
+      this.waitingJobsLabel.AutoSize = true;
+      this.waitingJobsLabel.Location = new System.Drawing.Point(12, 74);
+      this.waitingJobsLabel.Name = "waitingJobsLabel";
+      this.waitingJobsLabel.Size = new System.Drawing.Size(68, 13);
+      this.waitingJobsLabel.TabIndex = 7;
+      this.waitingJobsLabel.Text = "&Waiting jobs:";
+      // 
+      // waitingJobsTextBox
+      // 
+      this.waitingJobsTextBox.Location = new System.Drawing.Point(106, 71);
+      this.waitingJobsTextBox.Name = "waitingJobsTextBox";
+      this.waitingJobsTextBox.ReadOnly = true;
+      this.waitingJobsTextBox.Size = new System.Drawing.Size(90, 20);
+      this.waitingJobsTextBox.TabIndex = 6;
+      this.waitingJobsTextBox.Text = "0";
+      this.waitingJobsTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      // 
+      // waitingResultsLabel
+      // 
+      this.waitingResultsLabel.AutoSize = true;
+      this.waitingResultsLabel.Location = new System.Drawing.Point(12, 125);
+      this.waitingResultsLabel.Name = "waitingResultsLabel";
+      this.waitingResultsLabel.Size = new System.Drawing.Size(79, 13);
+      this.waitingResultsLabel.TabIndex = 11;
+      this.waitingResultsLabel.Text = "&Waiting results:";
+      // 
+      // waitingResultsTextBox
+      // 
+      this.waitingResultsTextBox.Location = new System.Drawing.Point(106, 122);
+      this.waitingResultsTextBox.Name = "waitingResultsTextBox";
+      this.waitingResultsTextBox.ReadOnly = true;
+      this.waitingResultsTextBox.Size = new System.Drawing.Size(90, 20);
+      this.waitingResultsTextBox.TabIndex = 10;
+      this.waitingResultsTextBox.Text = "0";
+      this.waitingResultsTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      // 
+      // statusUpdateTimer
+      // 
+      this.statusUpdateTimer.Enabled = true;
+      this.statusUpdateTimer.Interval = 1000;
+      this.statusUpdateTimer.Tick += new System.EventHandler(this.statusUpdateTimer_Tick);
+      // 
+      // ServerForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(347, 150);
+      this.Controls.Add(this.waitingResultsLabel);
+      this.Controls.Add(this.waitingResultsTextBox);
+      this.Controls.Add(this.runningJobsLabel);
+      this.Controls.Add(this.runningJobsTextBox);
+      this.Controls.Add(this.waitingJobsLabel);
+      this.Controls.Add(this.waitingJobsTextBox);
+      this.Controls.Add(this.internalAddressLabel);
+      this.Controls.Add(this.internalAddressTextBox);
+      this.Controls.Add(this.externalAddressLabel);
+      this.Controls.Add(this.externalAddressTextBox);
+      this.Name = "ServerForm";
+      this.Text = "Grid Server";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox externalAddressTextBox;
+    private System.Windows.Forms.Label externalAddressLabel;
+    private System.Windows.Forms.Label internalAddressLabel;
+    private System.Windows.Forms.TextBox internalAddressTextBox;
+    private System.Windows.Forms.Label runningJobsLabel;
+    private System.Windows.Forms.TextBox runningJobsTextBox;
+    private System.Windows.Forms.Label waitingJobsLabel;
+    private System.Windows.Forms.TextBox waitingJobsTextBox;
+    private System.Windows.Forms.Label waitingResultsLabel;
+    private System.Windows.Forms.TextBox waitingResultsTextBox;
+    private System.Windows.Forms.Timer statusUpdateTimer;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Grid/ServerForm.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="statusUpdateTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/CommonPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/CommonPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/CommonPlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Client.Common {
+  [ClassInfo(Name = "HeuristicLab.Hive.Client.Common-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Client.Common-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class CommonPlugin: PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/HeuristicLab.Hive.Client.Common.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/HeuristicLab.Hive.Client.Common.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/HeuristicLab.Hive.Client.Common.csproj	(revision 1270)
@@ -0,0 +1,110 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{89F4BC52-C174-481E-9BD2-3814171020E8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Client.Common</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Client.Common-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <DelaySign>false</DelaySign>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CommonPlugin.cs" />
+    <Compile Include="Logging.cs" />
+    <Compile Include="MessageQueue.cs" />
+    <Compile Include="NetworkEnum.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Interfaces\" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/Logging.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/Logging.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/Logging.cs	(revision 1270)
@@ -0,0 +1,86 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+
+namespace HeuristicLab.Hive.Client.Common {
+  /// <summary>
+  /// The Logging class uses the Windows Event logging mechanism. It writes the logs to a custom log 
+  /// called "Hive Client". For the creation of the Hive Client Log the program must be executed with
+  /// Administrator privileges   
+  /// </summary>
+  public class Logging {      
+    private static Logging instance = null;
+    private EventLog eventLogger = null;
+
+    /// <summary>
+    /// This is an implementation of the singleton design pattern.
+    /// </summary>
+    /// <returns>the instance of the logger</returns>
+    public static Logging GetInstance() {
+      if (instance == null)
+        instance = new Logging();
+      return instance;
+    }
+
+    private Logging() {      
+      eventLogger = new EventLog("Hive Client");          
+    }
+
+    /// <summary>
+    /// Writes an Info Log-Entry
+    /// </summary>
+    /// <param name="source">string representation of the caller</param>
+    /// <param name="message">the message</param>
+    public void Info(String source, String message) {
+      eventLogger.Source = source;
+      eventLogger.WriteEntry(message);      
+      eventLogger.Close();
+    }
+
+    /// <summary>
+    /// Writes an Error Log-Entry
+    /// </summary>
+    /// <param name="source">string representation of the caller</param>
+    /// <param name="message">the message</param>
+    public void Error(String source, String message) {
+      eventLogger.Source = source;
+      eventLogger.WriteEntry(message, EventLogEntryType.Error);
+      eventLogger.Close();
+    }
+
+    /// <summary>
+    /// Writes an Error Log-Entry
+    /// </summary>
+    /// <param name="source">string representation of the caller</param>
+    /// <param name="message">the message</param>
+    /// <param name="e">the exception</param>
+    public void Error(String source, String message, Exception e) {
+      eventLogger.Source = source;
+      eventLogger.WriteEntry(message +"\n" + e.ToString(), EventLogEntryType.Error);
+      eventLogger.Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/MessageQueue.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/MessageQueue.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/MessageQueue.cs	(revision 1270)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Client.Common {
+
+  /// <summary>
+  /// Queue for the communication between threads and AppDomains. The Queue is threadsafe and uses a semaphore
+  /// </summary>
+  public class MessageQueue : MarshalByRefObject {
+
+    private static MessageQueue instance = null;
+    
+    private Queue<MessageContainer> queue = null;
+    private Semaphore semaphore = null;
+
+    /// <summary>
+    /// Returns the Instance of the MessageQueue. If the instance is null, it will be created.
+    /// This is a Implementation of the Singleton pattern
+    /// </summary>
+    /// <returns>the MessageQueue Instance</returns>
+    public static MessageQueue GetInstance() {
+      if (instance == null) {
+        instance = new MessageQueue();
+      }
+      return instance;
+    }
+
+    /// <summary>
+    /// Creates a new MessageQueue Object.
+    /// A new Queue and a Semaphore is created. The Semaphore is set to a max size of 5000.
+    /// </summary>
+    private MessageQueue() {
+      queue = new Queue<MessageContainer>();
+      semaphore = new Semaphore(0, 5000);
+    }
+
+    /// <summary>
+    /// Returns the oldest MessageContainer Object from the Queue. 
+    /// </summary>
+    /// <returns>the oldest MessageContainer Object</returns>
+    public MessageContainer GetMessage() {
+      semaphore.WaitOne();
+      lock (this) {
+        if (queue.Count > 0) {
+          return queue.Dequeue();
+        }
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Adds a MessageContainer Object to the Queue 
+    /// </summary>
+    /// <param name="messageContainer">the MessageContainer</param>
+    public void AddMessage(MessageContainer messageContainer) {
+      lock (this) {
+        queue.Enqueue(messageContainer);
+        semaphore.Release();
+      }
+    }
+
+    /// <summary>
+    /// Adds a message to the Queue. The MessageContainer Object is built in the Method
+    /// </summary>
+    /// <param name="message">the Message</param>
+    public void AddMessage(MessageContainer.MessageType message) {
+      lock (this) {
+        queue.Enqueue(new MessageContainer(message));
+        semaphore.Release();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/NetworkEnum.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/NetworkEnum.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/NetworkEnum.cs	(revision 1270)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Client.Common {
+  public class NetworkEnum {
+    public enum WcfConnState { Connected, Disconnected, Failed, Loggedin }  
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Common/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// 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.Hive.Client.Common")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/CommunicationsPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/CommunicationsPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/CommunicationsPlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Client.Communication {
+  
+  [ClassInfo(Name = "HeuristicLab.Hive.Client.Communication-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Client.Communication-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class CommunicationsPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/HeuristicLab.Hive.Client.Communication.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/HeuristicLab.Hive.Client.Communication.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/HeuristicLab.Hive.Client.Communication.csproj	(revision 1270)
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Client.Communication</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Client.Communication-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CommunicationsPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Service References\ServerService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+    <Compile Include="WcfService.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Client.Common\HeuristicLab.Hive.Client.Common.csproj">
+      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
+      <Name>HeuristicLab.Hive.Client.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\ServerService\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ServerService\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ServerService\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.Response.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseHB.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseJob.datasource" />
+    <None Include="Properties\DataSources\HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource" />
+    <None Include="Service References\ServerService\Arrays.xsd" />
+    <None Include="Service References\ServerService\HeuristicLab.Hive.Contracts.BusinessObjects1.xsd" />
+    <None Include="Service References\ServerService\HeuristicLab.Hive.Contracts1.xsd" />
+    <None Include="Service References\ServerService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+    <None Include="Service References\ServerService\service1.wsdl" />
+    <None Include="Service References\ServerService\service2.xsd" />
+    <None Include="Service References\ServerService\service3.xsd" />
+    <None Include="Service References\ServerService\System1.xsd" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Communication")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.Response.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.Response.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.Response.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="Response" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.Response, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHB.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHB.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseHB.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseHB" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseHB, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseJob.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseJob.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseJob.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseJob" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseJob, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Properties/DataSources/HeuristicLab.Hive.Contracts.ResponseResultReceived.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ResponseResultReceived" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Contracts.ResponseResultReceived, HeuristicLab.Hive.Contracts-3.2, Version=3.2.0.969, Culture=neutral, PublicKeyToken=ba48961d6f65dcec</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Arrays.xsd	(revision 1270)
@@ -0,0 +1,21 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="ArrayOfKeyValueOflongdouble">
+    <xs:annotation>
+      <xs:appinfo>
+        <IsDictionary xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsDictionary>
+      </xs:appinfo>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="KeyValueOflongdouble">
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element name="Key" type="xs:long" />
+            <xs:element name="Value" type="xs:double" />
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfKeyValueOflongdouble" nillable="true" type="tns:ArrayOfKeyValueOflongdouble" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects.xsd	(revision 1270)
@@ -0,0 +1,64 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:complexType name="ClientInfo">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Resource">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
+          <xs:element minOccurs="0" name="ClientInfoId" type="xs:long" />
+          <xs:element minOccurs="0" name="Config" nillable="true" type="tns:ClientConfig" />
+          <xs:element minOccurs="0" name="CpuSpeedPerCore" type="xs:int" />
+          <xs:element minOccurs="0" name="Login" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Memory" type="xs:int" />
+          <xs:element minOccurs="0" name="NrOfCores" type="xs:int" />
+          <xs:element minOccurs="0" name="State" type="tns:State" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ClientInfo" nillable="true" type="tns:ClientInfo" />
+  <xs:complexType name="Resource">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="ResourceId" type="xs:long" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Resource" nillable="true" type="tns:Resource" />
+  <xs:complexType name="ClientConfig">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ClientConfigId" type="xs:long" />
+      <xs:element minOccurs="0" name="HeartBeatIntervall" type="xs:int" />
+      <xs:element minOccurs="0" name="UpDownTimeCalendar" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ClientConfig" nillable="true" type="tns:ClientConfig" />
+  <xs:simpleType name="State">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="idle" />
+      <xs:enumeration value="calculating" />
+      <xs:enumeration value="offline" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="State" nillable="true" type="tns:State" />
+  <xs:complexType name="HeartBeatData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
+      <xs:element minOccurs="0" name="freeCores" type="xs:int" />
+      <xs:element minOccurs="0" name="freeMemory" type="xs:int" />
+      <xs:element minOccurs="0" name="jobProgress" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="HeartBeatData" nillable="true" type="tns:HeartBeatData" />
+  <xs:complexType name="JobResult">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Client" nillable="true" type="tns:ClientInfo" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="Exception" nillable="true" type="q1:Exception" />
+      <xs:element minOccurs="0" name="JobId" type="xs:long" />
+      <xs:element minOccurs="0" name="JobResultId" type="xs:long" />
+      <xs:element minOccurs="0" name="Result" nillable="true" type="xs:base64Binary" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="JobResult" nillable="true" type="tns:JobResult" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.BusinessObjects1.xsd	(revision 1270)
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+  <xs:complexType name="ClientInfo">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Resource">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
+          <xs:element minOccurs="0" name="ClientInfoId" type="xs:long" />
+          <xs:element minOccurs="0" name="Config" nillable="true" type="tns:ClientConfig" />
+          <xs:element minOccurs="0" name="CpuSpeedPerCore" type="xs:int" />
+          <xs:element minOccurs="0" name="Login" type="xs:dateTime" />
+          <xs:element minOccurs="0" name="Memory" type="xs:int" />
+          <xs:element minOccurs="0" name="NrOfCores" type="xs:int" />
+          <xs:element minOccurs="0" name="State" type="tns:State" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ClientInfo" nillable="true" type="tns:ClientInfo" />
+  <xs:complexType name="Resource">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Resource" nillable="true" type="tns:Resource" />
+  <xs:complexType name="ClientConfig">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="HeartBeatIntervall" type="xs:int" />
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="UpDownTimeCalendar" nillable="true" type="xs:string" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ClientConfig" nillable="true" type="tns:ClientConfig" />
+  <xs:simpleType name="State">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="nullState" />
+      <xs:enumeration value="idle" />
+      <xs:enumeration value="calculating" />
+      <xs:enumeration value="offline" />
+      <xs:enumeration value="finished" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="State" nillable="true" type="tns:State" />
+  <xs:complexType name="HeartBeatData">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ClientId" type="ser:guid" />
+      <xs:element minOccurs="0" name="freeCores" type="xs:int" />
+      <xs:element minOccurs="0" name="freeMemory" type="xs:int" />
+      <xs:element xmlns:q1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="jobProgress" nillable="true" type="q1:ArrayOfKeyValueOflongdouble" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="HeartBeatData" nillable="true" type="tns:HeartBeatData" />
+  <xs:complexType name="Job">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="Client" nillable="true" type="tns:ClientInfo" />
+      <xs:element minOccurs="0" name="Id" type="xs:long" />
+      <xs:element minOccurs="0" name="ParentJob" nillable="true" type="tns:Job" />
+      <xs:element minOccurs="0" name="Percentage" type="xs:double" />
+      <xs:element minOccurs="0" name="SerializedJob" nillable="true" type="xs:base64Binary" />
+      <xs:element minOccurs="0" name="State" type="tns:State" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Job" nillable="true" type="tns:Job" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts.xsd	(revision 1270)
@@ -0,0 +1,66 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:complexType name="Response">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="StatusMessage" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Success" type="xs:boolean" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Response" nillable="true" type="tns:Response" />
+  <xs:complexType name="ResponseHB">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="ActionRequest" nillable="true" type="tns:ArrayOfMessageContainer" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseHB" nillable="true" type="tns:ResponseHB" />
+  <xs:complexType name="ArrayOfMessageContainer">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfMessageContainer" nillable="true" type="tns:ArrayOfMessageContainer" />
+  <xs:complexType name="MessageContainer">
+    <xs:sequence>
+      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="xs:long" />
+      <xs:element name="_x003C_Message_x003E_k__BackingField" type="tns:MessageContainer.MessageType" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+  <xs:simpleType name="MessageContainer.MessageType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FetchJob" />
+      <xs:enumeration value="AbortJob" />
+      <xs:enumeration value="JobAborted" />
+      <xs:enumeration value="RequestSnapshot" />
+      <xs:enumeration value="FinishedJob" />
+      <xs:enumeration value="NoMessage" />
+      <xs:enumeration value="SnapshotReady" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="MessageContainer.MessageType" nillable="true" type="tns:MessageContainer.MessageType" />
+  <xs:complexType name="ResponseJob">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="JobId" type="xs:long" />
+          <xs:element minOccurs="0" name="SerializedJob" nillable="true" type="xs:base64Binary" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseJob" nillable="true" type="tns:ResponseJob" />
+  <xs:complexType name="ResponseResultReceived">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="JobId" type="xs:long" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseResultReceived" nillable="true" type="tns:ResponseResultReceived" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/HeuristicLab.Hive.Contracts1.xsd	(revision 1270)
@@ -0,0 +1,67 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:complexType name="Response">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="StatusMessage" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Success" type="xs:boolean" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="Response" nillable="true" type="tns:Response" />
+  <xs:complexType name="ResponseHB">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="ActionRequest" nillable="true" type="tns:ArrayOfMessageContainer" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseHB" nillable="true" type="tns:ResponseHB" />
+  <xs:complexType name="ArrayOfMessageContainer">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfMessageContainer" nillable="true" type="tns:ArrayOfMessageContainer" />
+  <xs:complexType name="MessageContainer">
+    <xs:sequence>
+      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="xs:long" />
+      <xs:element name="_x003C_Message_x003E_k__BackingField" type="tns:MessageContainer.MessageType" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="MessageContainer" nillable="true" type="tns:MessageContainer" />
+  <xs:simpleType name="MessageContainer.MessageType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="FetchJob" />
+      <xs:enumeration value="AbortJob" />
+      <xs:enumeration value="JobAborted" />
+      <xs:enumeration value="RequestSnapshot" />
+      <xs:enumeration value="FinishedJob" />
+      <xs:enumeration value="NoMessage" />
+      <xs:enumeration value="SnapshotReady" />
+      <xs:enumeration value="Shutdown" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="MessageContainer.MessageType" nillable="true" type="tns:MessageContainer.MessageType" />
+  <xs:complexType name="ResponseJob">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Job" nillable="true" type="q1:Job" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseJob" nillable="true" type="tns:ResponseJob" />
+  <xs:complexType name="ResponseResultReceived">
+    <xs:complexContent mixed="false">
+      <xs:extension base="tns:Response">
+        <xs:sequence>
+          <xs:element minOccurs="0" name="JobId" type="xs:long" />
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:element name="ResponseResultReceived" nillable="true" type="tns:ResponseResultReceived" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.cs	(revision 1270)
@@ -0,0 +1,487 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Communication.ServerService {
+    
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ServerService.IClientCommunicator")]
+    public interface IClientCommunicator {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/Login", ReplyAction="http://tempuri.org/IClientCommunicator/LoginResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseHB))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseJob))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseResultReceived))]
+        HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/Login", ReplyAction="http://tempuri.org/IClientCommunicator/LoginResponse")]
+        System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.Response EndLogin(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/SendHeartBeat", ReplyAction="http://tempuri.org/IClientCommunicator/SendHeartBeatResponse")]
+        HeuristicLab.Hive.Contracts.ResponseHB SendHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/SendHeartBeat", ReplyAction="http://tempuri.org/IClientCommunicator/SendHeartBeatResponse")]
+        System.IAsyncResult BeginSendHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseHB EndSendHeartBeat(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/PullJob", ReplyAction="http://tempuri.org/IClientCommunicator/PullJobResponse")]
+        HeuristicLab.Hive.Contracts.ResponseJob PullJob(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/PullJob", ReplyAction="http://tempuri.org/IClientCommunicator/PullJobResponse")]
+        System.IAsyncResult BeginPullJob(System.Guid clientId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseJob EndPullJob(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/SendJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/SendJobResultResponse")]
+        HeuristicLab.Hive.Contracts.ResponseResultReceived SendJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/SendJobResult", ReplyAction="http://tempuri.org/IClientCommunicator/SendJobResultResponse")]
+        System.IAsyncResult BeginSendJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.ResponseResultReceived EndSendJobResult(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientCommunicator/Logout", ReplyAction="http://tempuri.org/IClientCommunicator/LogoutResponse")]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseHB))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseJob))]
+        [System.ServiceModel.ServiceKnownTypeAttribute(typeof(HeuristicLab.Hive.Contracts.ResponseResultReceived))]
+        HeuristicLab.Hive.Contracts.Response Logout(System.Guid clientId);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientCommunicator/Logout", ReplyAction="http://tempuri.org/IClientCommunicator/LogoutResponse")]
+        System.IAsyncResult BeginLogout(System.Guid clientId, System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Contracts.Response EndLogout(System.IAsyncResult result);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public interface IClientCommunicatorChannel : HeuristicLab.Hive.Client.Communication.ServerService.IClientCommunicator, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class LoginCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public LoginCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class SendHeartBeatCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public SendHeartBeatCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseHB Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseHB)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class PullJobCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public PullJobCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseJob Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseJob)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class SendJobResultCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public SendJobResultCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.ResponseResultReceived)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class LogoutCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public LogoutCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Contracts.Response Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Contracts.Response)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class ClientCommunicatorClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Client.Communication.ServerService.IClientCommunicator>, HeuristicLab.Hive.Client.Communication.ServerService.IClientCommunicator {
+        
+        private BeginOperationDelegate onBeginLoginDelegate;
+        
+        private EndOperationDelegate onEndLoginDelegate;
+        
+        private System.Threading.SendOrPostCallback onLoginCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSendHeartBeatDelegate;
+        
+        private EndOperationDelegate onEndSendHeartBeatDelegate;
+        
+        private System.Threading.SendOrPostCallback onSendHeartBeatCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginPullJobDelegate;
+        
+        private EndOperationDelegate onEndPullJobDelegate;
+        
+        private System.Threading.SendOrPostCallback onPullJobCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSendJobResultDelegate;
+        
+        private EndOperationDelegate onEndSendJobResultDelegate;
+        
+        private System.Threading.SendOrPostCallback onSendJobResultCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginLogoutDelegate;
+        
+        private EndOperationDelegate onEndLogoutDelegate;
+        
+        private System.Threading.SendOrPostCallback onLogoutCompletedDelegate;
+        
+        public ClientCommunicatorClient() {
+        }
+        
+        public ClientCommunicatorClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public ClientCommunicatorClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public event System.EventHandler<LoginCompletedEventArgs> LoginCompleted;
+        
+        public event System.EventHandler<SendHeartBeatCompletedEventArgs> SendHeartBeatCompleted;
+        
+        public event System.EventHandler<PullJobCompletedEventArgs> PullJobCompleted;
+        
+        public event System.EventHandler<SendJobResultCompletedEventArgs> SendJobResultCompleted;
+        
+        public event System.EventHandler<LogoutCompletedEventArgs> LogoutCompleted;
+        
+        public HeuristicLab.Hive.Contracts.Response Login(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo) {
+            return base.Channel.Login(clientInfo);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginLogin(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginLogin(clientInfo, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.Response EndLogin(System.IAsyncResult result) {
+            return base.Channel.EndLogin(result);
+        }
+        
+        private System.IAsyncResult OnBeginLogin(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo = ((HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo)(inValues[0]));
+            return this.BeginLogin(clientInfo, callback, asyncState);
+        }
+        
+        private object[] OnEndLogin(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.Response retVal = this.EndLogin(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnLoginCompleted(object state) {
+            if ((this.LoginCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.LoginCompleted(this, new LoginCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo) {
+            this.LoginAsync(clientInfo, null);
+        }
+        
+        public void LoginAsync(HeuristicLab.Hive.Contracts.BusinessObjects.ClientInfo clientInfo, object userState) {
+            if ((this.onBeginLoginDelegate == null)) {
+                this.onBeginLoginDelegate = new BeginOperationDelegate(this.OnBeginLogin);
+            }
+            if ((this.onEndLoginDelegate == null)) {
+                this.onEndLoginDelegate = new EndOperationDelegate(this.OnEndLogin);
+            }
+            if ((this.onLoginCompletedDelegate == null)) {
+                this.onLoginCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnLoginCompleted);
+            }
+            base.InvokeAsync(this.onBeginLoginDelegate, new object[] {
+                        clientInfo}, this.onEndLoginDelegate, this.onLoginCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseHB SendHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
+            return base.Channel.SendHeartBeat(hbData);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSendHeartBeat(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSendHeartBeat(hbData, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseHB EndSendHeartBeat(System.IAsyncResult result) {
+            return base.Channel.EndSendHeartBeat(result);
+        }
+        
+        private System.IAsyncResult OnBeginSendHeartBeat(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData = ((HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData)(inValues[0]));
+            return this.BeginSendHeartBeat(hbData, callback, asyncState);
+        }
+        
+        private object[] OnEndSendHeartBeat(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseHB retVal = this.EndSendHeartBeat(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnSendHeartBeatCompleted(object state) {
+            if ((this.SendHeartBeatCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SendHeartBeatCompleted(this, new SendHeartBeatCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SendHeartBeatAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData) {
+            this.SendHeartBeatAsync(hbData, null);
+        }
+        
+        public void SendHeartBeatAsync(HeuristicLab.Hive.Contracts.BusinessObjects.HeartBeatData hbData, object userState) {
+            if ((this.onBeginSendHeartBeatDelegate == null)) {
+                this.onBeginSendHeartBeatDelegate = new BeginOperationDelegate(this.OnBeginSendHeartBeat);
+            }
+            if ((this.onEndSendHeartBeatDelegate == null)) {
+                this.onEndSendHeartBeatDelegate = new EndOperationDelegate(this.OnEndSendHeartBeat);
+            }
+            if ((this.onSendHeartBeatCompletedDelegate == null)) {
+                this.onSendHeartBeatCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSendHeartBeatCompleted);
+            }
+            base.InvokeAsync(this.onBeginSendHeartBeatDelegate, new object[] {
+                        hbData}, this.onEndSendHeartBeatDelegate, this.onSendHeartBeatCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseJob PullJob(System.Guid clientId) {
+            return base.Channel.PullJob(clientId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginPullJob(System.Guid clientId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginPullJob(clientId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseJob EndPullJob(System.IAsyncResult result) {
+            return base.Channel.EndPullJob(result);
+        }
+        
+        private System.IAsyncResult OnBeginPullJob(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            return this.BeginPullJob(clientId, callback, asyncState);
+        }
+        
+        private object[] OnEndPullJob(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseJob retVal = this.EndPullJob(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnPullJobCompleted(object state) {
+            if ((this.PullJobCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.PullJobCompleted(this, new PullJobCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void PullJobAsync(System.Guid clientId) {
+            this.PullJobAsync(clientId, null);
+        }
+        
+        public void PullJobAsync(System.Guid clientId, object userState) {
+            if ((this.onBeginPullJobDelegate == null)) {
+                this.onBeginPullJobDelegate = new BeginOperationDelegate(this.OnBeginPullJob);
+            }
+            if ((this.onEndPullJobDelegate == null)) {
+                this.onEndPullJobDelegate = new EndOperationDelegate(this.OnEndPullJob);
+            }
+            if ((this.onPullJobCompletedDelegate == null)) {
+                this.onPullJobCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnPullJobCompleted);
+            }
+            base.InvokeAsync(this.onBeginPullJobDelegate, new object[] {
+                        clientId}, this.onEndPullJobDelegate, this.onPullJobCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived SendJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished) {
+            return base.Channel.SendJobResult(clientId, jobId, result, percentage, exception, finished);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSendJobResult(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSendJobResult(clientId, jobId, result, percentage, exception, finished, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.ResponseResultReceived EndSendJobResult(System.IAsyncResult result) {
+            return base.Channel.EndSendJobResult(result);
+        }
+        
+        private System.IAsyncResult OnBeginSendJobResult(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            long jobId = ((long)(inValues[1]));
+            byte[] result = ((byte[])(inValues[2]));
+            double percentage = ((double)(inValues[3]));
+            System.Exception exception = ((System.Exception)(inValues[4]));
+            bool finished = ((bool)(inValues[5]));
+            return this.BeginSendJobResult(clientId, jobId, result, percentage, exception, finished, callback, asyncState);
+        }
+        
+        private object[] OnEndSendJobResult(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.ResponseResultReceived retVal = this.EndSendJobResult(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnSendJobResultCompleted(object state) {
+            if ((this.SendJobResultCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SendJobResultCompleted(this, new SendJobResultCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SendJobResultAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished) {
+            this.SendJobResultAsync(clientId, jobId, result, percentage, exception, finished, null);
+        }
+        
+        public void SendJobResultAsync(System.Guid clientId, long jobId, byte[] result, double percentage, System.Exception exception, bool finished, object userState) {
+            if ((this.onBeginSendJobResultDelegate == null)) {
+                this.onBeginSendJobResultDelegate = new BeginOperationDelegate(this.OnBeginSendJobResult);
+            }
+            if ((this.onEndSendJobResultDelegate == null)) {
+                this.onEndSendJobResultDelegate = new EndOperationDelegate(this.OnEndSendJobResult);
+            }
+            if ((this.onSendJobResultCompletedDelegate == null)) {
+                this.onSendJobResultCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSendJobResultCompleted);
+            }
+            base.InvokeAsync(this.onBeginSendJobResultDelegate, new object[] {
+                        clientId,
+                        jobId,
+                        result,
+                        percentage,
+                        exception,
+                        finished}, this.onEndSendJobResultDelegate, this.onSendJobResultCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Contracts.Response Logout(System.Guid clientId) {
+            return base.Channel.Logout(clientId);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginLogout(System.Guid clientId, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginLogout(clientId, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Contracts.Response EndLogout(System.IAsyncResult result) {
+            return base.Channel.EndLogout(result);
+        }
+        
+        private System.IAsyncResult OnBeginLogout(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            System.Guid clientId = ((System.Guid)(inValues[0]));
+            return this.BeginLogout(clientId, callback, asyncState);
+        }
+        
+        private object[] OnEndLogout(System.IAsyncResult result) {
+            HeuristicLab.Hive.Contracts.Response retVal = this.EndLogout(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnLogoutCompleted(object state) {
+            if ((this.LogoutCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.LogoutCompleted(this, new LogoutCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void LogoutAsync(System.Guid clientId) {
+            this.LogoutAsync(clientId, null);
+        }
+        
+        public void LogoutAsync(System.Guid clientId, object userState) {
+            if ((this.onBeginLogoutDelegate == null)) {
+                this.onBeginLogoutDelegate = new BeginOperationDelegate(this.OnBeginLogout);
+            }
+            if ((this.onEndLogoutDelegate == null)) {
+                this.onEndLogoutDelegate = new EndOperationDelegate(this.OnEndLogout);
+            }
+            if ((this.onLogoutCompletedDelegate == null)) {
+                this.onLogoutCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnLogoutCompleted);
+            }
+            base.InvokeAsync(this.onBeginLogoutDelegate, new object[] {
+                        clientId}, this.onEndLogoutDelegate, this.onLogoutCompletedDelegate, userState);
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.svcmap
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.svcmap	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/Reference.svcmap	(revision 1270)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="3fe193d1-38a2-4be6-ae78-516031e30e9f" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>true</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="net.tcp://10.20.53.3:9000/HiveServer/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service1.wsdl" MetadataType="Wsdl" ID="fe9629c2-8699-40ca-940b-00c73e66938c" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="service2.xsd" MetadataType="Schema" ID="b7f8f39d-0e7c-422d-a294-433f875d2939" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="service3.xsd" MetadataType="Schema" ID="b050808b-3024-4a8d-be89-ceaf0ee6e420" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts.BusinessObjects1.xsd" MetadataType="Schema" ID="c15efe09-2f39-4cb9-b819-746aa9ca6c7c" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Contracts1.xsd" MetadataType="Schema" ID="7746324c-e22e-448e-af4f-50af43b9079f" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="Arrays.xsd" MetadataType="Schema" ID="5dee5984-4a46-4cb4-a8ce-1721442c3342" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+    <MetadataFile FileName="System1.xsd" MetadataType="Schema" ID="1e3d4c2c-afbc-4828-aa3d-9fed927b6606" SourceId="1" SourceUrl="net.tcp://10.20.53.3:9000/HiveServer/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/System.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/System.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/System.xsd	(revision 1270)
@@ -0,0 +1,11 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="Exception">
+    <xs:sequence>
+      <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##local" processContents="skip" />
+    </xs:sequence>
+    <xs:attribute ref="ser:FactoryType" />
+  </xs:complexType>
+  <xs:element name="Exception" nillable="true" type="tns:Exception" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/System1.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/System1.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/System1.xsd	(revision 1270)
@@ -0,0 +1,11 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/System" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/System" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="Exception">
+    <xs:sequence>
+      <xs:any minOccurs="0" maxOccurs="unbounded" namespace="##local" processContents="skip" />
+    </xs:sequence>
+    <xs:attribute ref="ser:FactoryType" />
+  </xs:complexType>
+  <xs:element name="Exception" nillable="true" type="tns:Exception" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration.svcinfo
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration.svcinfo	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration.svcinfo	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Transport&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IClientCommunicator" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientCommunicator&quot; contract=&quot;ServerService.IClientCommunicator&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08003@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientCommunicator&quot; contract=&quot;ServerService.IClientCommunicator&quot; name=&quot;NetTcpBinding_IClientCommunicator&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08003@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="ServerService.IClientCommunicator" name="NetTcpBinding_IClientCommunicator" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration91.svcinfo
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration91.svcinfo	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/configuration91.svcinfo	(revision 1270)
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="kpA4Ej4a4mSz8NqKwKcNB68tDr0=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IClientCommunicator">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientCommunicator</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.OleTransactionsProtocol</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Transport</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IClientCommunicator" contract="ServerService.IClientCommunicator" bindingType="netTcpBinding" address="net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator" bindingConfiguration="NetTcpBinding_IClientCommunicator">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientCommunicator</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ServerService.IClientCommunicator</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>mse08003@fhs-hagenberg.ac.at</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientCommunicator</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service.wsdl
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service.wsdl	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service.wsdl	(revision 1270)
@@ -0,0 +1,158 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="ClientCommunicator" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IClientCommunicator_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
+        </msb:BinaryEncoding>
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:WindowsTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy">
+                  <msf:ProtectionLevel>EncryptAndSign</msf:ProtectionLevel>
+                </msf:WindowsTransportSecurity>
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256>
+                </sp:Basic256>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict>
+                </sp:Strict>
+              </wsp:Policy>
+            </sp:Layout>
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <wsaw:UsingAddressing>
+        </wsaw:UsingAddressing>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IClientCommunicator_Login_InputMessage">
+    <wsdl:part name="parameters" element="tns:Login" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_Login_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LoginResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendHeartBeat_InputMessage">
+    <wsdl:part name="parameters" element="tns:SendHeartBeat" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendHeartBeat_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SendHeartBeatResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_PullJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:PullJob" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_PullJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PullJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendJobResult_InputMessage">
+    <wsdl:part name="parameters" element="tns:SendJobResult" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendJobResult_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SendJobResultResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_Logout_InputMessage">
+    <wsdl:part name="parameters" element="tns:Logout" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_Logout_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LogoutResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IClientCommunicator">
+    <wsdl:operation name="Login">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/Login" message="tns:IClientCommunicator_Login_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/LoginResponse" message="tns:IClientCommunicator_Login_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SendHeartBeat">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/SendHeartBeat" message="tns:IClientCommunicator_SendHeartBeat_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/SendHeartBeatResponse" message="tns:IClientCommunicator_SendHeartBeat_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="PullJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/PullJob" message="tns:IClientCommunicator_PullJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/PullJobResponse" message="tns:IClientCommunicator_PullJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SendJobResult">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/SendJobResult" message="tns:IClientCommunicator_SendJobResult_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/SendJobResultResponse" message="tns:IClientCommunicator_SendJobResult_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/Logout" message="tns:IClientCommunicator_Logout_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/LogoutResponse" message="tns:IClientCommunicator_Logout_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IClientCommunicator" type="tns:IClientCommunicator">
+    <wsp:PolicyReference URI="#NetTcpBinding_IClientCommunicator_policy">
+    </wsp:PolicyReference>
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/Login" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/SendHeartBeat" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="PullJob">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/PullJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendJobResult">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/SendJobResult" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ClientCommunicator">
+    <wsdl:port name="NetTcpBinding_IClientCommunicator" binding="tns:NetTcpBinding_IClientCommunicator">
+      <soap12:address location="net.tcp://10.0.0.64:9000/HiveServer/ClientCommunicator" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://10.0.0.64:9000/HiveServer/ClientCommunicator</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Upn>sem-PC\sem</Upn>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service.xsd	(revision 1270)
@@ -0,0 +1,77 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:element name="Login">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="clientInfo" nillable="true" type="q1:ClientInfo" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LoginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LoginResult" nillable="true" type="q2:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendHeartBeat">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="hbData" nillable="true" type="q3:HeartBeatData" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendHeartBeatResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendHeartBeatResult" nillable="true" type="q4:ResponseHB" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PullJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q5:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PullJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="PullJobResult" nillable="true" type="q6:ResponseJob" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendJobResult">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q7="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="Result" nillable="true" type="q7:JobResult" />
+        <xs:element minOccurs="0" name="finished" type="xs:boolean" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendJobResultResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q8="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendJobResultResult" nillable="true" type="q8:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Logout">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q9="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q9:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LogoutResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q10="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LogoutResult" nillable="true" type="q10:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.wsdl
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.wsdl	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.wsdl	(revision 1270)
@@ -0,0 +1,159 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="ClientFacade" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IClientCommunicator_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
+        </msb:BinaryEncoding>
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:WindowsTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy">
+                  <msf:ProtectionLevel>EncryptAndSign</msf:ProtectionLevel>
+                </msf:WindowsTransportSecurity>
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256>
+                </sp:Basic256>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict>
+                </sp:Strict>
+              </wsp:Policy>
+            </sp:Layout>
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <wsaw:UsingAddressing>
+        </wsaw:UsingAddressing>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/System" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IClientCommunicator_Login_InputMessage">
+    <wsdl:part name="parameters" element="tns:Login" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_Login_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LoginResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendHeartBeat_InputMessage">
+    <wsdl:part name="parameters" element="tns:SendHeartBeat" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendHeartBeat_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SendHeartBeatResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_PullJob_InputMessage">
+    <wsdl:part name="parameters" element="tns:PullJob" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_PullJob_OutputMessage">
+    <wsdl:part name="parameters" element="tns:PullJobResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendJobResult_InputMessage">
+    <wsdl:part name="parameters" element="tns:SendJobResult" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_SendJobResult_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SendJobResultResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_Logout_InputMessage">
+    <wsdl:part name="parameters" element="tns:Logout" />
+  </wsdl:message>
+  <wsdl:message name="IClientCommunicator_Logout_OutputMessage">
+    <wsdl:part name="parameters" element="tns:LogoutResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IClientCommunicator">
+    <wsdl:operation name="Login">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/Login" message="tns:IClientCommunicator_Login_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/LoginResponse" message="tns:IClientCommunicator_Login_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SendHeartBeat">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/SendHeartBeat" message="tns:IClientCommunicator_SendHeartBeat_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/SendHeartBeatResponse" message="tns:IClientCommunicator_SendHeartBeat_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="PullJob">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/PullJob" message="tns:IClientCommunicator_PullJob_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/PullJobResponse" message="tns:IClientCommunicator_PullJob_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SendJobResult">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/SendJobResult" message="tns:IClientCommunicator_SendJobResult_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/SendJobResultResponse" message="tns:IClientCommunicator_SendJobResult_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientCommunicator/Logout" message="tns:IClientCommunicator_Logout_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientCommunicator/LogoutResponse" message="tns:IClientCommunicator_Logout_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IClientCommunicator" type="tns:IClientCommunicator">
+    <wsp:PolicyReference URI="#NetTcpBinding_IClientCommunicator_policy">
+    </wsp:PolicyReference>
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="Login">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/Login" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendHeartBeat">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/SendHeartBeat" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="PullJob">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/PullJob" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SendJobResult">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/SendJobResult" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Logout">
+      <soap12:operation soapAction="http://tempuri.org/IClientCommunicator/Logout" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ClientFacade">
+    <wsdl:port name="NetTcpBinding_IClientCommunicator" binding="tns:NetTcpBinding_IClientCommunicator">
+      <soap12:address location="net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Upn>mse08003@fhs-hagenberg.ac.at</Upn>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service1.xsd	(revision 1270)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service2.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service2.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service2.xsd	(revision 1270)
@@ -0,0 +1,82 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" />
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
+  <xs:element name="Login">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="clientInfo" nillable="true" type="q1:ClientInfo" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LoginResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LoginResult" nillable="true" type="q2:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendHeartBeat">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts.BusinessObjects" minOccurs="0" name="hbData" nillable="true" type="q3:HeartBeatData" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendHeartBeatResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q4="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendHeartBeatResult" nillable="true" type="q4:ResponseHB" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PullJob">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q5="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q5:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="PullJobResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q6="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="PullJobResult" nillable="true" type="q6:ResponseJob" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendJobResult">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q7="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q7:guid" />
+        <xs:element minOccurs="0" name="jobId" type="xs:long" />
+        <xs:element minOccurs="0" name="result" nillable="true" type="xs:base64Binary" />
+        <xs:element minOccurs="0" name="percentage" type="xs:double" />
+        <xs:element xmlns:q8="http://schemas.datacontract.org/2004/07/System" minOccurs="0" name="exception" nillable="true" type="q8:Exception" />
+        <xs:element minOccurs="0" name="finished" type="xs:boolean" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SendJobResultResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q9="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="SendJobResultResult" nillable="true" type="q9:ResponseResultReceived" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Logout">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/" minOccurs="0" name="clientId" type="q10:guid" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="LogoutResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q11="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Contracts" minOccurs="0" name="LogoutResult" nillable="true" type="q11:Response" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service3.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service3.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/Service References/ServerService/service3.xsd	(revision 1270)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/WcfService.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/WcfService.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/WcfService.cs	(revision 1270)
@@ -0,0 +1,220 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Client.Communication.ServerService;
+
+namespace HeuristicLab.Hive.Client.Communication {
+  /// <summary>
+  /// WcfService class is implemented as a Singleton and works as a communication Layer with the Server
+  /// </summary>
+  public class WcfService {
+    private static WcfService instance;
+    /// <summary>
+    /// Getter for the Instance of the WcfService
+    /// </summary>
+    /// <returns>the Instance of the WcfService class</returns>
+    public static WcfService Instance {
+      get {
+        if (instance == null) {
+          instance = new WcfService();
+        }
+        return instance;
+      }
+    }
+
+    public DateTime ConnectedSince { get; private set; }    
+    public NetworkEnum.WcfConnState ConnState { get; private set; }
+    public string ServerIP { get; private set; }
+    public int ServerPort { get; private set; }
+
+    public event EventHandler ConnectionRestored;    
+    public event EventHandler ServerChanged;
+    public event EventHandler Connected;    
+
+    public ClientCommunicatorClient proxy = null;
+
+    /// <summary>
+    /// Constructor
+    /// </summary>
+    private WcfService() {
+      ConnState = NetworkEnum.WcfConnState.Disconnected;
+    }
+
+    /// <summary>
+    /// Connects with the Server, registers the events and fires the Connected (and quiet possibly the ConnectionRestored) Event.
+    /// </summary>
+    public void Connect() {
+      try {
+        proxy = new ClientCommunicatorClient(
+          new NetTcpBinding(),
+          new EndpointAddress("net.tcp://" + ServerIP + ":" + ServerPort + "/HiveServer/ClientCommunicator")
+        );
+
+        proxy.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(proxy_LoginCompleted);
+        proxy.PullJobCompleted += new EventHandler<PullJobCompletedEventArgs>(proxy_PullJobCompleted);
+        proxy.SendJobResultCompleted += new EventHandler<SendJobResultCompletedEventArgs>(proxy_SendJobResultCompleted);
+        proxy.SendHeartBeatCompleted += new EventHandler<SendHeartBeatCompletedEventArgs>(proxy_SendHeartBeatCompleted);
+        proxy.Open();
+
+        ConnState = NetworkEnum.WcfConnState.Connected;
+        ConnectedSince = DateTime.Now;
+        
+        if (Connected != null)
+          Connected(this, new EventArgs());                               
+        
+        if (ConnState == NetworkEnum.WcfConnState.Failed)
+          ConnectionRestored(this, new EventArgs());        
+      }
+      catch (Exception ex) {
+        NetworkErrorHandling(ex);
+      }
+    }
+
+    /// <summary>
+    /// Changes the Connectionsettings (serverIP & serverPort) and reconnects
+    /// </summary>
+    /// <param name="serverIP">current Server IP</param>
+    /// <param name="serverPort">current Server Port</param>
+    public void Connect(String serverIP, int serverPort) {
+      String oldIp = this.ServerIP;
+      int oldPort = this.ServerPort;
+      this.ServerIP = serverIP;
+      this.ServerPort = serverPort;      
+      Connect();
+      if (oldIp != serverIP || oldPort != ServerPort)
+        if(ServerChanged != null) 
+          ServerChanged(this, new EventArgs());
+    }
+    
+    /// <summary>
+    /// Disconnects the Client from the Server
+    /// </summary>
+    public void Disconnect() {
+      ConnState = NetworkEnum.WcfConnState.Disconnected;
+    }
+
+    /// <summary>
+    /// Network communication Error Handler - Every network error gets logged and the connection switches to faulted state
+    /// </summary>
+    /// <param name="e">The Exception</param>
+    private void NetworkErrorHandling(Exception e) {
+      ConnState = NetworkEnum.WcfConnState.Failed;
+      Logging.GetInstance().Error(this.ToString(), "exception: ", e);
+    }
+
+    
+
+    /// <summary>
+    /// Methods for the Server Login
+    /// </summary>
+    #region Login
+    public event System.EventHandler<LoginCompletedEventArgs> LoginCompleted;
+    public void LoginAsync(ClientInfo clientInfo) {
+      if (ConnState == NetworkEnum.WcfConnState.Connected)
+        proxy.LoginAsync(clientInfo);
+    }
+    private void proxy_LoginCompleted(object sender, LoginCompletedEventArgs e) {
+      if (e.Error == null)
+        LoginCompleted(sender, e);
+      else
+        NetworkErrorHandling(e.Error.InnerException);
+    }
+
+    public void LoginSync(ClientInfo clientInfo) {
+      try {
+        if (ConnState == NetworkEnum.WcfConnState.Connected) {
+          Response res = proxy.Login(clientInfo);
+          ConnState = NetworkEnum.WcfConnState.Loggedin;
+          Logging.GetInstance().Info(this.ToString(), res.StatusMessage);
+        }
+      }
+      catch (Exception e) {
+        NetworkErrorHandling(e);
+      }
+    }
+
+    #endregion
+
+    /// <summary>
+    /// Pull a Job from the Server
+    /// </summary>
+    #region PullJob
+    public event System.EventHandler<PullJobCompletedEventArgs> PullJobCompleted;
+    public void PullJobAsync(Guid guid) {
+      if (ConnState == NetworkEnum.WcfConnState.Loggedin)        
+        proxy.PullJobAsync(guid);
+    }
+    void proxy_PullJobCompleted(object sender, PullJobCompletedEventArgs e) {
+      if (e.Error == null)
+        PullJobCompleted(sender, e);
+      else
+        NetworkErrorHandling(e.Error);
+    }
+    #endregion
+
+    /// <summary>
+    /// Send back finished Job Results
+    /// </summary>
+    #region SendJobResults
+    public event System.EventHandler<SendJobResultCompletedEventArgs> SendJobResultCompleted;
+    public void SendJobResultAsync(Guid clientId, long jobId, byte[] result, double percentage, Exception exception, bool finished) {
+      if (ConnState == NetworkEnum.WcfConnState.Loggedin)
+        proxy.SendJobResultAsync(clientId, jobId, result, percentage, exception, finished);
+    }
+    private void proxy_SendJobResultCompleted(object sender, SendJobResultCompletedEventArgs e) {
+      if (e.Error == null)
+        SendJobResultCompleted(sender, e);
+      else
+        NetworkErrorHandling(e.Error);
+    }
+
+    #endregion
+
+    /// <summary>
+    /// Methods for sending the periodically Heartbeat
+    /// </summary>
+    #region Heartbeat
+
+    public event System.EventHandler<SendHeartBeatCompletedEventArgs> SendHeartBeatCompleted;
+    public void SendHeartBeatAsync(HeartBeatData hbd) {
+      if (ConnState == NetworkEnum.WcfConnState.Loggedin)
+        proxy.SendHeartBeatAsync(hbd);
+    }
+
+    private void proxy_SendHeartBeatCompleted(object sender, SendHeartBeatCompletedEventArgs e) {
+      if (e.Error == null)
+        SendHeartBeatCompleted(sender, e);
+      else
+        NetworkErrorHandling(e.Error);
+    }
+
+    #endregion  
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Communication/app.config	(revision 1270)
@@ -0,0 +1,33 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <system.serviceModel>
+        <bindings>
+            <netTcpBinding>
+                <binding name="NetTcpBinding_IClientCommunicator" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="Transport">
+                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
+                        <message clientCredentialType="Windows" />
+                    </security>
+                </binding>
+            </netTcpBinding>
+        </bindings>
+        <client>
+            <endpoint address="net.tcp://10.20.53.3:9000/HiveServer/ClientCommunicator"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IClientCommunicator"
+                contract="ServerService.IClientCommunicator" name="NetTcpBinding_IClientCommunicator">
+                <identity>
+                    <userPrincipalName value="mse08003@fhs-hagenberg.ac.at" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.Designer.cs	(revision 1270)
@@ -0,0 +1,104 @@
+﻿namespace HeuristicLab.Hive.Client.Console {
+  partial class EventLogEntryForm {
+    /// <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.lbDateLabel = new System.Windows.Forms.Label();
+      this.lbDate = new System.Windows.Forms.Label();
+      this.lbId = new System.Windows.Forms.Label();
+      this.lbIdLabel = new System.Windows.Forms.Label();
+      this.txtMessage = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // lbDateLabel
+      // 
+      this.lbDateLabel.AutoSize = true;
+      this.lbDateLabel.Location = new System.Drawing.Point(13, 27);
+      this.lbDateLabel.Name = "lbDateLabel";
+      this.lbDateLabel.Size = new System.Drawing.Size(80, 13);
+      this.lbDateLabel.TabIndex = 1;
+      this.lbDateLabel.Text = "Date and Time:";
+      // 
+      // lbDate
+      // 
+      this.lbDate.AutoSize = true;
+      this.lbDate.Location = new System.Drawing.Point(89, 27);
+      this.lbDate.Name = "lbDate";
+      this.lbDate.Size = new System.Drawing.Size(23, 13);
+      this.lbDate.TabIndex = 3;
+      this.lbDate.Text = "null";
+      // 
+      // lbId
+      // 
+      this.lbId.AutoSize = true;
+      this.lbId.Location = new System.Drawing.Point(27, 9);
+      this.lbId.Name = "lbId";
+      this.lbId.Size = new System.Drawing.Size(23, 13);
+      this.lbId.TabIndex = 6;
+      this.lbId.Text = "null";
+      // 
+      // lbIdLabel
+      // 
+      this.lbIdLabel.AutoSize = true;
+      this.lbIdLabel.Location = new System.Drawing.Point(13, 9);
+      this.lbIdLabel.Name = "lbIdLabel";
+      this.lbIdLabel.Size = new System.Drawing.Size(19, 13);
+      this.lbIdLabel.TabIndex = 5;
+      this.lbIdLabel.Text = "Id:";
+      // 
+      // txtMessage
+      // 
+      this.txtMessage.BackColor = System.Drawing.SystemColors.InactiveBorder;
+      this.txtMessage.Location = new System.Drawing.Point(16, 55);
+      this.txtMessage.Multiline = true;
+      this.txtMessage.Name = "txtMessage";
+      this.txtMessage.ReadOnly = true;
+      this.txtMessage.Size = new System.Drawing.Size(250, 179);
+      this.txtMessage.TabIndex = 7;
+      // 
+      // EventLogEntryForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(278, 246);
+      this.Controls.Add(this.txtMessage);
+      this.Controls.Add(this.lbId);
+      this.Controls.Add(this.lbIdLabel);
+      this.Controls.Add(this.lbDate);
+      this.Controls.Add(this.lbDateLabel);
+      this.Name = "EventLogEntryForm";
+      this.Text = "Detail";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label lbDateLabel;
+    private System.Windows.Forms.Label lbDate;
+    private System.Windows.Forms.Label lbId;
+    private System.Windows.Forms.Label lbIdLabel;
+    private System.Windows.Forms.TextBox txtMessage;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.cs	(revision 1270)
@@ -0,0 +1,20 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Diagnostics;
+
+namespace HeuristicLab.Hive.Client.Console {
+  public partial class EventLogEntryForm : Form {
+    public EventLogEntryForm(HiveEventEntry curEventEntry) {
+      InitializeComponent();
+      lbDate.Text = curEventEntry.EventDate;
+      lbId.Text = curEventEntry.ID;
+      txtMessage.Text = curEventEntry.Message;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/EventLogEntryForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HeuristicLab.Hive.Client.Console.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HeuristicLab.Hive.Client.Console.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HeuristicLab.Hive.Client.Console.csproj	(revision 1270)
@@ -0,0 +1,212 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Client.Console</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Client.Console-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Calendar.DayView, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\Calendar.DayView.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="ZedGraph, Version=5.1.4.31904, Culture=neutral, PublicKeyToken=02a83cbd123fcd60, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\ZedGraph.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="EventLogEntryForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="EventLogEntryForm.Designer.cs">
+      <DependentUpon>EventLogEntryForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveClientConsole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="HiveClientConsole.designer.cs">
+      <DependentUpon>HiveClientConsole.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveClientConsolePlugin.cs" />
+    <Compile Include="HiveClientConsoleApplication.cs" />
+    <Compile Include="HiveEventEntry.cs" />
+    <Compile Include="IPAdressTextBox.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="ListViewColumnSorterDate.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="EventLogEntryForm.resx">
+      <DependentUpon>EventLogEntryForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveClientConsole.resx">
+      <DependentUpon>HiveClientConsole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Recurrence.resx">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="Recurrence.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Recurrence.Designer.cs">
+      <DependentUpon>Recurrence.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Service References\ClientService\Reference.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Error.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Info.png" />
+    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Common.xsd" />
+    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd" />
+    <None Include="Service References\ClientService\service.wsdl" />
+    <None Include="Service References\ClientService\service.xsd" />
+    <None Include="Service References\ClientService\service1.xsd" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Service References\" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadataStorage Include="Service References\ClientService\" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ClientService\configuration91.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Service References\ClientService\configuration.svcinfo" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ClientService\HeuristicLab.Hive.Client.Console.ClientService.StatusCommons.datasource">
+      <DependentUpon>Reference.svcmap</DependentUpon>
+    </None>
+    <None Include="Service References\ClientService\Reference.svcmap">
+      <Generator>WCF Proxy Generator</Generator>
+      <LastGenOutput>Reference.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\schedule.jpg" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\shutdown-icon.png" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.Designer.cs	(revision 1270)
@@ -0,0 +1,715 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Hive.Client.Console {
+  partial class HiveClientConsole {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      Calendar.DrawTool drawTool1 = new Calendar.DrawTool();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveClientConsole));
+      this.dvOnline = new Calendar.DayView();
+      this.tcClientConsole = new System.Windows.Forms.TabControl();
+      this.tpConnection = new System.Windows.Forms.TabPage();
+      this.groupBox2 = new System.Windows.Forms.GroupBox();
+      this.btn_clientShutdown = new System.Windows.Forms.Button();
+      this.gbServerConnection = new System.Windows.Forms.GroupBox();
+      this.btnDisconnect = new System.Windows.Forms.Button();
+      this.btConnect = new System.Windows.Forms.Button();
+      this.tbPort = new System.Windows.Forms.TextBox();
+      this.tbIPAdress = new System.Windows.Forms.TextBox();
+      this.lbServerIPCaption = new System.Windows.Forms.Label();
+      this.lbPortCaption = new System.Windows.Forms.Label();
+      this.gbJobCommon = new System.Windows.Forms.GroupBox();
+      this.lvJobDetail = new System.Windows.Forms.ListView();
+      this.chJobId = new System.Windows.Forms.ColumnHeader();
+      this.chSince = new System.Windows.Forms.ColumnHeader();
+      this.chProgress = new System.Windows.Forms.ColumnHeader();
+      this.gbCommon = new System.Windows.Forms.GroupBox();
+      this.pbGraph = new System.Windows.Forms.PictureBox();
+      this.lbJobsAborted = new System.Windows.Forms.Label();
+      this.lbJobdone = new System.Windows.Forms.Label();
+      this.lbJobsFetched = new System.Windows.Forms.Label();
+      this.lbGuid = new System.Windows.Forms.Label();
+      this.lbGuidCaption = new System.Windows.Forms.Label();
+      this.lbCs = new System.Windows.Forms.Label();
+      this.lbConnectionStatus = new System.Windows.Forms.Label();
+      this.lbConnectionStatusCaption = new System.Windows.Forms.Label();
+      this.lbJobsAbortedCaption = new System.Windows.Forms.Label();
+      this.lbJobdoneCaption = new System.Windows.Forms.Label();
+      this.lbJobsFetchedCaption = new System.Windows.Forms.Label();
+      this.lbCsCaption = new System.Windows.Forms.Label();
+      this.gbEventLog = new System.Windows.Forms.GroupBox();
+      this.lvLog = new System.Windows.Forms.ListView();
+      this.chType = new System.Windows.Forms.ColumnHeader();
+      this.chId = new System.Windows.Forms.ColumnHeader();
+      this.chMessage = new System.Windows.Forms.ColumnHeader();
+      this.chDate = new System.Windows.Forms.ColumnHeader();
+      this.ilEventLog = new System.Windows.Forms.ImageList(this.components);
+      this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.pictureBox1 = new System.Windows.Forms.PictureBox();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.chbade = new System.Windows.Forms.CheckBox();
+      this.btnRecurrence = new System.Windows.Forms.Button();
+      this.txtTimeTo = new System.Windows.Forms.TextBox();
+      this.txttimeFrom = new System.Windows.Forms.TextBox();
+      this.btbDelete = new System.Windows.Forms.Button();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.btCreate = new System.Windows.Forms.Button();
+      this.mcOnline = new System.Windows.Forms.MonthCalendar();
+      this.dtpFrom = new System.Windows.Forms.DateTimePicker();
+      this.dtpTo = new System.Windows.Forms.DateTimePicker();
+      this.tcClientConsole.SuspendLayout();
+      this.tpConnection.SuspendLayout();
+      this.groupBox2.SuspendLayout();
+      this.gbServerConnection.SuspendLayout();
+      this.gbJobCommon.SuspendLayout();
+      this.gbCommon.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbGraph)).BeginInit();
+      this.gbEventLog.SuspendLayout();
+      this.tabPage2.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // dvOnline
+      // 
+      drawTool1.DayView = this.dvOnline;
+      this.dvOnline.ActiveTool = drawTool1;
+      this.dvOnline.AmPmDisplay = false;
+      this.dvOnline.AppointmentHeightMode = Calendar.AppHeightDrawMode.TrueHeightAll;
+      this.dvOnline.DayHeadersHeight = 15;
+      this.dvOnline.DaysToShow = 7;
+      this.dvOnline.DrawAllAppBorder = false;
+      this.dvOnline.EnableDurationDisplay = false;
+      this.dvOnline.EnableRoundedCorners = false;
+      this.dvOnline.EnableShadows = false;
+      this.dvOnline.EnableTimeIndicator = false;
+      this.dvOnline.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F);
+      this.dvOnline.Location = new System.Drawing.Point(9, 179);
+      this.dvOnline.MinHalfHourApp = false;
+      this.dvOnline.Name = "dvOnline";
+      this.dvOnline.SelectionEnd = new System.DateTime(((long)(0)));
+      this.dvOnline.SelectionStart = new System.DateTime(((long)(0)));
+      this.dvOnline.Size = new System.Drawing.Size(823, 225);
+      this.dvOnline.StartDate = new System.DateTime(((long)(0)));
+      this.dvOnline.TabIndex = 18;
+      this.dvOnline.OnSelectionChanged += new System.EventHandler<System.EventArgs>(this.dvOnline_OnSelectionChanged);
+      // 
+      // tcClientConsole
+      // 
+      this.tcClientConsole.Controls.Add(this.tpConnection);
+      this.tcClientConsole.Controls.Add(this.tabPage2);
+      this.tcClientConsole.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tcClientConsole.Location = new System.Drawing.Point(0, 0);
+      this.tcClientConsole.Name = "tcClientConsole";
+      this.tcClientConsole.SelectedIndex = 0;
+      this.tcClientConsole.Size = new System.Drawing.Size(853, 438);
+      this.tcClientConsole.TabIndex = 1;
+      // 
+      // tpConnection
+      // 
+      this.tpConnection.Controls.Add(this.groupBox2);
+      this.tpConnection.Controls.Add(this.gbServerConnection);
+      this.tpConnection.Controls.Add(this.gbJobCommon);
+      this.tpConnection.Controls.Add(this.gbCommon);
+      this.tpConnection.Controls.Add(this.gbEventLog);
+      this.tpConnection.Location = new System.Drawing.Point(4, 22);
+      this.tpConnection.Name = "tpConnection";
+      this.tpConnection.Padding = new System.Windows.Forms.Padding(3);
+      this.tpConnection.RightToLeft = System.Windows.Forms.RightToLeft.No;
+      this.tpConnection.Size = new System.Drawing.Size(845, 412);
+      this.tpConnection.TabIndex = 0;
+      this.tpConnection.Text = "Status";
+      this.tpConnection.UseVisualStyleBackColor = true;
+      // 
+      // groupBox2
+      // 
+      this.groupBox2.Controls.Add(this.btn_clientShutdown);
+      this.groupBox2.Location = new System.Drawing.Point(746, 8);
+      this.groupBox2.Name = "groupBox2";
+      this.groupBox2.Size = new System.Drawing.Size(86, 131);
+      this.groupBox2.TabIndex = 16;
+      this.groupBox2.TabStop = false;
+      this.groupBox2.Text = "Shutdown";
+      // 
+      // btn_clientShutdown
+      // 
+      this.btn_clientShutdown.Image = global::HeuristicLab.Hive.Client.Console.Properties.Resources.shutdown_icon;
+      this.btn_clientShutdown.Location = new System.Drawing.Point(13, 44);
+      this.btn_clientShutdown.Name = "btn_clientShutdown";
+      this.btn_clientShutdown.Size = new System.Drawing.Size(61, 55);
+      this.btn_clientShutdown.TabIndex = 8;
+      this.btn_clientShutdown.UseVisualStyleBackColor = true;
+      this.btn_clientShutdown.Click += new System.EventHandler(this.btn_clientShutdown_Click);
+      // 
+      // gbServerConnection
+      // 
+      this.gbServerConnection.Controls.Add(this.btnDisconnect);
+      this.gbServerConnection.Controls.Add(this.btConnect);
+      this.gbServerConnection.Controls.Add(this.tbPort);
+      this.gbServerConnection.Controls.Add(this.tbIPAdress);
+      this.gbServerConnection.Controls.Add(this.lbServerIPCaption);
+      this.gbServerConnection.Controls.Add(this.lbPortCaption);
+      this.gbServerConnection.Location = new System.Drawing.Point(424, 6);
+      this.gbServerConnection.Name = "gbServerConnection";
+      this.gbServerConnection.Size = new System.Drawing.Size(316, 133);
+      this.gbServerConnection.TabIndex = 15;
+      this.gbServerConnection.TabStop = false;
+      this.gbServerConnection.Text = "Server connection";
+      // 
+      // btnDisconnect
+      // 
+      this.btnDisconnect.Location = new System.Drawing.Point(159, 96);
+      this.btnDisconnect.Name = "btnDisconnect";
+      this.btnDisconnect.Size = new System.Drawing.Size(147, 23);
+      this.btnDisconnect.TabIndex = 5;
+      this.btnDisconnect.Text = "Disconnect from server";
+      this.btnDisconnect.UseVisualStyleBackColor = true;
+      this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
+      // 
+      // btConnect
+      // 
+      this.btConnect.Location = new System.Drawing.Point(6, 96);
+      this.btConnect.Name = "btConnect";
+      this.btConnect.Size = new System.Drawing.Size(147, 23);
+      this.btConnect.TabIndex = 4;
+      this.btConnect.Text = "Connect to server";
+      this.btConnect.UseVisualStyleBackColor = true;
+      this.btConnect.Click += new System.EventHandler(this.btConnect_Click);
+      // 
+      // tbPort
+      // 
+      this.tbPort.Location = new System.Drawing.Point(77, 51);
+      this.tbPort.Name = "tbPort";
+      this.tbPort.Size = new System.Drawing.Size(229, 20);
+      this.tbPort.TabIndex = 3;
+      this.tbPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Connection_KeyPress);
+      // 
+      // tbIPAdress
+      // 
+      this.tbIPAdress.Location = new System.Drawing.Point(77, 25);
+      this.tbIPAdress.Name = "tbIPAdress";
+      this.tbIPAdress.Size = new System.Drawing.Size(229, 20);
+      this.tbIPAdress.TabIndex = 2;
+      this.tbIPAdress.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Connection_KeyPress);
+      // 
+      // lbServerIPCaption
+      // 
+      this.lbServerIPCaption.AutoSize = true;
+      this.lbServerIPCaption.Location = new System.Drawing.Point(17, 28);
+      this.lbServerIPCaption.Name = "lbServerIPCaption";
+      this.lbServerIPCaption.Size = new System.Drawing.Size(60, 13);
+      this.lbServerIPCaption.TabIndex = 0;
+      this.lbServerIPCaption.Text = "IP address:";
+      // 
+      // lbPortCaption
+      // 
+      this.lbPortCaption.AutoSize = true;
+      this.lbPortCaption.Location = new System.Drawing.Point(17, 54);
+      this.lbPortCaption.Name = "lbPortCaption";
+      this.lbPortCaption.Size = new System.Drawing.Size(29, 13);
+      this.lbPortCaption.TabIndex = 1;
+      this.lbPortCaption.Text = "Port:";
+      // 
+      // gbJobCommon
+      // 
+      this.gbJobCommon.Controls.Add(this.lvJobDetail);
+      this.gbJobCommon.Location = new System.Drawing.Point(8, 152);
+      this.gbJobCommon.Name = "gbJobCommon";
+      this.gbJobCommon.Size = new System.Drawing.Size(412, 252);
+      this.gbJobCommon.TabIndex = 13;
+      this.gbJobCommon.TabStop = false;
+      this.gbJobCommon.Text = "Jobs detail";
+      // 
+      // lvJobDetail
+      // 
+      this.lvJobDetail.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.chJobId,
+            this.chSince,
+            this.chProgress});
+      this.lvJobDetail.FullRowSelect = true;
+      this.lvJobDetail.GridLines = true;
+      this.lvJobDetail.Location = new System.Drawing.Point(6, 14);
+      this.lvJobDetail.Name = "lvJobDetail";
+      this.lvJobDetail.Size = new System.Drawing.Size(398, 232);
+      this.lvJobDetail.TabIndex = 0;
+      this.lvJobDetail.UseCompatibleStateImageBehavior = false;
+      this.lvJobDetail.View = System.Windows.Forms.View.Details;
+      // 
+      // chJobId
+      // 
+      this.chJobId.Text = "ID";
+      // 
+      // chSince
+      // 
+      this.chSince.Text = "Since";
+      this.chSince.Width = 120;
+      // 
+      // chProgress
+      // 
+      this.chProgress.Text = "Progress";
+      this.chProgress.Width = 200;
+      // 
+      // gbCommon
+      // 
+      this.gbCommon.Controls.Add(this.pbGraph);
+      this.gbCommon.Controls.Add(this.lbJobsAborted);
+      this.gbCommon.Controls.Add(this.lbJobdone);
+      this.gbCommon.Controls.Add(this.lbJobsFetched);
+      this.gbCommon.Controls.Add(this.lbGuid);
+      this.gbCommon.Controls.Add(this.lbGuidCaption);
+      this.gbCommon.Controls.Add(this.lbCs);
+      this.gbCommon.Controls.Add(this.lbConnectionStatus);
+      this.gbCommon.Controls.Add(this.lbConnectionStatusCaption);
+      this.gbCommon.Controls.Add(this.lbJobsAbortedCaption);
+      this.gbCommon.Controls.Add(this.lbJobdoneCaption);
+      this.gbCommon.Controls.Add(this.lbJobsFetchedCaption);
+      this.gbCommon.Controls.Add(this.lbCsCaption);
+      this.gbCommon.Location = new System.Drawing.Point(8, 6);
+      this.gbCommon.Name = "gbCommon";
+      this.gbCommon.Size = new System.Drawing.Size(410, 133);
+      this.gbCommon.TabIndex = 14;
+      this.gbCommon.TabStop = false;
+      this.gbCommon.Text = "Common";
+      // 
+      // pbGraph
+      // 
+      this.pbGraph.Location = new System.Drawing.Point(292, 19);
+      this.pbGraph.Name = "pbGraph";
+      this.pbGraph.Size = new System.Drawing.Size(112, 108);
+      this.pbGraph.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+      this.pbGraph.TabIndex = 21;
+      this.pbGraph.TabStop = false;
+      // 
+      // lbJobsAborted
+      // 
+      this.lbJobsAborted.AutoSize = true;
+      this.lbJobsAborted.Location = new System.Drawing.Point(195, 114);
+      this.lbJobsAborted.Name = "lbJobsAborted";
+      this.lbJobsAborted.Size = new System.Drawing.Size(50, 13);
+      this.lbJobsAborted.TabIndex = 20;
+      this.lbJobsAborted.Text = "loading...";
+      // 
+      // lbJobdone
+      // 
+      this.lbJobdone.AutoSize = true;
+      this.lbJobdone.Location = new System.Drawing.Point(62, 114);
+      this.lbJobdone.Name = "lbJobdone";
+      this.lbJobdone.Size = new System.Drawing.Size(50, 13);
+      this.lbJobdone.TabIndex = 19;
+      this.lbJobdone.Text = "loading...";
+      // 
+      // lbJobsFetched
+      // 
+      this.lbJobsFetched.AutoSize = true;
+      this.lbJobsFetched.Location = new System.Drawing.Point(74, 90);
+      this.lbJobsFetched.Name = "lbJobsFetched";
+      this.lbJobsFetched.Size = new System.Drawing.Size(50, 13);
+      this.lbJobsFetched.TabIndex = 18;
+      this.lbJobsFetched.Text = "loading...";
+      // 
+      // lbGuid
+      // 
+      this.lbGuid.AutoSize = true;
+      this.lbGuid.Location = new System.Drawing.Point(41, 16);
+      this.lbGuid.Name = "lbGuid";
+      this.lbGuid.Size = new System.Drawing.Size(50, 13);
+      this.lbGuid.TabIndex = 15;
+      this.lbGuid.Text = "loading...";
+      // 
+      // lbGuidCaption
+      // 
+      this.lbGuidCaption.AutoSize = true;
+      this.lbGuidCaption.Location = new System.Drawing.Point(9, 16);
+      this.lbGuidCaption.Name = "lbGuidCaption";
+      this.lbGuidCaption.Size = new System.Drawing.Size(37, 13);
+      this.lbGuidCaption.TabIndex = 8;
+      this.lbGuidCaption.Text = "GUID:";
+      // 
+      // lbCs
+      // 
+      this.lbCs.AutoSize = true;
+      this.lbCs.Location = new System.Drawing.Point(94, 40);
+      this.lbCs.Name = "lbCs";
+      this.lbCs.Size = new System.Drawing.Size(50, 13);
+      this.lbCs.TabIndex = 17;
+      this.lbCs.Text = "loading...";
+      // 
+      // lbConnectionStatus
+      // 
+      this.lbConnectionStatus.AutoSize = true;
+      this.lbConnectionStatus.Location = new System.Drawing.Point(97, 66);
+      this.lbConnectionStatus.Name = "lbConnectionStatus";
+      this.lbConnectionStatus.Size = new System.Drawing.Size(50, 13);
+      this.lbConnectionStatus.TabIndex = 16;
+      this.lbConnectionStatus.Text = "loading...";
+      // 
+      // lbConnectionStatusCaption
+      // 
+      this.lbConnectionStatusCaption.AutoSize = true;
+      this.lbConnectionStatusCaption.Location = new System.Drawing.Point(9, 66);
+      this.lbConnectionStatusCaption.Name = "lbConnectionStatusCaption";
+      this.lbConnectionStatusCaption.Size = new System.Drawing.Size(93, 13);
+      this.lbConnectionStatusCaption.TabIndex = 13;
+      this.lbConnectionStatusCaption.Text = "Connected status:";
+      // 
+      // lbJobsAbortedCaption
+      // 
+      this.lbJobsAbortedCaption.AutoSize = true;
+      this.lbJobsAbortedCaption.Location = new System.Drawing.Point(129, 114);
+      this.lbJobsAbortedCaption.Name = "lbJobsAbortedCaption";
+      this.lbJobsAbortedCaption.Size = new System.Drawing.Size(71, 13);
+      this.lbJobsAbortedCaption.TabIndex = 11;
+      this.lbJobsAbortedCaption.Text = "Jobs aborted:";
+      // 
+      // lbJobdoneCaption
+      // 
+      this.lbJobdoneCaption.AutoSize = true;
+      this.lbJobdoneCaption.Location = new System.Drawing.Point(9, 114);
+      this.lbJobdoneCaption.Name = "lbJobdoneCaption";
+      this.lbJobdoneCaption.Size = new System.Drawing.Size(59, 13);
+      this.lbJobdoneCaption.TabIndex = 10;
+      this.lbJobdoneCaption.Text = "Jobs done:";
+      // 
+      // lbJobsFetchedCaption
+      // 
+      this.lbJobsFetchedCaption.AutoSize = true;
+      this.lbJobsFetchedCaption.Location = new System.Drawing.Point(9, 90);
+      this.lbJobsFetchedCaption.Name = "lbJobsFetchedCaption";
+      this.lbJobsFetchedCaption.Size = new System.Drawing.Size(71, 13);
+      this.lbJobsFetchedCaption.TabIndex = 12;
+      this.lbJobsFetchedCaption.Text = "Jobs fetched:";
+      // 
+      // lbCsCaption
+      // 
+      this.lbCsCaption.AutoSize = true;
+      this.lbCsCaption.Location = new System.Drawing.Point(9, 40);
+      this.lbCsCaption.Name = "lbCsCaption";
+      this.lbCsCaption.Size = new System.Drawing.Size(90, 13);
+      this.lbCsCaption.TabIndex = 9;
+      this.lbCsCaption.Text = "Connected since:";
+      // 
+      // gbEventLog
+      // 
+      this.gbEventLog.Controls.Add(this.lvLog);
+      this.gbEventLog.Location = new System.Drawing.Point(426, 152);
+      this.gbEventLog.Name = "gbEventLog";
+      this.gbEventLog.Size = new System.Drawing.Size(412, 252);
+      this.gbEventLog.TabIndex = 7;
+      this.gbEventLog.TabStop = false;
+      this.gbEventLog.Text = "Hive Client Log";
+      // 
+      // lvLog
+      // 
+      this.lvLog.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.chType,
+            this.chId,
+            this.chMessage,
+            this.chDate});
+      this.lvLog.FullRowSelect = true;
+      this.lvLog.GridLines = true;
+      this.lvLog.LargeImageList = this.ilEventLog;
+      this.lvLog.Location = new System.Drawing.Point(8, 14);
+      this.lvLog.MultiSelect = false;
+      this.lvLog.Name = "lvLog";
+      this.lvLog.Size = new System.Drawing.Size(398, 232);
+      this.lvLog.SmallImageList = this.ilEventLog;
+      this.lvLog.TabIndex = 6;
+      this.lvLog.UseCompatibleStateImageBehavior = false;
+      this.lvLog.View = System.Windows.Forms.View.Details;
+      this.lvLog.DoubleClick += new System.EventHandler(this.lvLog_DoubleClick);
+      this.lvLog.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvLog_ColumnClick);
+      // 
+      // chType
+      // 
+      this.chType.Text = "Type";
+      this.chType.Width = 42;
+      // 
+      // chId
+      // 
+      this.chId.Text = "ID";
+      this.chId.Width = 50;
+      // 
+      // chMessage
+      // 
+      this.chMessage.Text = "Message";
+      this.chMessage.Width = 157;
+      // 
+      // chDate
+      // 
+      this.chDate.Text = "Date";
+      this.chDate.Width = 125;
+      // 
+      // ilEventLog
+      // 
+      this.ilEventLog.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilEventLog.ImageStream")));
+      this.ilEventLog.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilEventLog.Images.SetKeyName(0, "Info.png");
+      this.ilEventLog.Images.SetKeyName(1, "Error.png");
+      // 
+      // tabPage2
+      // 
+      this.tabPage2.Controls.Add(this.pictureBox1);
+      this.tabPage2.Controls.Add(this.groupBox1);
+      this.tabPage2.Controls.Add(this.mcOnline);
+      this.tabPage2.Controls.Add(this.dvOnline);
+      this.tabPage2.Location = new System.Drawing.Point(4, 22);
+      this.tabPage2.Name = "tabPage2";
+      this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage2.Size = new System.Drawing.Size(845, 412);
+      this.tabPage2.TabIndex = 1;
+      this.tabPage2.Text = "Schedule";
+      this.tabPage2.UseVisualStyleBackColor = true;
+      // 
+      // pictureBox1
+      // 
+      this.pictureBox1.Image = global::HeuristicLab.Hive.Client.Console.Properties.Resources.schedule;
+      this.pictureBox1.Location = new System.Drawing.Point(633, 12);
+      this.pictureBox1.Name = "pictureBox1";
+      this.pictureBox1.Size = new System.Drawing.Size(199, 155);
+      this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+      this.pictureBox1.TabIndex = 22;
+      this.pictureBox1.TabStop = false;
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.dtpTo);
+      this.groupBox1.Controls.Add(this.dtpFrom);
+      this.groupBox1.Controls.Add(this.chbade);
+      this.groupBox1.Controls.Add(this.btnRecurrence);
+      this.groupBox1.Controls.Add(this.txtTimeTo);
+      this.groupBox1.Controls.Add(this.txttimeFrom);
+      this.groupBox1.Controls.Add(this.btbDelete);
+      this.groupBox1.Controls.Add(this.label2);
+      this.groupBox1.Controls.Add(this.label1);
+      this.groupBox1.Controls.Add(this.btCreate);
+      this.groupBox1.Location = new System.Drawing.Point(353, 7);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(274, 161);
+      this.groupBox1.TabIndex = 21;
+      this.groupBox1.TabStop = false;
+      // 
+      // chbade
+      // 
+      this.chbade.AutoSize = true;
+      this.chbade.Location = new System.Drawing.Point(105, 91);
+      this.chbade.Name = "chbade";
+      this.chbade.Size = new System.Drawing.Size(90, 17);
+      this.chbade.TabIndex = 31;
+      this.chbade.Text = "All Day Event";
+      this.chbade.UseVisualStyleBackColor = true;
+      this.chbade.CheckedChanged += new System.EventHandler(this.chbade_CheckedChanged);
+      // 
+      // btnRecurrence
+      // 
+      this.btnRecurrence.Location = new System.Drawing.Point(189, 129);
+      this.btnRecurrence.Name = "btnRecurrence";
+      this.btnRecurrence.Size = new System.Drawing.Size(75, 26);
+      this.btnRecurrence.TabIndex = 30;
+      this.btnRecurrence.Text = "Recurrence";
+      this.btnRecurrence.UseVisualStyleBackColor = true;
+      this.btnRecurrence.Click += new System.EventHandler(this.btnRecurrence_Click);
+      // 
+      // txtTimeTo
+      // 
+      this.txtTimeTo.Location = new System.Drawing.Point(192, 65);
+      this.txtTimeTo.Name = "txtTimeTo";
+      this.txtTimeTo.Size = new System.Drawing.Size(41, 20);
+      this.txtTimeTo.TabIndex = 29;
+      // 
+      // txttimeFrom
+      // 
+      this.txttimeFrom.Location = new System.Drawing.Point(192, 31);
+      this.txttimeFrom.Name = "txttimeFrom";
+      this.txttimeFrom.Size = new System.Drawing.Size(41, 20);
+      this.txttimeFrom.TabIndex = 27;
+      // 
+      // btbDelete
+      // 
+      this.btbDelete.Location = new System.Drawing.Point(100, 129);
+      this.btbDelete.Name = "btbDelete";
+      this.btbDelete.Size = new System.Drawing.Size(75, 26);
+      this.btbDelete.TabIndex = 25;
+      this.btbDelete.Text = "Delete";
+      this.btbDelete.UseVisualStyleBackColor = true;
+      this.btbDelete.Click += new System.EventHandler(this.btbDelete_Click);
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(41, 65);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(55, 13);
+      this.label2.TabIndex = 23;
+      this.label2.Text = "End Time:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(41, 34);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(58, 13);
+      this.label1.TabIndex = 21;
+      this.label1.Text = "Start Time:";
+      // 
+      // btCreate
+      // 
+      this.btCreate.Location = new System.Drawing.Point(11, 129);
+      this.btCreate.Name = "btCreate";
+      this.btCreate.Size = new System.Drawing.Size(75, 26);
+      this.btCreate.TabIndex = 20;
+      this.btCreate.Text = "Save";
+      this.btCreate.UseVisualStyleBackColor = true;
+      this.btCreate.Click += new System.EventHandler(this.btCreate_Click);
+      // 
+      // mcOnline
+      // 
+      this.mcOnline.CalendarDimensions = new System.Drawing.Size(2, 1);
+      this.mcOnline.Location = new System.Drawing.Point(9, 12);
+      this.mcOnline.Name = "mcOnline";
+      this.mcOnline.TabIndex = 19;
+      this.mcOnline.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.mcOnline_DateChanged);
+      // 
+      // dtpFrom
+      // 
+      this.dtpFrom.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpFrom.Location = new System.Drawing.Point(97, 31);
+      this.dtpFrom.Name = "dtpFrom";
+      this.dtpFrom.Size = new System.Drawing.Size(89, 20);
+      this.dtpFrom.TabIndex = 32;
+      // 
+      // dtpTo
+      // 
+      this.dtpTo.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpTo.Location = new System.Drawing.Point(97, 64);
+      this.dtpTo.Name = "dtpTo";
+      this.dtpTo.Size = new System.Drawing.Size(89, 20);
+      this.dtpTo.TabIndex = 33;
+      // 
+      // HiveClientConsole
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.ClientSize = new System.Drawing.Size(853, 438);
+      this.Controls.Add(this.tcClientConsole);
+      this.Name = "HiveClientConsole";
+      this.Text = "Client Console (loading...)";
+      this.Load += new System.EventHandler(this.HiveClientConsole_Load);
+      this.Resize += new System.EventHandler(this.HiveClientConsole_Resize);
+      this.tcClientConsole.ResumeLayout(false);
+      this.tpConnection.ResumeLayout(false);
+      this.groupBox2.ResumeLayout(false);
+      this.gbServerConnection.ResumeLayout(false);
+      this.gbServerConnection.PerformLayout();
+      this.gbJobCommon.ResumeLayout(false);
+      this.gbCommon.ResumeLayout(false);
+      this.gbCommon.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbGraph)).EndInit();
+      this.gbEventLog.ResumeLayout(false);
+      this.tabPage2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+      this.groupBox1.ResumeLayout(false);
+      this.groupBox1.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabControl tcClientConsole;
+    private System.Windows.Forms.TabPage tpConnection;
+    private System.Windows.Forms.TabPage tabPage2;
+    private System.Windows.Forms.ListView lvLog;
+    private System.Windows.Forms.ColumnHeader chType;
+    private System.Windows.Forms.ColumnHeader chMessage;
+    private System.Windows.Forms.ColumnHeader chDate;
+    private System.Windows.Forms.Label lbJobdoneCaption;
+    private System.Windows.Forms.Label lbCsCaption;
+    private System.Windows.Forms.Label lbGuidCaption;
+    private System.Windows.Forms.GroupBox gbEventLog;
+    private System.Windows.Forms.Label lbJobsFetchedCaption;
+    private System.Windows.Forms.Label lbJobsAbortedCaption;
+    private System.Windows.Forms.GroupBox gbJobCommon;
+    private System.Windows.Forms.GroupBox gbCommon;
+    private System.Windows.Forms.ListView lvJobDetail;
+    private System.Windows.Forms.ColumnHeader chJobId;
+    private System.Windows.Forms.ColumnHeader chSince;
+    private System.Windows.Forms.ColumnHeader chProgress;
+    private System.Windows.Forms.Label lbConnectionStatusCaption;
+    private System.Windows.Forms.ColumnHeader chId;
+    private System.Windows.Forms.ImageList ilEventLog;
+    private System.Windows.Forms.Label lbCs;
+    private System.Windows.Forms.Label lbConnectionStatus;
+    private System.Windows.Forms.Label lbGuid;
+    private System.Windows.Forms.Label lbJobsFetched;
+    private System.Windows.Forms.Label lbJobdone;
+    private System.Windows.Forms.Label lbJobsAborted;
+    private System.Windows.Forms.PictureBox pbGraph;
+    private System.Windows.Forms.GroupBox gbServerConnection;
+    private System.Windows.Forms.Button btn_clientShutdown;
+    private System.Windows.Forms.Button btnDisconnect;
+    private System.Windows.Forms.Button btConnect;
+    private System.Windows.Forms.TextBox tbPort;
+    private System.Windows.Forms.TextBox tbIPAdress;
+    private System.Windows.Forms.Label lbServerIPCaption;
+    private System.Windows.Forms.Label lbPortCaption;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.Button btCreate;
+    private System.Windows.Forms.MonthCalendar mcOnline;
+    private Calendar.DayView dvOnline;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.PictureBox pictureBox1;
+    private System.Windows.Forms.Button btbDelete;
+    private System.Windows.Forms.TextBox txttimeFrom;
+    private System.Windows.Forms.TextBox txtTimeTo;
+    private System.Windows.Forms.GroupBox groupBox2;
+    private System.Windows.Forms.Button btnRecurrence;
+    private System.Windows.Forms.CheckBox chbade;
+    private System.Windows.Forms.DateTimePicker dtpTo;
+    private System.Windows.Forms.DateTimePicker dtpFrom;
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.cs	(revision 1270)
@@ -0,0 +1,445 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Diagnostics;
+using System.Threading;
+using ZedGraph;
+using HeuristicLab.Hive.Client.Console.ClientService;
+using System.ServiceModel;
+using System.Net;
+using Calendar;
+using System.Globalization;
+
+namespace HeuristicLab.Hive.Client.Console {
+
+  #region Delegates
+
+  delegate void UpdateTextDelegate(EventLogEntry ev);
+
+  #endregion
+
+  public partial class HiveClientConsole : Form {
+
+    #region Declarations
+
+    private const string ENDPOINTADRESS = "net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator";
+    private const string EVENTLOGNAME = "Hive Client";
+
+    private EventLog HiveClientEventLog;
+    private ClientConsoleCommunicatorClient cccc;
+    private System.Windows.Forms.Timer refreshTimer;
+    private ListViewColumnSorterDate lvwColumnSorter;
+
+    private List<Appointment> onlineTimes = new List<Appointment>();
+
+    #endregion
+
+    #region Constructor
+
+    public HiveClientConsole() {
+      InitializeComponent();
+      lvwColumnSorter = new ListViewColumnSorterDate();
+      lvLog.ListViewItemSorter = lvwColumnSorter;
+      lvwColumnSorter.SortColumn = 3;
+      lvwColumnSorter.Order = SortOrder.Descending;
+      InitTimer();
+      ConnectToClient();
+      RefreshGui();
+      GetEventLog();
+      InitCalender();
+    }
+
+    #endregion
+
+    #region Methods
+
+    private void InitTimer() {
+      refreshTimer = new System.Windows.Forms.Timer();
+      refreshTimer.Interval = 1000;
+      refreshTimer.Tick += new EventHandler(refreshTimer_Tick);
+      refreshTimer.Start();
+    }
+
+    private void RefreshGui() {
+      try {
+        cccc.GetStatusInfosAsync();
+      }
+      catch (Exception ex) {
+        refreshTimer.Stop();
+        DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running!", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (res == DialogResult.OK)
+          this.Close();
+      }
+    }
+
+    private void ConnectToClient() {
+      try {
+        cccc = new ClientConsoleCommunicatorClient(new NetTcpBinding(), new EndpointAddress(ENDPOINTADRESS));
+        cccc.GetStatusInfosCompleted += new EventHandler<GetStatusInfosCompletedEventArgs>(cccc_GetStatusInfosCompleted);
+        cccc.GetCurrentConnectionCompleted += new EventHandler<GetCurrentConnectionCompletedEventArgs>(cccc_GetCurrentConnectionCompleted);
+      }
+      catch (Exception) {
+        refreshTimer.Stop();
+        DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running!", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (res == DialogResult.OK)
+          this.Close();
+      }
+    }
+
+    private void GetEventLog() {
+      HiveClientEventLog = new EventLog(EVENTLOGNAME);
+      HiveClientEventLog.Source = EVENTLOGNAME;
+      HiveClientEventLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
+      HiveClientEventLog.EnableRaisingEvents = true;
+
+      ListViewItem curEventLogEntry;
+
+      //databinding on listview?
+      if (HiveClientEventLog != null && HiveClientEventLog.Entries != null) {
+        foreach (EventLogEntry ele in HiveClientEventLog.Entries) {
+          curEventLogEntry = GenerateEventEntry(ele);
+          lvLog.Items.Add(curEventLogEntry);
+        }
+        lvJobDetail.Sort();
+      }
+    }
+
+    private ListViewItem GenerateEventEntry(EventLogEntry ele) {
+      ListViewItem curEventLogEntry;
+      curEventLogEntry = new ListViewItem("", 0);
+      if (ele.EntryType == EventLogEntryType.Error)
+        curEventLogEntry = new ListViewItem("", 1);
+      curEventLogEntry.SubItems.Add(ele.InstanceId.ToString());
+      curEventLogEntry.SubItems.Add(ele.Message);
+      curEventLogEntry.SubItems.Add(ele.TimeGenerated.ToString());
+      return curEventLogEntry;
+    }
+
+    private void UpdateGraph(JobStatus[] jobs) {
+      ZedGraphControl zgc = new ZedGraphControl();
+      GraphPane myPane = zgc.GraphPane;
+      myPane.GraphObjList.Clear();
+
+      myPane.Title.IsVisible = false;  // no title
+      myPane.Border.IsVisible = false; // no border
+      myPane.Chart.Border.IsVisible = false; // no border around the chart
+      myPane.XAxis.IsVisible = false;  // no x-axis
+      myPane.YAxis.IsVisible = false;  // no y-axis
+      myPane.Legend.IsVisible = false; // no legend
+
+      myPane.Fill.Color = this.BackColor;
+
+      myPane.Chart.Fill.Type = FillType.None;
+      myPane.Fill.Type = FillType.Solid;
+
+      double allProgress = 0;
+      double done = 0;
+
+      if (jobs.Length == 0) {
+        myPane.AddPieSlice(100, Color.Green, 0.1, "");
+      } else {
+        for (int i = 0; i < jobs.Length; i++) {
+          allProgress += jobs[i].Progress;
+        }
+
+        done = allProgress / jobs.Length;
+
+        myPane.AddPieSlice(done, Color.Green, 0, "");
+        myPane.AddPieSlice(1 - done, Color.Red, 0, "");
+      }
+      //Hides the slice labels
+      PieItem.Default.LabelType = PieLabelType.None;
+
+      myPane.AxisChange();
+
+      pbGraph.Image = zgc.GetImage();
+    }
+
+    private void InitCalender() {
+
+      dvOnline.StartDate = DateTime.Now;
+      dvOnline.OnNewAppointment += new EventHandler<NewAppointmentEventArgs>(DvOnline_OnNewAppointment);
+      dvOnline.OnResolveAppointments += new EventHandler<ResolveAppointmentsEventArgs>(DvOnline_OnResolveAppointments);
+    }
+
+    private Appointment CreateAppointment(DateTime startDate, DateTime endDate, bool allDay) {
+      Appointment App = new Appointment();
+      App.StartDate = startDate;
+      App.EndDate = endDate;
+      App.AllDayEvent = allDay;
+      App.BorderColor = Color.Red;
+      App.Locked = true;
+      App.Subject = "Online";
+      return App;
+    }
+
+    #endregion
+
+    #region Events
+
+    private void refreshTimer_Tick(object sender, EventArgs e) {
+      RefreshGui();
+    }
+
+    private void cccc_GetCurrentConnectionCompleted(object sender, GetCurrentConnectionCompletedEventArgs e) {
+      if (e.Error == null) {
+        ConnectionContainer curConnection = e.Result;
+        tbIPAdress.Text = curConnection.IPAdress;
+        tbPort.Text = curConnection.Port.ToString();
+      } else {
+        refreshTimer.Stop();
+        DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running! - " + e.Error.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (res == DialogResult.OK)
+          this.Close();
+      }
+    }
+
+    private void cccc_GetStatusInfosCompleted(object sender, GetStatusInfosCompletedEventArgs e) {
+
+      if (e.Error == null) {
+        StatusCommons sc = e.Result;
+
+        lbGuid.Text = sc.ClientGuid.ToString();
+        lbConnectionStatus.Text = sc.Status.ToString();
+        lbJobdone.Text = sc.JobsDone.ToString();
+        lbJobsAborted.Text = sc.JobsAborted.ToString();
+        lbJobsFetched.Text = sc.JobsFetched.ToString();
+
+        this.Text = "Client Console (" + sc.Status.ToString() + ")";
+
+        ListViewItem curJobStatusItem;
+
+        if (sc.Jobs != null) {
+          lvJobDetail.Items.Clear();
+          double progress;
+          foreach (JobStatus curJob in sc.Jobs) {
+            curJobStatusItem = new ListViewItem(curJob.JobId.ToString());
+            curJobStatusItem.SubItems.Add(curJob.Since.ToString());
+            progress = curJob.Progress * 100;
+            curJobStatusItem.SubItems.Add(progress.ToString());
+            lvJobDetail.Items.Add(curJobStatusItem);
+          }
+          lvJobDetail.Sort();
+        }
+
+        UpdateGraph(sc.Jobs);
+
+        if (sc.Status == NetworkEnumWcfConnState.Connected || sc.Status == NetworkEnumWcfConnState.Loggedin) {
+          btConnect.Enabled = false;
+          btnDisconnect.Enabled = true;
+          lbCs.Text = sc.ConnectedSince.ToString();
+          cccc.GetCurrentConnectionAsync();
+        } else if (sc.Status == NetworkEnumWcfConnState.Disconnected) {
+          btConnect.Enabled = true;
+          btnDisconnect.Enabled = false;
+          lbCs.Text = String.Empty;
+        } else if (sc.Status == NetworkEnumWcfConnState.Failed) {
+          btConnect.Enabled = true;
+          btnDisconnect.Enabled = false;
+          lbCs.Text = String.Empty;
+        }
+
+        cccc.GetCurrentConnection();
+      } else {
+        refreshTimer.Stop();
+        DialogResult res = MessageBox.Show("Connection Error, check if Hive Client is running! - " + e.Error.Message, "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        if (res == DialogResult.OK)
+          this.Close();
+      }
+    }
+
+    private void HiveClientConsole_Load(object sender, EventArgs e) {
+      //nothing to do
+    }
+
+    private void UpdateText(EventLogEntry ev) {
+      if (this.lvLog.InvokeRequired) {
+        this.lvLog.Invoke(new
+          UpdateTextDelegate(UpdateText), new object[] { ev });
+      } else {
+        ListViewItem curEventLogEntry = GenerateEventEntry(ev);
+        lvLog.Items.Add(curEventLogEntry);
+        lvJobDetail.Sort();
+      }
+    }
+
+    public void OnEntryWritten(object source, EntryWrittenEventArgs e) {
+      UpdateText(e.Entry);
+    }
+
+    private void HiveClientConsole_Resize(object sender, EventArgs e) {
+      //nothing to do
+    }
+
+    private void lvLog_DoubleClick(object sender, EventArgs e) {
+      ListViewItem lvi = lvLog.SelectedItems[0];
+      HiveEventEntry hee = new HiveEventEntry(lvi.SubItems[2].Text, lvi.SubItems[3].Text, lvi.SubItems[1].Text);
+
+      Form EventlogDetails = new EventLogEntryForm(hee);
+      EventlogDetails.Show();
+    }
+
+    private void btConnect_Click(object sender, EventArgs e) {
+      IPAddress ipAdress;
+      int port;
+      ConnectionContainer cc = new ConnectionContainer();
+      if (IPAddress.TryParse(tbIPAdress.Text, out ipAdress) && int.TryParse(tbPort.Text, out port)) {
+        cc.IPAdress = tbIPAdress.Text;
+        cc.Port = port;
+        cccc.SetConnectionAsync(cc);
+      } else {
+        MessageBox.Show("IP Adress and/or Port Error", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    private void btnDisconnect_Click(object sender, EventArgs e) {
+      cccc.DisconnectAsync();
+    }
+
+    private void lvLog_ColumnClick(object sender, ColumnClickEventArgs e) {
+      // Determine if clicked column is already the column that is being sorted.
+      if (e.Column == lvwColumnSorter.SortColumn) {
+        // Reverse the current sort direction for this column.
+        if (lvwColumnSorter.Order == SortOrder.Ascending) {
+          lvwColumnSorter.Order = SortOrder.Descending;
+        } else {
+          lvwColumnSorter.Order = SortOrder.Ascending;
+        }
+      } else {
+        // Set the column number that is to be sorted; default to ascending.
+        lvwColumnSorter.SortColumn = e.Column;
+        lvwColumnSorter.Order = SortOrder.Ascending;
+      }
+
+      // Perform the sort with these new sort options.
+      lvLog.Sort();
+    }
+
+    private void btn_clientShutdown_Click(object sender, EventArgs e) {
+      DialogResult res = MessageBox.Show("Do you really want to shutdown the Hive Client?", "Hive Client Console", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
+      if (res == DialogResult.Yes) {
+        cccc.ShutdownClient();
+        this.Close();
+      }
+    }
+
+    private void btbDelete_Click(object sender, EventArgs e) {
+      if (dvOnline.SelectedAppointment != null)
+        onlineTimes.Remove(dvOnline.SelectedAppointment);
+      dvOnline.Invalidate();
+    }
+
+    private void chbade_CheckedChanged(object sender, EventArgs e) {
+      if (chbade.Checked) {
+        txttimeFrom.Visible = false;
+        txtTimeTo.Visible = false;
+      } else {
+        txttimeFrom.Visible = true;
+        txtTimeTo.Visible = true;
+      }
+    }
+
+    private void dvOnline_OnSelectionChanged(object sender, EventArgs e) {
+      if (dvOnline.Selection == SelectionType.DateRange) {
+        dtpFrom.Text = dvOnline.SelectionStart.ToShortDateString();
+        dtpTo.Text = dvOnline.SelectionEnd.Date.ToShortDateString();
+        txttimeFrom.Text = dvOnline.SelectionStart.ToShortTimeString();
+        txtTimeTo.Text = dvOnline.SelectionEnd.ToShortTimeString();
+      }
+    }
+
+    private void Connection_KeyPress(object sender, KeyPressEventArgs e) {
+      if (e.KeyChar == (char)Keys.Return)
+        btConnect_Click(null, null);
+    }
+
+    private void mcOnline_DateChanged(object sender, DateRangeEventArgs e) {
+      dvOnline.StartDate = mcOnline.SelectionStart;
+    }
+
+    private void btCreate_Click(object sender, EventArgs e) {
+      DateTime from, to;
+
+      if (!string.IsNullOrEmpty(dtpFrom.Text) && !string.IsNullOrEmpty(dtpTo.Text)) {
+        if (chbade.Checked) {
+          //whole day appointment, only dates are visible
+          if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txtTimeTo.Text, out to) && from < to)
+            onlineTimes.Add(CreateAppointment(from, to.AddDays(1), true));
+          else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        } else if (!string.IsNullOrEmpty(txttimeFrom.Text) && !string.IsNullOrEmpty(txtTimeTo.Text)) {
+          //Timeframe appointment
+          if (DateTime.TryParse(dtpFrom.Text + " " + txttimeFrom.Text, out from) && DateTime.TryParse(dtpTo.Text + " " + txtTimeTo.Text, out to) && from < to) {
+            if (from.Date == to.Date)
+              onlineTimes.Add(CreateAppointment(from, to, false));
+            else {
+              //more than 1 day selected
+              while (from.Date != to.Date) {
+                onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+                from = from.AddDays(1);
+              }
+              onlineTimes.Add(CreateAppointment(from, new DateTime(from.Year, from.Month, from.Day, to.Hour, to.Minute, 0, 0), false));
+            }
+          } else
+            MessageBox.Show("Incorrect date format", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        dvOnline.Invalidate();
+      } else {
+        MessageBox.Show("Error in create appointment, please fill out all textboxes!", "Schedule Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+    }
+
+    void DvOnline_OnResolveAppointments(object sender, ResolveAppointmentsEventArgs e) {
+      List<Appointment> Apps = new List<Appointment>();
+
+      foreach (Appointment m_App in onlineTimes)
+        if ((m_App.StartDate >= e.StartDate) &&
+            (m_App.StartDate <= e.EndDate))
+          Apps.Add(m_App);
+
+      e.Appointments = Apps;
+    }
+
+    void DvOnline_OnNewAppointment(object sender, NewAppointmentEventArgs e) {
+      Appointment Appointment = new Appointment();
+
+      Appointment.StartDate = e.StartDate;
+      Appointment.EndDate = e.EndDate;
+
+      onlineTimes.Add(Appointment);
+    }
+
+    #endregion
+
+    private void btnRecurrence_Click(object sender, EventArgs e) {
+      Form recurrence = new Recurrence();
+      recurrence.Show();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsole.resx	(revision 1270)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="ilEventLog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <data name="ilEventLog.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABS
+        CgAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABEAMAAQEBAAEgBgABECoAAUMCAQF0AWYCCQHxAxkB/wFiAgMB1AEgAgEBLCwAAUMCAQF0AWYCCQHx
+        AxkB/wFiAgMB1AEgAgEBLKQAAWACCgHyAZMBcwEZAf8BvwGBARkB/wG9AYEBGQH/AboBgQEZAf8BuAGB
+        ARkB/wG2AYEBGQH/AU0BNgEZAf8BPQIBAWUcAAFgAgoB8gIZAaQB/wIZAdYB/wIZAdQB/wIZAdIB/wIZ
+        AdAB/wIZAc4B/wIZAVQB/wE9AgEBZZgAASMBHwEZAf8BxwGBARkB/wHDAYEBGQH/AbEBewEZAf8BsQF7
+        ARkB/wGxAXsBGQH/AbEBewEZAf8BswF9ARkB/wG2AYEBGQH/AbQBfgEZAf8BZAIFAeQUAAIZASQB/wIZ
+        AdwB/wIZAdkB/wIZAcoB/wIZAcoB/wIZAcoB/wIZAcoB/wIZAcsB/wIZAc4B/wIZAcwB/wFkAgUB5JAA
+        AxkB/wHLAYEBGQH/AbsBgQEZAf8BtgGBARkB/wG2AYEBGQH/Ae4B3AHEBf8BvgGBATYB/wG2AYEBGQH/
+        AbYBgQEZAf8BtgGBARkB/wG0AX4BGQH/AUkCAgGGDAADGQH/AhkB4AH/AhkB0gH/AhkBzgH/AkYB1gH/
+        AhkBzgH/AhkBzgH/AhkBzgH/AhwBzgH/AhkBzgH/AhkBzgH/AhkBzAH/AUkCAgGGiAABLAIBAUIB0AGG
+        ARkB/wHHAYEBGQH/AboBgQEZAf8BugGBARkB/wG6AYEBGQH/AdABnAFqBf8BugGBARkB/wG6AYEBGQH/
+        AboBgQEZAf8BugGBARkB/wG2AYEBGQH/AW0BSAEZAf8IAAEsAgEBQgIZAeQB/wIZAdwB/wIZAdIB/wKf
+        Ae0F/wJfAd4B/wIZAdIB/wL0Af0F/wIcAdIB/wIZAdIB/wIZAc4B/wIZAXgB/4gAAxkB/wHSAYkBGQH/
+        Ab8BgQEZAf8BvwGBARkB/wG/AYEBGQH/Ab8BgQEZAf8B0wGfAWoF/wG/AYEBGQH/Ab8BgQEZAf8BvwGB
+        ARkB/wG/AYEBGQH/Ab4BgQEZAf8BtgGBARkB/wE2AgEBVwQAAxkB/wIZAeUB/wIZAdYB/wIZAdYN/wL1
+        Af0J/wLiAfoB/wIZAdYB/wIZAdUB/wIZAc4B/wE2AgEBV4QAAWEBSQEZAf8B1AGMARkB/wHEAYEBGQH/
+        AcQBgQEZAf8BxAGBARkB/wHEAYEBGQH/AdcBpAFrBf8BxAGBARkB/wHEAYEBGQH/AcQBgQEZAf8BxAGB
+        ARkB/wHEAYEBGQH/AbgBgQEZAf8BZQIHAewEAAIZAWcB/wIZAegB/wIZAdoB/wIZAdoB/wIZAdoR/wLi
+        AfoB/wIZAdoB/wIZAdoB/wIZAdoB/wIZAdAB/wFlAgcB7IQAAYEBXgEZAf8B1wGOARkB/wHJAYEBGQH/
+        AckBgQEZAf8ByQGBARkB/wHJAYEBGQn/AckBgQEZAf8ByQGBARkB/wHJAYEBGQH/AckBgQEZAf8ByQGB
+        ARkB/wG6AYEBGQH/AxkB/wQAAhkBgQH/AhkB6QH/AhkB3gH/AhkB3gH/AhkB3gH/AvQB/Q3/Al8B5wH/
+        AhkB3gH/AhkB3gH/AhkB3gH/AhkB0gH/AxkB/4QAAXEBTwEZAf8B2QGRARkB/wHOAYMBGQH/Ac4BgwEZ
+        Af8BzgGDARkB/wHOAYMBGQH/Ac4BgwEZAf8B1wGcAUoB/wHOAYMBGQH/Ac4BgwEZAf8BzgGDARkB/wHO
+        AYMBGQH/Ac4BgwEZAf8BvQGBARkB/wFJAhMB+QQAARkBHgFwAf8CGQHsAf8CGQHiAf8CGQHiAf8C9AH9
+        Ff8CXwHqAf8CGQHiAf8CGQHiAf8CGQHUAf8BSQITAfmEAAEcARoBGQH/AdsBlAEZAf8B0gGJARkB/wHS
+        AYkBGQH/AdIBiQEZAf8B0gGJARkB/wHSAYkBGQH/AesBywGQAf8B0gGJARkB/wHSAYkBGQH/AdIBiQEZ
+        Af8B0gGJARkB/wHEAYEBGQH/Ab8BgQEZAf8BUQICAZsEAAIZARwB/wIZAe0B/wIZAeYB/wIZAeUB/wL9
+        Af4F/wLiAfwB/wIZAeUJ/wKBAfEB/wIZAeUB/wIZAdoB/wIZAdYB/wFRAgIBm4QAAVgCAgGyAd4BmAEZ
+        Af8B2wGUARkB/wHXAY4BGQH/AdcBjgEZAf8B1wGOARkB/wH7AfYB6wX/AdcBjgEZAf8B1wGOARkB/wHX
+        AY4BGQH/AdYBjQEZAf8BxAGBARkB/wGpAXoBGQH/CAABWAICAbIBGQEjAe8B/wIZAe0B/wIZAekB/wIZ
+        AekB/wLhAfwB/wIZAekB/wIZAekB/wIZAekB/wKBAfMB/wIZAekB/wIZAegB/wIZAdoB/wEZASEBnQH/
+        jAABUwE4ARkB/wHdAZcBGQH/AdsBlAEZAf8B2wGUARkB/wHbAZQBGQH/AdsBlAEZAf8B3AGXAR8B/wHb
+        AZQBGQH/AdsBlAEZAf8B1QGMARkB/wHJAYEBGQH/AdEBiAEZAf8BLAIZAfwMAAIZAU0B/wIZAe8B/wIZ
+        Ae0B/wIZAe0B/wIZAe0B/wIZAe0B/wIZAe0B/wIZAe0B/wIZAe0B/wIZAegB/wIZAd4B/wEZASwB4gH/
+        ASwCGQH8jAABGQIBASEBkAFtARkB/wHfAZkBGQH/AdsBlAEZAf8B2QGRARkB/wHYAZABGQH/AdgBkAEZ
+        Af8B0wGKARkB/wHQAYYBGQH/Ac4BgwEZAf8B2gGSARkB/wEkAR8BGQH/EAABGQIBASECGQGHAf8BGQEf
+        AfEB/wIZAe0B/wIZAewB/wIZAesB/wIZAesB/wIZAeYB/wIZAeQB/wIZAeIB/wEZATYB5gH/AhkBIwH/
+        lAABEgIBARYBPgEwARkB/wHSAYkBGQH/AeIBnQEZAf8B2QGRARkB/wHXAY4BGQH/AdUBjAEZAf8B4QGb
+        ARkB/wHOAYQBGQH/ATICGQH+GAABEgIBARYCGQE9Af8BGQEfAdMB/wEZATAB9AH/AhkB7AH/AhkB6QH/
+        ARkBGgHoAf8BGQE4AfAB/wIZAcwB/wEyAhkB/qAAAUYCAQF9AxkB/wFqAVEBGQH/AYEBagEZAf8BSwE8
+        ARkB/wEyAhkB/gEUAgEBGiQAAUYCAQF9AxkB/wIZAW0B/wIZAYEB/wIZAU0B/wEyAhkB/gEUAgEBGv8A
+        kQABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAfwBHwH8AR8EAAHwAQcB8AEH
+        BAAB4AEDAeABAwQAAcABAQHAAQEEAAGAAQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAAGABQABgAEA
+        AYAFAAGAAQABgAUAAYABAQGAAQEEAAHAAQEBwAEBBAABwAEDAcABAwQAAeABBwHgAQcEAAH4AQ8B+AEP
+        BAAE/wQACw==
+</value>
+  </data>
+  <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>46</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsoleApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsoleApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsoleApplication.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Client.Console {
+  [ClassInfo(Name = "Hive Client Console", Description = "Console Application for the Hive Client.", AutoRestart = false)]
+  class HiveClientConsoleApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new HiveClientConsole();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsolePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsolePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveClientConsolePlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  [ClassInfo(Name = "HeuristicLab.Hive.Client.Console-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Client.Console-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabHiveClientConsolePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveEventEntry.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveEventEntry.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/HiveEventEntry.cs	(revision 1270)
@@ -0,0 +1,18 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Client.Console {
+  public class HiveEventEntry {
+    public string Message { get; private set; }
+    public string EventDate { get; private set; }
+    public string ID { get; private set; }
+
+    public HiveEventEntry(string message, string eventDate, string id) {
+      Message = message;
+      EventDate = eventDate;
+      ID = id;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/IPAdressTextBox.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/IPAdressTextBox.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/IPAdressTextBox.cs	(revision 1270)
@@ -0,0 +1,1098 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+// copied from http://www.codeproject.com/KB/edit/IPAddressTextBox.aspx
+
+using System;
+using System.Collections;
+using System.ComponentModel;
+using System.Windows.Forms;
+using System.Text.RegularExpressions;
+
+namespace HeuristicLab.Hive.Client.Console {
+  [
+  DefaultProperty("Text"),
+  DefaultEvent("TextChanged"),
+  ]
+  /// <summary>
+  /// IPAddressTextBox
+  /// Control to enter IP-Addresses manually
+  /// Supports Binary and Decimal Notation
+  /// Supports input of CIDR Notation (appending of Bitmask of Subnetmask devided by Slash)
+  /// Support input of IP-Address in IPv6 format
+  /// </summary>
+  public class IPAddressTextBox : System.Windows.Forms.TextBox {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.Container components = null;
+
+    private IPNotation m_ipNotation = IPNotation.IPv4Decimal;
+    private IPNotation m_newIPNotation = IPNotation.IPv4Decimal;
+    private bool m_bOverwrite = true;
+    private bool m_bPreventLeave = true;
+    private System.Windows.Forms.ErrorProvider error;
+    private Regex m_regexValidNumbers = new Regex("[0-9]");
+    private ArrayList m_arlDelimeter = new ArrayList(new char[] { '.' });
+
+
+    public enum IPNotation {
+      IPv4Decimal,			//192.168.000.001
+      IPv4Binary,				//11000000.10101000.00000000.00000001
+      IPv4DecimalCIDR,		//192.168.000.001/16
+      IPv4BinaryCIDR,			//11000000.10101000.00000000.00000001/16
+    }
+
+    /// <summary>
+    /// Constructor
+    /// </summary>
+    public IPAddressTextBox()
+      : base() {
+      this.InitializeComponent();
+
+      this.ResetText();
+    }
+
+    private void InitializeComponent() {
+      this.error = new System.Windows.Forms.ErrorProvider();
+    }
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    protected override void Dispose(bool disposing) {
+      if (disposing) {
+        if (components != null)
+          components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Properties
+    #region Not allowed Properties from BaseClass
+    /// <summary>
+    /// Multiline is not allowed
+    /// </summary>
+    [
+    Category("Behavior"),
+    Description("Multiline is not allowed"),
+    DefaultValue(false),
+    Browsable(false)
+    ]
+    public override bool Multiline {
+      get {
+        return base.Multiline;
+      }
+      set {
+        //base.Multiline = value;
+        base.Multiline = false;
+      }
+    }
+    [
+    Category("Behavior"),
+    Description("AllowDrop is not allowed"),
+    DefaultValue(false),
+    Browsable(false)
+    ]
+    public override bool AllowDrop {
+      get {
+        return base.AllowDrop;
+      }
+      set {
+        //base.AllowDrop = value;
+        base.AllowDrop = false;
+      }
+    }
+    [
+    Category("Behavior"),
+    Description("AcceptsReturn is not allowed"),
+    DefaultValue(false),
+    Browsable(false)
+    ]
+    public new bool AcceptsReturn {
+      get {
+        return base.AcceptsReturn;
+      }
+      set {
+        //base.AcceptsReturn = value;
+        base.AcceptsReturn = false;
+      }
+    }
+    [
+    Category("Behavior"),
+    Description("AcceptsTab is not allowed"),
+    DefaultValue(false),
+    Browsable(false)
+    ]
+    public new bool AcceptsTab {
+      get {
+        return base.AcceptsTab;
+      }
+      set {
+        //base.AcceptTab = value;
+        base.AcceptsTab = false;
+      }
+    }
+    [
+    Category("Behavior"),
+    Description("CharacterCasing is not allowed"),
+    DefaultValue(CharacterCasing.Normal),
+    Browsable(false)
+    ]
+    public new CharacterCasing CharacterCasing {
+      get {
+        return base.CharacterCasing;
+      }
+      set {
+        //base.CharacterCasing = value;
+        base.CharacterCasing = CharacterCasing.Normal;
+      }
+    }
+    [
+    Category("Behavior"),
+    Description("WordWrap is not allowed"),
+    DefaultValue(true),
+    Browsable(false)
+    ]
+    public new bool WordWrap {
+      get {
+        return base.WordWrap;
+      }
+      set {
+        //base.WordWrap = value;
+        base.WordWrap = true;
+      }
+    }
+
+    /// <summary>
+    /// Maxlength must not be changed by user
+    /// </summary>
+    [
+    Category("Behavior"),
+    Description("Specifies maximum length of a String. Change is not allowed"),
+    DefaultValue(15),
+    Browsable(false)
+    ]
+    public override int MaxLength {
+      get {
+        return base.MaxLength;
+      }
+      set {
+        //base.MaxLength = value;
+        base.MaxLength = this.Text.Length;
+      }
+    }
+
+    #endregion // Not allowed Properties from BaseClass
+
+    /// <summary>
+    /// Specifies if IP-Address
+    /// </summary>
+    [
+    Category("Appearance"),
+    Description("Specifies the IP-Address"),
+    DefaultValue("   .   .   .   ")
+    ]
+    public override string Text {
+      get {
+        return base.Text;
+      }
+      set {
+        try {
+          if (IPAddressTextBox.ValidateIP(value, this.m_newIPNotation, this.m_arlDelimeter))
+            base.Text = IPAddressTextBox.MakeValidSpaces(value, this.m_newIPNotation, this.m_arlDelimeter);
+        }
+        catch {
+
+        }
+      }
+    }
+
+    /// <summary>
+    /// Specifies if Numbers should be overwritten
+    /// </summary>
+    [
+    Category("Behavior"),
+    Description("Specifies if Numbers should be overwritten"),
+    DefaultValue(true)
+    ]
+    public bool OverWriteMode {
+      get {
+        return this.m_bOverwrite;
+      }
+      set {
+        if (value != this.m_bOverwrite) {
+          this.m_bOverwrite = value;
+          this.OnOverWriteChanged(value);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Prevents leaving of Control if there is an input-error
+    /// </summary>
+    [
+    Category("Behavior"),
+    Description("Prevents leaving of Control if there is an input-error"),
+    DefaultValue(true)
+    ]
+    public bool PreventLeaveAtError {
+      get {
+        return this.m_bPreventLeave;
+      }
+      set {
+        if (value != this.m_bPreventLeave) {
+          this.m_bPreventLeave = value;
+          this.OnPreventLeaveChanged(value);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Specifies if IP-Address Notation (IPv4, IPv6, Binary, Decimal, CIDR
+    /// </summary>
+    [
+    Category("Appearance"),
+    Description("Specifies if IP-Address Notation (IPv4, IPv6, Binary, Decimal, CIDR"),
+    DefaultValue(IPNotation.IPv4Decimal)
+    ]
+    public IPNotation Notation {
+      get {
+        return this.m_ipNotation;
+      }
+      set {
+        if (value != this.m_ipNotation) {
+          try {
+            this.m_newIPNotation = value;
+            this.ChangeNotation(this.m_ipNotation, this.m_newIPNotation);
+            this.m_ipNotation = this.m_newIPNotation;
+            this.OnNotationChanged(this.m_newIPNotation);
+          }
+          catch (Exception LastError) {
+            System.Diagnostics.Debug.WriteLine(LastError.Message);
+            throw LastError;
+          }
+        }
+      }
+    }
+
+    /// <summary>
+    /// Specifies the Errorprovider that appears at invalid IPs
+    /// </summary>
+    [
+    Category("Appearance"),
+    Description("Specifies the Errorprovider that appears at invalid IPs"),
+    DefaultValue(false)
+    ]
+    public ErrorProvider IPError {
+      get {
+        return this.error;
+      }
+    }
+
+
+    #endregion //Properties
+
+    #region Eventhandling
+
+    /// <summary>
+    /// Delegate for Notation-Events
+    /// </summary>
+    public delegate void NotationChangedEventHandler(IPNotation arg_newValue);
+    /// <summary>
+    /// Event called if AppearanceMode Notation is changed
+    /// </summary>
+    public event NotationChangedEventHandler NotationChanged;
+    /// <summary>
+    /// Delegate for Bool-Properties-Events
+    /// </summary>
+    public delegate void BoolPropertyChangedEventHandler(bool arg_bNewValue);
+    /// <summary>
+    /// Event called if BehaviorMode OverWriteMode is changed
+    /// </summary>
+    public event BoolPropertyChangedEventHandler OverWriteModeChanged;
+    /// <summary>
+    /// Event called if BehaviorMode PreventLeave is changed
+    /// </summary>
+    public event BoolPropertyChangedEventHandler PreventLeaveChanged;
+
+    /// <summary>
+    /// Occures when Appearance-Mode Notation was changed
+    /// </summary>
+    /// <param name="arg_Value">Value, Input IP-Address  notation</param>
+    protected virtual void OnNotationChanged(IPNotation arg_Value) {
+      if (this.NotationChanged != null)
+        this.NotationChanged(arg_Value);
+    }
+
+    private void ChangeNotation(IPNotation arg_oldValue, IPNotation arg_newValue) {
+      string sTo = "";
+      ArrayList arlFrom = new ArrayList(this.Text.Replace(" ", "").Split((char[])this.m_arlDelimeter.ToArray(typeof(char))));
+
+      switch (arg_newValue) {
+        case IPNotation.IPv4Decimal:
+          this.m_regexValidNumbers = new Regex("[0-9]");
+          this.m_arlDelimeter = new ArrayList(new char[] { '.' });
+          break;
+        case IPNotation.IPv4DecimalCIDR:
+          this.m_regexValidNumbers = new Regex("[0-9]");
+          this.m_arlDelimeter = new ArrayList(new char[] { '.', '/' });
+          break;
+        case IPNotation.IPv4Binary:
+          this.m_regexValidNumbers = new Regex("[01]");
+          this.m_arlDelimeter = new ArrayList(new char[] { '.' });
+          break;
+        case IPNotation.IPv4BinaryCIDR:
+          this.m_regexValidNumbers = new Regex("[01]");
+          this.m_arlDelimeter = new ArrayList(new char[] { '.', '/' });
+          break;
+        default:
+          break;
+      }
+
+      switch (arg_oldValue) {
+        case IPNotation.IPv4Decimal:
+          switch (arg_newValue) {
+            case IPNotation.IPv4Decimal:
+              break;
+            case IPNotation.IPv4DecimalCIDR:
+              for (int i = 0; i < arlFrom.Count; i++) {
+                sTo += arlFrom[i].ToString() +
+                  //Add Slash if its the last IPPart, els add a dot
+                  (i == arlFrom.Count - 1 ? "/    " : ".");
+              }
+              break;
+            case IPNotation.IPv4Binary:
+              for (int i = 0; i < arlFrom.Count; i++) {
+                //Convert Decimal to Binary
+                sTo += this.Dec2Bin(arlFrom[i].ToString()) +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 1 ? "" : ".");
+              }
+              break;
+            case IPNotation.IPv4BinaryCIDR:
+              for (int i = 0; i < arlFrom.Count; i++) {
+                //Convert Decimal to Binary
+                sTo += this.Dec2Bin(arlFrom[i].ToString()) +
+                  //Add Slash if its the last IPPart, else add a dot
+                  (i == arlFrom.Count - 1 ? "/    " : ".");
+              }
+              break;
+            default:
+              break;
+          }
+          break;
+        case IPNotation.IPv4DecimalCIDR:
+          switch (arg_newValue) {
+            case IPNotation.IPv4Decimal:
+              //do not use the last Item, its the Subnetmask
+              for (int i = 0; i < arlFrom.Count - 1; i++) {
+                sTo += arlFrom[i].ToString() +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 2 ? "" : ".");
+              }
+              break;
+            case IPNotation.IPv4DecimalCIDR:
+              break;
+            case IPNotation.IPv4Binary:
+              //do not use the last Item, its the Subnetmask
+              for (int i = 0; i < arlFrom.Count - 1; i++) {
+                //Convert Decimal to Binary
+                sTo += this.Dec2Bin(arlFrom[i].ToString()) +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 2 ? "" : ".");
+              }
+              break;
+            case IPNotation.IPv4BinaryCIDR:
+              //do not use the last Item, its the Subnetmask
+              for (int i = 0; i < arlFrom.Count - 1; i++) {
+                //Convert Decimal to Binary
+                sTo += this.Dec2Bin(arlFrom[i].ToString()) +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 2 ? "" : ".");
+              }
+              //Add Subnetmask
+              sTo += "/" + arlFrom[arlFrom.Count - 1];
+              break;
+            default:
+              break;
+          }
+          break;
+        case IPNotation.IPv4Binary:
+          switch (arg_newValue) {
+            case IPNotation.IPv4Decimal:
+              for (int i = 0; i < arlFrom.Count; i++) {
+                //Convert Binary to Decimal
+                sTo += this.Bin2Dec(arlFrom[i].ToString()) +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 1 ? "" : ".");
+              }
+              break;
+            case IPNotation.IPv4DecimalCIDR:
+              for (int i = 0; i < arlFrom.Count; i++) {
+                //Convert Binary to Decimal
+                sTo += this.Bin2Dec(arlFrom[i].ToString()) +
+                  //Add Slash if its the last IPPart, els add a dot
+                  (i == arlFrom.Count - 1 ? "/    " : ".");
+              }
+              break;
+            case IPNotation.IPv4Binary:
+              break;
+            case IPNotation.IPv4BinaryCIDR:
+              for (int i = 0; i < arlFrom.Count; i++) {
+                sTo += arlFrom[i].ToString() +
+                  //Add Slash if its the last IPPart, else add a dot
+                  (i == arlFrom.Count - 1 ? "/    " : ".");
+              }
+              break;
+            default:
+              break;
+          }
+          break;
+        case IPNotation.IPv4BinaryCIDR:
+          switch (arg_newValue) {
+            case IPNotation.IPv4Decimal:
+              //do not use the last Item, its the Subnetmask
+              for (int i = 0; i < arlFrom.Count - 1; i++) {
+                sTo += this.Bin2Dec(arlFrom[i].ToString()) +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 2 ? "" : ".");
+              }
+              break;
+            case IPNotation.IPv4DecimalCIDR:
+              //do not use the last Item, its the Subnetmask
+              for (int i = 0; i < arlFrom.Count - 1; i++) {
+                sTo += this.Bin2Dec(arlFrom[i].ToString()) +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 2 ? "" : ".");
+              }
+              //Add Subnetmask
+              sTo += "/" + arlFrom[arlFrom.Count - 1];
+              break;
+            case IPNotation.IPv4Binary:
+              //do not use the last Item, its the Subnetmask
+              for (int i = 0; i < arlFrom.Count - 1; i++) {
+                sTo += arlFrom[i].ToString() +
+                  //Add Dot if its not the last IPPart, else add nothing
+                  (i == arlFrom.Count - 2 ? "" : ".");
+              }
+              break;
+            case IPNotation.IPv4BinaryCIDR:
+              break;
+            default:
+              break;
+          }
+          break;
+        default:
+          break;
+      }
+
+      this.Text = sTo;
+      this.MaxLength = this.TextLength;
+    }
+
+    /// <summary>
+    /// Occures when Behaviour-Mode OverWriteMode was changed
+    /// </summary>
+    /// <param name="arg_bValue">Value, Overwrite Numbers in Editfield or not</param>
+    protected virtual void OnOverWriteChanged(bool arg_bValue) {
+      if (this.OverWriteModeChanged != null)
+        this.OverWriteModeChanged(arg_bValue);
+    }
+
+    /// <summary>
+    /// Occures when Behaviour-Mode PreventLeave was changed
+    /// </summary>
+    /// <param name="arg_bValue">Value, leave control if there is an error or not</param>
+    protected virtual void OnPreventLeaveChanged(bool arg_bValue) {
+      if (this.PreventLeaveChanged != null)
+        this.PreventLeaveChanged(arg_bValue);
+    }
+
+    #endregion //events
+
+    #region Event-Overrides
+
+    /// <summary>
+    /// Override standard KeyDownEventHandler
+    /// Catches Inputs of "." and "/" to jump to next positions
+    /// </summary>
+    /// <param name="e">KeyEventArgument</param>
+    protected override void OnKeyDown(KeyEventArgs e) {
+      //Zeichen an die richtige stelle schreiben
+      int iPos = this.SelectionStart;
+      char[] cText = this.Text.ToCharArray();
+
+      if (e.Modifiers == Keys.None) {
+        if ((char.IsLetterOrDigit(Convert.ToChar(e.KeyValue)) || e.KeyCode == Keys.NumPad0)//Numpad0=96 --> `
+          && iPos < this.TextLength) {
+          if (this.m_arlDelimeter.Contains(cText[iPos]))
+            iPos += 1;
+          this.SelectionStart = iPos;
+          if (this.OverWriteMode) {
+            if (iPos < this.TextLength)
+              this.SelectionLength = 1;
+          } else {
+            if (iPos < this.TextLength)
+              if (cText[iPos] == ' ')
+                this.SelectionLength = 1;
+          }
+        }
+      }
+      base.OnKeyDown(e);
+    }
+
+    /// <summary>
+    /// Override standard KeyUpEventHandler
+    /// Catches Inputs of "." and "/" to jump to next positions
+    /// </summary>
+    /// <param name="e">KeyEventArgument</param>
+    protected override void OnKeyUp(KeyEventArgs e) {
+      //Zeichen an die richtige stelle schreiben
+      int iPos = this.SelectionStart;
+      char[] cText = this.Text.ToCharArray();
+
+      //Cursor hintern Punkt setzen
+      if ((char.IsLetterOrDigit(Convert.ToChar(e.KeyValue)) || e.KeyCode == Keys.NumPad0)//Numpad0=96 --> `
+        && iPos < this.TextLength) {
+        if (this.m_arlDelimeter.Contains(cText[iPos]))
+          iPos += 1;
+
+        this.SelectionStart = iPos;
+      }
+      base.OnKeyUp(e);
+    }
+
+
+    /// <summary>
+    /// Override standard KeyPressEventHandler
+    /// Catches Inputs of "." and "/" to jump to next positions
+    /// </summary>
+    /// <param name="e">KeyPressEventArgument</param>
+    protected override void OnKeyPress(KeyPressEventArgs e) {
+      //valid input charachters
+      if (char.IsControl(e.KeyChar) ||
+        m_regexValidNumbers.IsMatch(e.KeyChar.ToString())) {
+        e.Handled = false;
+      } else {
+        switch (e.KeyChar) {
+          case '/':
+            this.JumpToSlash();
+            break;
+          case '.':
+          case ':':
+            this.JumpToNextDot();
+            break;
+          default:
+            break;
+        }
+        e.Handled = true;
+      }
+      base.OnKeyPress(e);
+    }
+
+    /// <summary>
+    /// Override standard TextChangedEventHandler
+    /// Looks if inserted IP-Address is valid
+    /// </summary>
+    /// <param name="e">EventArgument</param>
+    protected override void OnTextChanged(EventArgs e) {
+      base.OnTextChanged(e);
+      if (this.Text.Length == 0)
+        this.ResetText();
+
+      try {
+        if (!this.ValidateIP())
+          this.error.SetError(this, "Invalid IP-address");
+        else
+          this.error.SetError(this, "");
+      }
+      catch (Exception LastError) {
+        this.error.SetError(this, LastError.Message);
+      }
+    }
+
+    /// <summary>
+    /// Override standard ValidatingEventHandler
+    /// Validates inserted IP-Address, and cancels Textbox if valid or PreventLeave=false
+    /// </summary>
+    /// <param name="e">CancelEventArgument</param>
+    protected override void OnValidating(CancelEventArgs e) {
+      //e.Cancel = true;//suppress cancel-signal = not validated
+      e.Cancel = (!this.ValidateIP() && this.m_bPreventLeave);
+      base.OnValidating(e);
+    }
+
+    #endregion	//Eventhandling
+
+    #region Methods
+
+    /// <summary>
+    /// Override standard ResetText
+    /// Fills Textbox with Dots and Slashes dependend on Properties
+    /// </summary>
+    public override void ResetText() {
+      base.ResetText();
+      switch (this.Notation) {
+        case IPNotation.IPv4Decimal:
+          this.Text = "   .   .   .   ";
+          break;
+        case IPNotation.IPv4DecimalCIDR:
+          this.Text = "   .   .   .   /    ";
+          break;
+        case IPNotation.IPv4Binary:
+          this.Text = "        .        .        .        ";
+          break;
+        case IPNotation.IPv4BinaryCIDR:
+          this.Text = "        .        .        .        /    ";
+          break;
+        default:
+          break;
+      }
+
+      this.MaxLength = this.TextLength;
+    }
+
+
+    /// <summary>
+    /// Window-Message Constant
+    /// </summary>
+    protected const int WM_KEYDOWN = 0x0100;
+
+    /// <summary>
+    /// Override standard PreProcessMessge
+    /// Catches Inputs of Backspaces and Deletes to remove IP-Digits at the right position
+    /// </summary>
+    /// <param name="msg">Process Message</param>
+    public override bool PreProcessMessage(ref Message msg) {
+      if (msg.Msg == WM_KEYDOWN) {
+        Keys keyData = ((Keys)(int)msg.WParam) | ModifierKeys;
+        Keys keyCode = ((Keys)(int)msg.WParam);
+
+        int iPos = this.SelectionStart;
+        char[] cText = this.Text.ToCharArray();
+        switch (keyCode) {
+          case Keys.Delete:
+            if (iPos < this.TextLength) {
+              while (cText[iPos] == '.' || cText[iPos] == ':' || cText[iPos] == '/') {
+                if ((iPos += 1) >= cText.Length)
+                  break;
+              }
+              if (iPos < this.TextLength) {
+                base.Text = this.Text.Substring(0, iPos) + " " + this.Text.Substring(iPos + 1);
+                this.SelectionStart = iPos + 1;
+              } else
+                this.SelectionStart = this.TextLength - 1;
+            }
+            return true;
+          case Keys.Back:
+            if (iPos > 0) {
+              while (cText[iPos - 1] == '.' || cText[iPos - 1] == ':' || cText[iPos - 1] == '/') {
+                if ((iPos -= 1) <= 0)
+                  break;
+              }
+              if (iPos > 0) {
+                base.Text = this.Text.Substring(0, iPos - 1) + " " + this.Text.Substring(iPos);
+                this.SelectionStart = iPos - 1;
+              } else
+                this.SelectionStart = 0;
+            }
+            return true;
+          default:
+            break;
+        }
+      }
+      return base.PreProcessMessage(ref msg);
+    }
+
+    /// <summary>
+    /// Returns the formatted IP-Addresses without spaces and Zeroes
+    /// </summary>
+    /// <returns>IP-Address without spaces and Zeroes</returns>
+    public string GetPureIPAddress() {
+      string s = "";
+      ArrayList arlIP = new ArrayList(this.Text.Replace(" ", "").Split((char[])this.m_arlDelimeter.ToArray(typeof(char))));
+      for (int i = 0; i < arlIP.Count; i++) {
+        while (arlIP[i].ToString().StartsWith("0"))
+          arlIP[i] = arlIP[i].ToString().Substring(1);
+      }
+      s = IPAddressTextBox.MakeIP((string[])arlIP.ToArray(typeof(string)), this.m_ipNotation);
+      return s;
+    }
+
+    #endregion //Methods
+
+    #region Helperfunctions
+
+    /// <summary>
+    /// Sets Inputcursor to Subnet-Slash
+    /// </summary>
+    private void JumpToSlash() {
+      int iSelStart = this.Text.LastIndexOf("/");
+      if (iSelStart >= 0) {
+        this.Select(iSelStart + 1, 0);
+      }
+    }
+
+    /// <summary>
+    /// Sets input cursour to next Dot
+    /// </summary>
+    private void JumpToNextDot() {
+      int iSelStart = this.Text.IndexOf('.', this.SelectionStart);
+      if (iSelStart >= 0) {
+        this.Select(iSelStart + 1, 0);
+      } else {
+        iSelStart = this.Text.IndexOf(':', this.SelectionStart);
+        if (iSelStart >= 0) {
+          this.Select(iSelStart + 1, 0);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Converts Decimal IP-Part to Binary (default IPv6 = false)
+    /// </summary>
+    /// <param name="arg_sDec">Decimal IP-Part</param>
+    /// <param name="arg_bIPv6">Binary for IPv6 (has 16 digits)</param>
+    /// <returns>Binary IP-Part</returns>
+    private string Dec2Bin(string arg_sDec) {
+      return this.Dec2Bin(arg_sDec, false);
+    }
+    /// <summary>
+    /// Converts Decimal IP-Part to Binary
+    /// </summary>
+    /// <param name="arg_sDec">Decimal IP-Part</param>
+    /// <param name="arg_bIPv6">Binary for IPv6 (has 16 digits)</param>
+    /// <returns>Binary IP-Part</returns>
+    private string Dec2Bin(string arg_sDec, bool arg_bIPv6) {
+      string sBin = (arg_bIPv6 ? "0000000000000000" : "00000000"), sSubnet = "";
+      arg_sDec = arg_sDec.Trim();
+      while (arg_sDec.Length < 3)
+        arg_sDec = "0" + arg_sDec;
+      if (arg_sDec.IndexOf("/") >= 0) {
+        sSubnet = arg_sDec.Substring(arg_sDec.IndexOf("/"));
+        arg_sDec = arg_sDec.Substring(0, arg_sDec.IndexOf("/"));
+      }
+      int iDec = Convert.ToInt32(arg_sDec, 10);
+      sBin = Convert.ToString(iDec, 2);
+      while (sBin.Length < (arg_bIPv6 ? 16 : 8))
+        sBin = "0" + sBin;
+      return sBin + sSubnet;
+    }
+
+    /// <summary>
+    /// Converts Binary IP-Part to Decimal
+    /// </summary>
+    /// <param name="arg_sBin">Binary IP-Part</param>
+    /// <returns>Decimal IP-Part</returns>
+    private string Bin2Dec(string arg_sBin) {
+      string sDec = "000", sSubnet = "";
+      arg_sBin = arg_sBin.Trim();
+      while (arg_sBin.Length < 8)
+        arg_sBin = "0" + arg_sBin;
+      if (arg_sBin.IndexOf("/") >= 0) {
+        sSubnet = arg_sBin.Substring(arg_sBin.IndexOf("/"));
+        arg_sBin = arg_sBin.Substring(0, arg_sBin.IndexOf("/"));
+      }
+      int iBin = Convert.ToInt32(arg_sBin, 2);
+      if (iBin > 255)
+        throw new Exception(string.Format("Can't convert Binary to Decimal IP-Address\nbin:{0} is greater than 255", iBin));
+      sDec = Convert.ToString(iBin, 10);
+      while (sDec.Length < 3)
+        sDec = "0" + sDec;
+      return sDec + sSubnet;
+    }
+
+    /// <summary>
+    /// Converts Binary IP-Part to Hexadecimal
+    /// </summary>
+    /// <param name="arg_sBin">Binary IP-Part</param>
+    /// <returns>Hexadecimal IP-Part</returns>
+    private string Bin2Hex(string arg_sBin) {
+      string sHex = "0000", sSubnet = "";
+      arg_sBin = arg_sBin.Trim();
+      while (arg_sBin.Length < 8)
+        arg_sBin = "0" + arg_sBin;
+      if (arg_sBin.IndexOf("/") >= 0) {
+        sSubnet = arg_sBin.Substring(arg_sBin.IndexOf("/"));
+        arg_sBin = arg_sBin.Substring(0, arg_sBin.IndexOf("/"));
+      }
+      int iBin = Convert.ToInt32(arg_sBin, 2);
+      sHex = Convert.ToString(iBin, 16);
+      while (sHex.Length < 4)
+        sHex = "0" + sHex;
+      return sHex + sSubnet;
+    }
+
+    /// <summary>
+    /// Converts Hexadecimal IP-Part to Binary (default IPv6=true)
+    /// </summary>
+    /// <param name="arg_sHex">Hexadecimal IP-Part</param>
+    /// <returns>Binary IP-Part</returns>
+    private string Hex2Bin(string arg_sHex) {
+      return this.Hex2Bin(arg_sHex, true);
+    }
+    /// <summary>
+    /// Converts Hexadecimal IP-Part to Binary
+    /// </summary>
+    /// <param name="arg_sHex">Hexadecimal IP-Part</param>
+    /// <param name="arg_bIPv6">Binary for IPv6 (16 digits)</param>
+    /// <returns>Binary IP-Part</returns>
+    private string Hex2Bin(string arg_sHex, bool arg_bIPv6) {
+      string sBin = (arg_bIPv6 ? "0000000000000000" : "00000000"), sSubnet = "";
+      arg_sHex = arg_sHex.Trim();
+      while (arg_sHex.Length < 3)
+        arg_sHex = "0" + arg_sHex;
+      if (arg_sHex.IndexOf("/") >= 0) {
+        sSubnet = arg_sHex.Substring(arg_sHex.IndexOf("/"));
+        arg_sHex = arg_sHex.Substring(0, arg_sHex.IndexOf("/"));
+      }
+      int iHex = Convert.ToInt32(arg_sHex, 16);
+      if (iHex > 255 && !arg_bIPv6)
+        throw new Exception(string.Format("Can't convert Hexadecimal to Binary IP-Address\nhex:{0} is greater than 11111111", iHex));
+      sBin = Convert.ToString(iHex, 2);
+      while (sBin.Length < (arg_bIPv6 ? 16 : 8))
+        sBin = "0" + sBin;
+      return sBin + sSubnet;
+    }
+
+    /// <summary>
+    /// Converts Decimal IP-Part to Hexadecimal
+    /// </summary>
+    /// <param name="arg_sDec">Decimal IP-Part</param>
+    /// <returns>Hexadecimal IP-Part</returns>
+    private string Dec2Hex(string arg_sDec) {
+      string sHex = "0000", sSubnet = "";
+      arg_sDec = arg_sDec.Trim();
+      while (arg_sDec.Length < 8)
+        arg_sDec = "0" + arg_sDec;
+      if (arg_sDec.IndexOf("/") >= 0) {
+        sSubnet = arg_sDec.Substring(arg_sDec.IndexOf("/"));
+        arg_sDec = arg_sDec.Substring(0, arg_sDec.IndexOf("/"));
+      }
+      int iDec = Convert.ToInt32(arg_sDec, 10);
+      sHex = Convert.ToString(iDec, 16);
+      while (sHex.Length < 4)
+        sHex = "0" + sHex;
+      return sHex + sSubnet;
+    }
+
+    /// <summary>
+    /// Converts Hexadecimal IP-Part to Decimal
+    /// </summary>
+    /// <param name="arg_sHex">Hexadecimal IP-Part</param>
+    /// <returns>Decimal IP-Part</returns>
+    private string Hex2Dec(string arg_sHex) {
+      string sDec = "000", sSubnet = "";
+      arg_sHex = arg_sHex.Trim();
+      while (arg_sHex.Length < 8)
+        arg_sHex = "0" + arg_sHex;
+      if (arg_sHex.IndexOf("/") >= 0) {
+        sSubnet = arg_sHex.Substring(arg_sHex.IndexOf("/"));
+        arg_sHex = arg_sHex.Substring(0, arg_sHex.IndexOf("/"));
+      }
+      int iHex = Convert.ToInt32(arg_sHex, 16);
+      if (iHex > 255)
+        throw new Exception(string.Format("Can't convert Hexadecimal to Decimal IP-Address\nhex:{0} is greater than 255", iHex));
+      sDec = Convert.ToString(iHex, 10);
+      while (sDec.Length < 3)
+        sDec = "0" + sDec;
+      return sDec + sSubnet;
+    }
+
+    /// <summary>
+    /// Checks if IP in Textfield is valid
+    /// </summary>
+    /// <returns>true/false valid/not</returns>
+    private bool ValidateIP() {
+      if (IPAddressTextBox.ValidateIP(this.Text, this.m_newIPNotation, this.m_arlDelimeter))
+        return true;
+      else
+        //if Control is not visible or enabled, it doesn't matter if IP is valid
+        return this.Enabled || this.Visible ? false : true;
+    }
+
+    /// <summary>
+    /// Checks if the given String is an valid ip-address
+    /// </summary>
+    /// <param name="arg_sIP">IP-String</param>
+    /// <param name="arg_ipNotation">IP-notation</param>
+    /// <param name="arg_arlDelimeter">Delimeter to parse IPString</param>
+    /// <returns>true/false validated/not</returns>
+    protected static bool ValidateIP(string arg_sIP, IPNotation arg_ipNotation, ArrayList arg_arlDelimeter) {
+      bool bValidated = false;
+      ArrayList arlIP = new ArrayList(arg_sIP.Split((char[])arg_arlDelimeter.ToArray(typeof(char))));
+
+      try {
+        switch (arg_ipNotation) {
+          case IPNotation.IPv4Decimal:
+          case IPNotation.IPv4Binary:
+            bValidated = arlIP.Count == 4;
+            break;
+          case IPNotation.IPv4DecimalCIDR:
+          case IPNotation.IPv4BinaryCIDR:
+            bValidated = arlIP.Count == 5;
+            break;
+          default:
+            break;
+        }
+        if (!bValidated) {
+          throw new Exception("IP-Address has wrong element count");
+        }
+
+        //don't check the 1st 2 elemnt if its IPv4 in IPv6-notation
+        for (int i = (arg_ipNotation.ToString().IndexOf("IPv6IPv4") == 0 ? 2 : 0);
+          //don't check the subnet element
+          i < (arg_ipNotation.ToString().IndexOf("CIDR") > 0 ? arlIP.Count - 1 : arlIP.Count);
+          i++) {
+          string sIPPart = arlIP[i].ToString().Replace(" ", "");
+          int iIPPart = 0;
+          switch (arg_ipNotation) {
+            case IPNotation.IPv4Decimal:
+            case IPNotation.IPv4DecimalCIDR:
+              while (sIPPart.Length < 3)
+                sIPPart = "0" + sIPPart;
+              iIPPart = Convert.ToInt32(sIPPart, 10);
+              if (iIPPart < 256)
+                bValidated = true;
+              else
+                bValidated = false;
+              break;
+            case IPNotation.IPv4Binary:
+            case IPNotation.IPv4BinaryCIDR:
+              while (sIPPart.Length < 8)
+                sIPPart = "0" + sIPPart;
+              iIPPart = Convert.ToInt32(sIPPart, 2);
+              if (iIPPart < 256)
+                bValidated = true;
+              else
+                bValidated = false;
+              break;
+            default:
+              break;
+          }
+          if (!bValidated) {
+            throw new Exception(string.Format("IP-Address element {0}({1}) has wrong format", i, sIPPart));
+          }
+        }
+      }
+      catch (Exception LastError) {
+        System.Diagnostics.Debug.WriteLine(LastError.Message);
+        bValidated = false;
+        throw LastError;
+      }
+      return bValidated;
+    }
+
+    /// <summary>
+    /// Adds Spaces to given IP-Address, so it fits in the textfield
+    /// </summary>
+    /// <param name="arg_sIP">IP-String</param>
+    /// <param name="arg_ipNotation">IP-notation</param>
+    /// <param name="arg_arlDelimeter">Delimeter to parse IPString</param>
+    /// <returns>IP-Address with Spaces</returns>
+    protected static string MakeValidSpaces(string arg_sIP, IPNotation arg_ipNotation, ArrayList arg_arlDelimeter) {
+      ArrayList arlIP = new ArrayList(arg_sIP.Split((char[])arg_arlDelimeter.ToArray(typeof(char))));
+      //don't check the 1st 2 elemnt if its IPv4 in IPv6-notation
+      for (int i = (arg_ipNotation.ToString().IndexOf("IPv6IPv4") == 0 ? 2 : 0);
+        //don't check the subnet element
+        i < (arg_ipNotation.ToString().IndexOf("CIDR") > 0 ? arlIP.Count - 1 : arlIP.Count);
+        i++) {
+        switch (arg_ipNotation) {
+          case IPNotation.IPv4Decimal:
+          case IPNotation.IPv4DecimalCIDR:
+            while (arlIP[i].ToString().Length < 3)
+              arlIP[i] = arlIP[i].ToString() + " ";
+            break;
+          case IPNotation.IPv4Binary:
+          case IPNotation.IPv4BinaryCIDR:
+            while (arlIP[i].ToString().Length < 8)
+              arlIP[i] = arlIP[i].ToString() + " ";
+            break;
+          default:
+            break;
+        }
+      }
+
+      return IPAddressTextBox.MakeIP((string[])arlIP.ToArray(typeof(string)), arg_ipNotation);
+    }
+
+    /// <summary>
+    /// Adds Zeroes to given IP-Address, so it fits in the textfield
+    /// </summary>
+    /// <param name="arg_sIP">IP-String</param>
+    /// <param name="arg_ipNotation">IP-notation</param>
+    /// <param name="arg_arlDelimeter">Delimeter to parse IPString</param>
+    /// <returns>IP-Address with Spaces</returns>
+    protected static string MakeValidZeroes(string arg_sIP, IPNotation arg_ipNotation, ArrayList arg_arlDelimeter) {
+      ArrayList arlIP = new ArrayList(arg_sIP.Split((char[])arg_arlDelimeter.ToArray(typeof(char))));
+      //don't check the 1st 2 elemnt if its IPv4 in IPv6-notation
+      for (int i = (arg_ipNotation.ToString().IndexOf("IPv6IPv4") == 0 ? 2 : 0);
+        //don't check the subnet element
+        i < (arg_ipNotation.ToString().IndexOf("CIDR") > 0 ? arlIP.Count - 1 : arlIP.Count);
+        i++) {
+        switch (arg_ipNotation) {
+          case IPNotation.IPv4Decimal:
+          case IPNotation.IPv4DecimalCIDR:
+            while (arlIP[i].ToString().Length < 3)
+              arlIP[i] = "0" + arlIP[i].ToString();
+            break;
+          case IPNotation.IPv4Binary:
+          case IPNotation.IPv4BinaryCIDR:
+            while (arlIP[i].ToString().Length < 8)
+              arlIP[i] = "0" + arlIP[i].ToString();
+            break;
+          default:
+            break;
+        }
+      }
+
+      return IPAddressTextBox.MakeIP((string[])arlIP.ToArray(typeof(string)), arg_ipNotation);
+    }
+
+    /// <summary>
+    /// Creates IP-Addresstring from given StrignArray and Notation
+    /// </summary>
+    /// <param name="arg_sIP">String-Array with elements for IP-Address</param>
+    /// <param name="arg_ipNotation">Notation of IP-Address</param>
+    /// <returns>IPAddress-String</returns>
+    protected static string MakeIP(string[] arg_sIP, IPNotation arg_ipNotation) {
+      string s = "";
+      for (int i = 0; i < arg_sIP.Length; i++) {
+        switch (arg_ipNotation) {
+          case IPNotation.IPv4Decimal:
+          case IPNotation.IPv4Binary:
+            s += (arg_sIP[i].Length > 0 ? arg_sIP[i] : "0") + (i < (arg_sIP.Length - 1) ? "." : "");
+            break;
+          case IPNotation.IPv4DecimalCIDR:
+          case IPNotation.IPv4BinaryCIDR:
+            s += (arg_sIP[i].Length > 0 ? arg_sIP[i] : "0") + (i < (arg_sIP.Length - 2) ? "." : (i < arg_sIP.Length - 1) ? "/" : "");
+            break;
+          default:
+            break;
+        }
+      }
+      return s;
+    }
+
+    #endregion //Helperfunctions
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ListViewColumnSorterDate.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ListViewColumnSorterDate.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ListViewColumnSorterDate.cs	(revision 1270)
@@ -0,0 +1,99 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.Collections;
+
+
+namespace HeuristicLab.Hive.Client.Console {
+  public class ListViewColumnSorterDate : IComparer {
+
+    /// <summary>
+    /// Specifies the column to be sorted
+    /// </summary>
+    private int ColumnToSort;
+    /// <summary>
+    /// Specifies the order in which to sort (i.e. 'Ascending').
+    /// </summary>
+    private SortOrder OrderOfSort;
+    /// <summary>
+    /// Case insensitive comparer object
+    /// </summary>
+    private CaseInsensitiveComparer ObjectCompare;
+
+    /// <summary>
+    /// Class constructor.  Initializes various elements
+    /// </summary>
+    public ListViewColumnSorterDate() {
+      // Initialize the column to '0'
+      ColumnToSort = 0;
+
+      // Initialize the sort order to 'none'
+      OrderOfSort = SortOrder.None;
+
+      // Initialize the CaseInsensitiveComparer object
+      ObjectCompare = new CaseInsensitiveComparer();
+    }
+
+    /// <summary>
+    /// This method is inherited from the IComparer interface.  It compares the two objects passed using a case insensitive comparison.
+    /// </summary>
+    /// <param name="x">First object to be compared</param>
+    /// <param name="y">Second object to be compared</param>
+    /// <returns>The result of the comparison. "0" if equal, negative if 'x' is less than 'y' and positive if 'x' is greater than 'y'</returns>
+    public int Compare(object x, object y) {
+      int compareResult = 0;
+      ListViewItem listviewX, listviewY;
+
+      // Cast the objects to be compared to ListViewItem objects
+      listviewX = (ListViewItem)x;
+      listviewY = (ListViewItem)y;
+
+      DateTime listviewDateX = new DateTime();
+      DateTime listviewDateY = new DateTime();
+
+      if (DateTime.TryParse(listviewX.SubItems[ColumnToSort].Text, out listviewDateX) && DateTime.TryParse(listviewY.SubItems[ColumnToSort].Text, out listviewDateY)) {
+        compareResult = DateTime.Compare(listviewDateX, listviewDateY);
+      } else {
+        // Compare the two items
+        compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
+      }
+      // Calculate correct return value based on object comparison
+      if (OrderOfSort == SortOrder.Ascending) {
+        // Ascending sort is selected, return normal result of compare operation
+        return compareResult;
+      } else if (OrderOfSort == SortOrder.Descending) {
+        // Descending sort is selected, return negative result of compare operation
+        return (-compareResult);
+      } else {
+        // Return '0' to indicate they are equal
+        return 0;
+      }
+    }
+
+    /// <summary>
+    /// Gets or sets the number of the column to which to apply the sorting operation (Defaults to '0').
+    /// </summary>
+    public int SortColumn {
+      set {
+        ColumnToSort = value;
+      }
+      get {
+        return ColumnToSort;
+      }
+    }
+
+    /// <summary>
+    /// Gets or sets the order of sorting to apply (for example, 'Ascending' or 'Descending').
+    /// </summary>
+    public SortOrder Order {
+      set {
+        OrderOfSort = value;
+      }
+      get {
+        return OrderOfSort;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("1131CD44-0FDC-4f7b-9D7E-8029B26EAE05")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,91 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Console.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Client.Console.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Error {
+            get {
+                object obj = ResourceManager.GetObject("Error", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Info {
+            get {
+                object obj = ResourceManager.GetObject("Info", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap schedule {
+            get {
+                object obj = ResourceManager.GetObject("schedule", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap shutdown_icon {
+            get {
+                object obj = ResourceManager.GetObject("shutdown_icon", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,133 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Error" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Error.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Info" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Info.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="schedule" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\schedule.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="shutdown_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\shutdown-icon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,38 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Console.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("10.0.0.1")]
+        public string IpAdress {
+            get {
+                return ((string)(this["IpAdress"]));
+            }
+            set {
+                this["IpAdress"] = value;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,9 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Client.Console.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="IpAdress" Type="System.String" Scope="User">
+      <Value Profile="(Default)">10.0.0.1</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.Designer.cs	(revision 1270)
@@ -0,0 +1,386 @@
+﻿namespace HeuristicLab.Hive.Client.Console {
+  partial class Recurrence {
+    /// <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.cmbEnd = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.gbAppointment = new System.Windows.Forms.GroupBox();
+      this.cmbDuration = new System.Windows.Forms.ComboBox();
+      this.label3 = new System.Windows.Forms.Label();
+      this.gbRecurrence = new System.Windows.Forms.GroupBox();
+      this.rbtWeekly = new System.Windows.Forms.RadioButton();
+      this.rbtDaily = new System.Windows.Forms.RadioButton();
+      this.txtDays = new System.Windows.Forms.TextBox();
+      this.label4 = new System.Windows.Forms.Label();
+      this.gbDaily = new System.Windows.Forms.GroupBox();
+      this.gbWeekly = new System.Windows.Forms.GroupBox();
+      this.cbSunday = new System.Windows.Forms.CheckBox();
+      this.cbSaturday = new System.Windows.Forms.CheckBox();
+      this.cbFriday = new System.Windows.Forms.CheckBox();
+      this.cbThursday = new System.Windows.Forms.CheckBox();
+      this.cbWednesday = new System.Windows.Forms.CheckBox();
+      this.cbTuesday = new System.Windows.Forms.CheckBox();
+      this.cbMonday = new System.Windows.Forms.CheckBox();
+      this.label7 = new System.Windows.Forms.Label();
+      this.gbDuration = new System.Windows.Forms.GroupBox();
+      this.dtpEnd = new System.Windows.Forms.DateTimePicker();
+      this.dtpStart = new System.Windows.Forms.DateTimePicker();
+      this.label5 = new System.Windows.Forms.Label();
+      this.label6 = new System.Windows.Forms.Label();
+      this.cmbEndTime = new System.Windows.Forms.ComboBox();
+      this.cmbBeginTime = new System.Windows.Forms.ComboBox();
+      this.gbAppointment.SuspendLayout();
+      this.gbRecurrence.SuspendLayout();
+      this.gbDaily.SuspendLayout();
+      this.gbWeekly.SuspendLayout();
+      this.gbDuration.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // cmbEnd
+      // 
+      this.cmbEnd.AutoSize = true;
+      this.cmbEnd.Location = new System.Drawing.Point(129, 22);
+      this.cmbEnd.Name = "cmbEnd";
+      this.cmbEnd.Size = new System.Drawing.Size(29, 13);
+      this.cmbEnd.TabIndex = 34;
+      this.cmbEnd.Text = "End:";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(7, 22);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(37, 13);
+      this.label1.TabIndex = 32;
+      this.label1.Text = "Begin:";
+      // 
+      // gbAppointment
+      // 
+      this.gbAppointment.Controls.Add(this.cmbEndTime);
+      this.gbAppointment.Controls.Add(this.cmbBeginTime);
+      this.gbAppointment.Controls.Add(this.cmbDuration);
+      this.gbAppointment.Controls.Add(this.label3);
+      this.gbAppointment.Controls.Add(this.label1);
+      this.gbAppointment.Controls.Add(this.cmbEnd);
+      this.gbAppointment.Location = new System.Drawing.Point(2, 2);
+      this.gbAppointment.Name = "gbAppointment";
+      this.gbAppointment.Size = new System.Drawing.Size(386, 50);
+      this.gbAppointment.TabIndex = 39;
+      this.gbAppointment.TabStop = false;
+      this.gbAppointment.Text = "Appointment";
+      // 
+      // cmbDuration
+      // 
+      this.cmbDuration.FormattingEnabled = true;
+      this.cmbDuration.Location = new System.Drawing.Point(303, 18);
+      this.cmbDuration.Name = "cmbDuration";
+      this.cmbDuration.Size = new System.Drawing.Size(77, 21);
+      this.cmbDuration.TabIndex = 37;
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(255, 21);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(50, 13);
+      this.label3.TabIndex = 36;
+      this.label3.Text = "Duration:";
+      // 
+      // gbRecurrence
+      // 
+      this.gbRecurrence.Controls.Add(this.rbtWeekly);
+      this.gbRecurrence.Controls.Add(this.rbtDaily);
+      this.gbRecurrence.Location = new System.Drawing.Point(2, 59);
+      this.gbRecurrence.Name = "gbRecurrence";
+      this.gbRecurrence.Size = new System.Drawing.Size(123, 94);
+      this.gbRecurrence.TabIndex = 40;
+      this.gbRecurrence.TabStop = false;
+      this.gbRecurrence.Text = "Recurrence Pattern";
+      // 
+      // rbtWeekly
+      // 
+      this.rbtWeekly.AutoSize = true;
+      this.rbtWeekly.Location = new System.Drawing.Point(11, 58);
+      this.rbtWeekly.Name = "rbtWeekly";
+      this.rbtWeekly.Size = new System.Drawing.Size(61, 17);
+      this.rbtWeekly.TabIndex = 1;
+      this.rbtWeekly.Text = "Weekly";
+      this.rbtWeekly.UseVisualStyleBackColor = true;
+      this.rbtWeekly.CheckedChanged += new System.EventHandler(this.rbtDaily_CheckedChanged);
+      // 
+      // rbtDaily
+      // 
+      this.rbtDaily.AutoSize = true;
+      this.rbtDaily.Checked = true;
+      this.rbtDaily.Location = new System.Drawing.Point(11, 34);
+      this.rbtDaily.Name = "rbtDaily";
+      this.rbtDaily.Size = new System.Drawing.Size(48, 17);
+      this.rbtDaily.TabIndex = 0;
+      this.rbtDaily.TabStop = true;
+      this.rbtDaily.Text = "Daily";
+      this.rbtDaily.UseVisualStyleBackColor = true;
+      this.rbtDaily.CheckedChanged += new System.EventHandler(this.rbtDaily_CheckedChanged);
+      // 
+      // txtDays
+      // 
+      this.txtDays.Location = new System.Drawing.Point(50, 17);
+      this.txtDays.Name = "txtDays";
+      this.txtDays.Size = new System.Drawing.Size(30, 20);
+      this.txtDays.TabIndex = 24;
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(10, 20);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(34, 13);
+      this.label4.TabIndex = 23;
+      this.label4.Text = "Every";
+      // 
+      // gbDaily
+      // 
+      this.gbDaily.Controls.Add(this.label7);
+      this.gbDaily.Controls.Add(this.txtDays);
+      this.gbDaily.Controls.Add(this.label4);
+      this.gbDaily.Location = new System.Drawing.Point(123, 59);
+      this.gbDaily.Name = "gbDaily";
+      this.gbDaily.Size = new System.Drawing.Size(265, 94);
+      this.gbDaily.TabIndex = 41;
+      this.gbDaily.TabStop = false;
+      // 
+      // gbWeekly
+      // 
+      this.gbWeekly.Controls.Add(this.cbSunday);
+      this.gbWeekly.Controls.Add(this.cbSaturday);
+      this.gbWeekly.Controls.Add(this.cbFriday);
+      this.gbWeekly.Controls.Add(this.cbThursday);
+      this.gbWeekly.Controls.Add(this.cbWednesday);
+      this.gbWeekly.Controls.Add(this.cbTuesday);
+      this.gbWeekly.Controls.Add(this.cbMonday);
+      this.gbWeekly.Location = new System.Drawing.Point(123, 59);
+      this.gbWeekly.Name = "gbWeekly";
+      this.gbWeekly.Size = new System.Drawing.Size(265, 94);
+      this.gbWeekly.TabIndex = 42;
+      this.gbWeekly.TabStop = false;
+      this.gbWeekly.Visible = false;
+      // 
+      // cbSunday
+      // 
+      this.cbSunday.AutoSize = true;
+      this.cbSunday.Location = new System.Drawing.Point(11, 58);
+      this.cbSunday.Name = "cbSunday";
+      this.cbSunday.Size = new System.Drawing.Size(62, 17);
+      this.cbSunday.TabIndex = 6;
+      this.cbSunday.Text = "Sunday";
+      this.cbSunday.UseVisualStyleBackColor = true;
+      // 
+      // cbSaturday
+      // 
+      this.cbSaturday.AutoSize = true;
+      this.cbSaturday.Location = new System.Drawing.Point(173, 37);
+      this.cbSaturday.Name = "cbSaturday";
+      this.cbSaturday.Size = new System.Drawing.Size(68, 17);
+      this.cbSaturday.TabIndex = 5;
+      this.cbSaturday.Text = "Saturday";
+      this.cbSaturday.UseVisualStyleBackColor = true;
+      // 
+      // cbFriday
+      // 
+      this.cbFriday.AutoSize = true;
+      this.cbFriday.Location = new System.Drawing.Point(97, 37);
+      this.cbFriday.Name = "cbFriday";
+      this.cbFriday.Size = new System.Drawing.Size(54, 17);
+      this.cbFriday.TabIndex = 4;
+      this.cbFriday.Text = "Friday";
+      this.cbFriday.UseVisualStyleBackColor = true;
+      // 
+      // cbThursday
+      // 
+      this.cbThursday.AutoSize = true;
+      this.cbThursday.Location = new System.Drawing.Point(11, 37);
+      this.cbThursday.Name = "cbThursday";
+      this.cbThursday.Size = new System.Drawing.Size(70, 17);
+      this.cbThursday.TabIndex = 3;
+      this.cbThursday.Text = "Thursday";
+      this.cbThursday.UseVisualStyleBackColor = true;
+      // 
+      // cbWednesday
+      // 
+      this.cbWednesday.AutoSize = true;
+      this.cbWednesday.Location = new System.Drawing.Point(173, 16);
+      this.cbWednesday.Name = "cbWednesday";
+      this.cbWednesday.Size = new System.Drawing.Size(86, 17);
+      this.cbWednesday.TabIndex = 2;
+      this.cbWednesday.Text = "Wednesday ";
+      this.cbWednesday.UseVisualStyleBackColor = true;
+      // 
+      // cbTuesday
+      // 
+      this.cbTuesday.AutoSize = true;
+      this.cbTuesday.Location = new System.Drawing.Point(97, 16);
+      this.cbTuesday.Name = "cbTuesday";
+      this.cbTuesday.Size = new System.Drawing.Size(67, 17);
+      this.cbTuesday.TabIndex = 1;
+      this.cbTuesday.Text = "Tuesday";
+      this.cbTuesday.UseVisualStyleBackColor = true;
+      // 
+      // cbMonday
+      // 
+      this.cbMonday.AutoSize = true;
+      this.cbMonday.Location = new System.Drawing.Point(11, 16);
+      this.cbMonday.Name = "cbMonday";
+      this.cbMonday.Size = new System.Drawing.Size(64, 17);
+      this.cbMonday.TabIndex = 0;
+      this.cbMonday.Text = "Monday";
+      this.cbMonday.UseVisualStyleBackColor = true;
+      // 
+      // label7
+      // 
+      this.label7.AutoSize = true;
+      this.label7.Location = new System.Drawing.Point(86, 20);
+      this.label7.Name = "label7";
+      this.label7.Size = new System.Drawing.Size(37, 13);
+      this.label7.TabIndex = 25;
+      this.label7.Text = "Day(s)";
+      // 
+      // gbDuration
+      // 
+      this.gbDuration.Controls.Add(this.dtpEnd);
+      this.gbDuration.Controls.Add(this.dtpStart);
+      this.gbDuration.Controls.Add(this.label5);
+      this.gbDuration.Controls.Add(this.label6);
+      this.gbDuration.Location = new System.Drawing.Point(2, 160);
+      this.gbDuration.Name = "gbDuration";
+      this.gbDuration.Size = new System.Drawing.Size(386, 50);
+      this.gbDuration.TabIndex = 42;
+      this.gbDuration.TabStop = false;
+      this.gbDuration.Text = "Duration";
+      // 
+      // dtpEnd
+      // 
+      this.dtpEnd.Format = System.Windows.Forms.DateTimePickerFormat.Short;
+      this.dtpEnd.Location = new System.Drawing.Point(250, 18);
+      this.dtpEnd.Name = "dtpEnd";
+      this.dtpEnd.Size = new System.Drawing.Size(91, 20);
+      this.dtpEnd.TabIndex = 29;
+      // 
+      // dtpStart
+      // 
+      this.dtpStart.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
+      this.dtpStart.Location = new System.Drawing.Point(69, 18);
+      this.dtpStart.Name = "dtpStart";
+      this.dtpStart.Size = new System.Drawing.Size(89, 20);
+      this.dtpStart.TabIndex = 28;
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(189, 22);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(55, 13);
+      this.label5.TabIndex = 27;
+      this.label5.Text = "End Date:";
+      // 
+      // label6
+      // 
+      this.label6.AutoSize = true;
+      this.label6.Location = new System.Drawing.Point(14, 22);
+      this.label6.Name = "label6";
+      this.label6.Size = new System.Drawing.Size(58, 13);
+      this.label6.TabIndex = 25;
+      this.label6.Text = "Start Date:";
+      // 
+      // cmbEndTime
+      // 
+      this.cmbEndTime.FormattingEnabled = true;
+      this.cmbEndTime.Location = new System.Drawing.Point(155, 18);
+      this.cmbEndTime.Name = "cmbEndTime";
+      this.cmbEndTime.Size = new System.Drawing.Size(77, 21);
+      this.cmbEndTime.TabIndex = 39;
+      // 
+      // cmbBeginTime
+      // 
+      this.cmbBeginTime.FormattingEnabled = true;
+      this.cmbBeginTime.Location = new System.Drawing.Point(46, 18);
+      this.cmbBeginTime.Name = "cmbBeginTime";
+      this.cmbBeginTime.Size = new System.Drawing.Size(77, 21);
+      this.cmbBeginTime.TabIndex = 38;
+      // 
+      // Recurrence
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(390, 214);
+      this.Controls.Add(this.gbWeekly);
+      this.Controls.Add(this.gbDuration);
+      this.Controls.Add(this.gbDaily);
+      this.Controls.Add(this.gbRecurrence);
+      this.Controls.Add(this.gbAppointment);
+      this.Name = "Recurrence";
+      this.Text = "Recurrence";
+      this.gbAppointment.ResumeLayout(false);
+      this.gbAppointment.PerformLayout();
+      this.gbRecurrence.ResumeLayout(false);
+      this.gbRecurrence.PerformLayout();
+      this.gbDaily.ResumeLayout(false);
+      this.gbDaily.PerformLayout();
+      this.gbWeekly.ResumeLayout(false);
+      this.gbWeekly.PerformLayout();
+      this.gbDuration.ResumeLayout(false);
+      this.gbDuration.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label cmbEnd;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.GroupBox gbAppointment;
+    private System.Windows.Forms.ComboBox cmbDuration;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.GroupBox gbRecurrence;
+    private System.Windows.Forms.RadioButton rbtWeekly;
+    private System.Windows.Forms.RadioButton rbtDaily;
+    private System.Windows.Forms.TextBox txtDays;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.GroupBox gbDaily;
+    private System.Windows.Forms.GroupBox gbDuration;
+    private System.Windows.Forms.DateTimePicker dtpEnd;
+    private System.Windows.Forms.DateTimePicker dtpStart;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.Label label6;
+    private System.Windows.Forms.Label label7;
+    private System.Windows.Forms.GroupBox gbWeekly;
+    private System.Windows.Forms.CheckBox cbSunday;
+    private System.Windows.Forms.CheckBox cbSaturday;
+    private System.Windows.Forms.CheckBox cbFriday;
+    private System.Windows.Forms.CheckBox cbThursday;
+    private System.Windows.Forms.CheckBox cbWednesday;
+    private System.Windows.Forms.CheckBox cbTuesday;
+    private System.Windows.Forms.CheckBox cbMonday;
+    private System.Windows.Forms.ComboBox cmbEndTime;
+    private System.Windows.Forms.ComboBox cmbBeginTime;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.cs	(revision 1270)
@@ -0,0 +1,26 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Client.Console {
+  public partial class Recurrence : Form {
+    public Recurrence() {
+      InitializeComponent();
+    }
+
+    private void rbtDaily_CheckedChanged(object sender, EventArgs e) {
+      if (rbtDaily.Checked) {
+        gbDaily.Visible = true;
+        gbWeekly.Visible = false;
+      } else if (rbtWeekly.Checked) {
+        gbDaily.Visible = false;
+        gbWeekly.Visible = true;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Recurrence.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ServerProxy.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ServerProxy.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ServerProxy.cs	(revision 1270)
@@ -0,0 +1,551 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Client.Console {
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "StatusCommons", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+      "leService")]
+  public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private System.Guid ClientGuidk__BackingFieldField;
+
+    private System.DateTime ConnectedSincek__BackingFieldField;
+
+    private int JobsAbortedk__BackingFieldField;
+
+    private int JobsDonek__BackingFieldField;
+
+    private int JobsFetchedk__BackingFieldField;
+
+    private HeuristicLab.Hive.Client.Core.ClientConsoleService.JobStatus[] Jobsk__BackingFieldField;
+
+    private HeuristicLab.Hive.Client.Common.NetworkEnumWcfConnState Statusk__BackingFieldField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<ClientGuid>k__BackingField", IsRequired = true)]
+    public System.Guid ClientGuidk__BackingField {
+      get {
+        return this.ClientGuidk__BackingFieldField;
+      }
+      set {
+        this.ClientGuidk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<ConnectedSince>k__BackingField", IsRequired = true)]
+    public System.DateTime ConnectedSincek__BackingField {
+      get {
+        return this.ConnectedSincek__BackingFieldField;
+      }
+      set {
+        this.ConnectedSincek__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsAborted>k__BackingField", IsRequired = true)]
+    public int JobsAbortedk__BackingField {
+      get {
+        return this.JobsAbortedk__BackingFieldField;
+      }
+      set {
+        this.JobsAbortedk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsDone>k__BackingField", IsRequired = true)]
+    public int JobsDonek__BackingField {
+      get {
+        return this.JobsDonek__BackingFieldField;
+      }
+      set {
+        this.JobsDonek__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobsFetched>k__BackingField", IsRequired = true)]
+    public int JobsFetchedk__BackingField {
+      get {
+        return this.JobsFetchedk__BackingFieldField;
+      }
+      set {
+        this.JobsFetchedk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Jobs>k__BackingField", IsRequired = true)]
+    public HeuristicLab.Hive.Client.Core.ClientConsoleService.JobStatus[] Jobsk__BackingField {
+      get {
+        return this.Jobsk__BackingFieldField;
+      }
+      set {
+        this.Jobsk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Status>k__BackingField", IsRequired = true)]
+    public HeuristicLab.Hive.Client.Common.NetworkEnumWcfConnState Statusk__BackingField {
+      get {
+        return this.Statusk__BackingFieldField;
+      }
+      set {
+        this.Statusk__BackingFieldField = value;
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "JobStatus", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+      "leService")]
+  public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private long JobIdk__BackingFieldField;
+
+    private double Progressk__BackingFieldField;
+
+    private System.DateTime Sincek__BackingFieldField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<JobId>k__BackingField", IsRequired = true)]
+    public long JobIdk__BackingField {
+      get {
+        return this.JobIdk__BackingFieldField;
+      }
+      set {
+        this.JobIdk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Progress>k__BackingField", IsRequired = true)]
+    public double Progressk__BackingField {
+      get {
+        return this.Progressk__BackingFieldField;
+      }
+      set {
+        this.Progressk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Since>k__BackingField", IsRequired = true)]
+    public System.DateTime Sincek__BackingField {
+      get {
+        return this.Sincek__BackingFieldField;
+      }
+      set {
+        this.Sincek__BackingFieldField = value;
+      }
+    }
+  }
+
+  [System.Diagnostics.DebuggerStepThroughAttribute()]
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "ConnectionContainer", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+      "leService")]
+  public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject {
+
+    private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+
+    private string IPAdressk__BackingFieldField;
+
+    private int Portk__BackingFieldField;
+
+    public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+      get {
+        return this.extensionDataField;
+      }
+      set {
+        this.extensionDataField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<IPAdress>k__BackingField", IsRequired = true)]
+    public string IPAdressk__BackingField {
+      get {
+        return this.IPAdressk__BackingFieldField;
+      }
+      set {
+        this.IPAdressk__BackingFieldField = value;
+      }
+    }
+
+    [System.Runtime.Serialization.DataMemberAttribute(Name = "<Port>k__BackingField", IsRequired = true)]
+    public int Portk__BackingField {
+      get {
+        return this.Portk__BackingFieldField;
+      }
+      set {
+        this.Portk__BackingFieldField = value;
+      }
+    }
+  }
+}
+namespace HeuristicLab.Hive.Client.Common {
+  using System.Runtime.Serialization;
+
+
+  [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+  [System.Runtime.Serialization.DataContractAttribute(Name = "NetworkEnum.WcfConnState", Namespace = "http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common")]
+  public enum NetworkEnumWcfConnState : int {
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Connected = 0,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Disconnected = 1,
+
+    [System.Runtime.Serialization.EnumMemberAttribute()]
+    Failed = 2,
+  }
+}
+
+
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IClientConsoleCommunicator")]
+public interface IClientConsoleCommunicator {
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons GetStatusInfos();
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+  System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState);
+
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result);
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer GetConnection();
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
+  System.IAsyncResult BeginGetConnection(System.AsyncCallback callback, object asyncState);
+
+  HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer EndGetConnection(System.IAsyncResult result);
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+  void SetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container);
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+  System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState);
+
+  void EndSetConnection(System.IAsyncResult result);
+
+  [System.ServiceModel.OperationContractAttribute(Action = "http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
+  void Disconnect();
+
+  [System.ServiceModel.OperationContractAttribute(AsyncPattern = true, Action = "http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction = "http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
+  System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState);
+
+  void EndDisconnect(System.IAsyncResult result);
+}
+
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public interface IClientConsoleCommunicatorChannel : IClientConsoleCommunicator, System.ServiceModel.IClientChannel {
+}
+
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public partial class GetStatusInfosCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+  private object[] results;
+
+  public GetStatusInfosCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+    base(exception, cancelled, userState) {
+    this.results = results;
+  }
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons Result {
+    get {
+      base.RaiseExceptionIfNecessary();
+      return ((HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons)(this.results[0]));
+    }
+  }
+}
+
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public partial class GetConnectionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+
+  private object[] results;
+
+  public GetConnectionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+    base(exception, cancelled, userState) {
+    this.results = results;
+  }
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer Result {
+    get {
+      base.RaiseExceptionIfNecessary();
+      return ((HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer)(this.results[0]));
+    }
+  }
+}
+
+[System.Diagnostics.DebuggerStepThroughAttribute()]
+[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+public partial class ClientConsoleCommunicatorClient : System.ServiceModel.ClientBase<IClientConsoleCommunicator>, IClientConsoleCommunicator {
+
+  private BeginOperationDelegate onBeginGetStatusInfosDelegate;
+
+  private EndOperationDelegate onEndGetStatusInfosDelegate;
+
+  private System.Threading.SendOrPostCallback onGetStatusInfosCompletedDelegate;
+
+  private BeginOperationDelegate onBeginGetConnectionDelegate;
+
+  private EndOperationDelegate onEndGetConnectionDelegate;
+
+  private System.Threading.SendOrPostCallback onGetConnectionCompletedDelegate;
+
+  private BeginOperationDelegate onBeginSetConnectionDelegate;
+
+  private EndOperationDelegate onEndSetConnectionDelegate;
+
+  private System.Threading.SendOrPostCallback onSetConnectionCompletedDelegate;
+
+  private BeginOperationDelegate onBeginDisconnectDelegate;
+
+  private EndOperationDelegate onEndDisconnectDelegate;
+
+  private System.Threading.SendOrPostCallback onDisconnectCompletedDelegate;
+
+  public ClientConsoleCommunicatorClient() {
+  }
+
+  public ClientConsoleCommunicatorClient(string endpointConfigurationName) :
+    base(endpointConfigurationName) {
+  }
+
+  public ClientConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) :
+    base(endpointConfigurationName, remoteAddress) {
+  }
+
+  public ClientConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+    base(endpointConfigurationName, remoteAddress) {
+  }
+
+  public ClientConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+    base(binding, remoteAddress) {
+  }
+
+  public event System.EventHandler<GetStatusInfosCompletedEventArgs> GetStatusInfosCompleted;
+
+  public event System.EventHandler<GetConnectionCompletedEventArgs> GetConnectionCompleted;
+
+  public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> SetConnectionCompleted;
+
+  public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> DisconnectCompleted;
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons GetStatusInfos() {
+    return base.Channel.GetStatusInfos();
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginGetStatusInfos(callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons EndGetStatusInfos(System.IAsyncResult result) {
+    return base.Channel.EndGetStatusInfos(result);
+  }
+
+  private System.IAsyncResult OnBeginGetStatusInfos(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    return this.BeginGetStatusInfos(callback, asyncState);
+  }
+
+  private object[] OnEndGetStatusInfos(System.IAsyncResult result) {
+    HeuristicLab.Hive.Client.Core.ClientConsoleService.StatusCommons retVal = this.EndGetStatusInfos(result);
+    return new object[] {
+                retVal};
+  }
+
+  private void OnGetStatusInfosCompleted(object state) {
+    if ((this.GetStatusInfosCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.GetStatusInfosCompleted(this, new GetStatusInfosCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void GetStatusInfosAsync() {
+    this.GetStatusInfosAsync(null);
+  }
+
+  public void GetStatusInfosAsync(object userState) {
+    if ((this.onBeginGetStatusInfosDelegate == null)) {
+      this.onBeginGetStatusInfosDelegate = new BeginOperationDelegate(this.OnBeginGetStatusInfos);
+    }
+    if ((this.onEndGetStatusInfosDelegate == null)) {
+      this.onEndGetStatusInfosDelegate = new EndOperationDelegate(this.OnEndGetStatusInfos);
+    }
+    if ((this.onGetStatusInfosCompletedDelegate == null)) {
+      this.onGetStatusInfosCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStatusInfosCompleted);
+    }
+    base.InvokeAsync(this.onBeginGetStatusInfosDelegate, null, this.onEndGetStatusInfosDelegate, this.onGetStatusInfosCompletedDelegate, userState);
+  }
+
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer GetConnection() {
+    return base.Channel.GetConnection();
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginGetConnection(System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginGetConnection(callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer EndGetConnection(System.IAsyncResult result) {
+    return base.Channel.EndGetConnection(result);
+  }
+
+  private System.IAsyncResult OnBeginGetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    return this.BeginGetConnection(callback, asyncState);
+  }
+
+  private object[] OnEndGetConnection(System.IAsyncResult result) {
+    HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer retVal = this.EndGetConnection(result);
+    return new object[] {
+                retVal};
+  }
+
+  private void OnGetConnectionCompleted(object state) {
+    if ((this.GetConnectionCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.GetConnectionCompleted(this, new GetConnectionCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void GetConnectionAsync() {
+    this.GetConnectionAsync(null);
+  }
+
+  public void GetConnectionAsync(object userState) {
+    if ((this.onBeginGetConnectionDelegate == null)) {
+      this.onBeginGetConnectionDelegate = new BeginOperationDelegate(this.OnBeginGetConnection);
+    }
+    if ((this.onEndGetConnectionDelegate == null)) {
+      this.onEndGetConnectionDelegate = new EndOperationDelegate(this.OnEndGetConnection);
+    }
+    if ((this.onGetConnectionCompletedDelegate == null)) {
+      this.onGetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetConnectionCompleted);
+    }
+    base.InvokeAsync(this.onBeginGetConnectionDelegate, null, this.onEndGetConnectionDelegate, this.onGetConnectionCompletedDelegate, userState);
+  }
+
+  public void SetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container) {
+    base.Channel.SetConnection(container);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginSetConnection(container, callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public void EndSetConnection(System.IAsyncResult result) {
+    base.Channel.EndSetConnection(result);
+  }
+
+  private System.IAsyncResult OnBeginSetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container = ((HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer)(inValues[0]));
+    return this.BeginSetConnection(container, callback, asyncState);
+  }
+
+  private object[] OnEndSetConnection(System.IAsyncResult result) {
+    this.EndSetConnection(result);
+    return null;
+  }
+
+  private void OnSetConnectionCompleted(object state) {
+    if ((this.SetConnectionCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.SetConnectionCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void SetConnectionAsync(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container) {
+    this.SetConnectionAsync(container, null);
+  }
+
+  public void SetConnectionAsync(HeuristicLab.Hive.Client.Core.ClientConsoleService.ConnectionContainer container, object userState) {
+    if ((this.onBeginSetConnectionDelegate == null)) {
+      this.onBeginSetConnectionDelegate = new BeginOperationDelegate(this.OnBeginSetConnection);
+    }
+    if ((this.onEndSetConnectionDelegate == null)) {
+      this.onEndSetConnectionDelegate = new EndOperationDelegate(this.OnEndSetConnection);
+    }
+    if ((this.onSetConnectionCompletedDelegate == null)) {
+      this.onSetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetConnectionCompleted);
+    }
+    base.InvokeAsync(this.onBeginSetConnectionDelegate, new object[] {
+                    container}, this.onEndSetConnectionDelegate, this.onSetConnectionCompletedDelegate, userState);
+  }
+
+  public void Disconnect() {
+    base.Channel.Disconnect();
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState) {
+    return base.Channel.BeginDisconnect(callback, asyncState);
+  }
+
+  [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+  public void EndDisconnect(System.IAsyncResult result) {
+    base.Channel.EndDisconnect(result);
+  }
+
+  private System.IAsyncResult OnBeginDisconnect(object[] inValues, System.AsyncCallback callback, object asyncState) {
+    return this.BeginDisconnect(callback, asyncState);
+  }
+
+  private object[] OnEndDisconnect(System.IAsyncResult result) {
+    this.EndDisconnect(result);
+    return null;
+  }
+
+  private void OnDisconnectCompleted(object state) {
+    if ((this.DisconnectCompleted != null)) {
+      InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+      this.DisconnectCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+    }
+  }
+
+  public void DisconnectAsync() {
+    this.DisconnectAsync(null);
+  }
+
+  public void DisconnectAsync(object userState) {
+    if ((this.onBeginDisconnectDelegate == null)) {
+      this.onBeginDisconnectDelegate = new BeginOperationDelegate(this.OnBeginDisconnect);
+    }
+    if ((this.onEndDisconnectDelegate == null)) {
+      this.onEndDisconnectDelegate = new EndOperationDelegate(this.OnEndDisconnect);
+    }
+    if ((this.onDisconnectCompletedDelegate == null)) {
+      this.onDisconnectCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDisconnectCompleted);
+    }
+    base.InvokeAsync(this.onBeginDisconnectDelegate, null, this.onEndDisconnectDelegate, this.onDisconnectCompletedDelegate, userState);
+  }
+
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Common.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Common.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Common.xsd	(revision 1270)
@@ -0,0 +1,12 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:simpleType name="NetworkEnum.WcfConnState">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Connected" />
+      <xs:enumeration value="Disconnected" />
+      <xs:enumeration value="Failed" />
+      <xs:enumeration value="Loggedin" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="NetworkEnum.WcfConnState" nillable="true" type="tns:NetworkEnum.WcfConnState" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ConnectionContainer" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer, Service References.ClientService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Console.ClientService.StatusCommons.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Console.ClientService.StatusCommons.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Console.ClientService.StatusCommons.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="StatusCommons" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Client.Console.ClientService.StatusCommons, Service References.ClientService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd	(revision 1270)
@@ -0,0 +1,38 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common" />
+  <xs:complexType name="StatusCommons">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="ClientGuid" type="ser:guid" />
+      <xs:element minOccurs="0" name="ConnectedSince" type="xs:dateTime" />
+      <xs:element minOccurs="0" name="Jobs" nillable="true" type="tns:ArrayOfJobStatus" />
+      <xs:element minOccurs="0" name="JobsAborted" type="xs:int" />
+      <xs:element minOccurs="0" name="JobsDone" type="xs:int" />
+      <xs:element minOccurs="0" name="JobsFetched" type="xs:int" />
+      <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common" minOccurs="0" name="Status" type="q1:NetworkEnum.WcfConnState" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="StatusCommons" nillable="true" type="tns:StatusCommons" />
+  <xs:complexType name="ArrayOfJobStatus">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="JobStatus" nillable="true" type="tns:JobStatus" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfJobStatus" nillable="true" type="tns:ArrayOfJobStatus" />
+  <xs:complexType name="JobStatus">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="JobId" type="xs:long" />
+      <xs:element minOccurs="0" name="Progress" type="xs:double" />
+      <xs:element minOccurs="0" name="Since" type="xs:dateTime" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="JobStatus" nillable="true" type="tns:JobStatus" />
+  <xs:complexType name="ConnectionContainer">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="IPAdress" nillable="true" type="xs:string" />
+      <xs:element minOccurs="0" name="Port" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ConnectionContainer" nillable="true" type="tns:ConnectionContainer" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/Reference.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/Reference.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/Reference.cs	(revision 1270)
@@ -0,0 +1,704 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3082
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Console.ClientService {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StatusCommons", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.Guid ClientGuidField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime ConnectedSinceField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Hive.Client.Console.ClientService.JobStatus[] JobsField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int JobsAbortedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int JobsDoneField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int JobsFetchedField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private HeuristicLab.Hive.Client.Console.ClientService.NetworkEnumWcfConnState StatusField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.Guid ClientGuid {
+            get {
+                return this.ClientGuidField;
+            }
+            set {
+                if ((this.ClientGuidField.Equals(value) != true)) {
+                    this.ClientGuidField = value;
+                    this.RaisePropertyChanged("ClientGuid");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime ConnectedSince {
+            get {
+                return this.ConnectedSinceField;
+            }
+            set {
+                if ((this.ConnectedSinceField.Equals(value) != true)) {
+                    this.ConnectedSinceField = value;
+                    this.RaisePropertyChanged("ConnectedSince");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Hive.Client.Console.ClientService.JobStatus[] Jobs {
+            get {
+                return this.JobsField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.JobsField, value) != true)) {
+                    this.JobsField = value;
+                    this.RaisePropertyChanged("Jobs");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int JobsAborted {
+            get {
+                return this.JobsAbortedField;
+            }
+            set {
+                if ((this.JobsAbortedField.Equals(value) != true)) {
+                    this.JobsAbortedField = value;
+                    this.RaisePropertyChanged("JobsAborted");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int JobsDone {
+            get {
+                return this.JobsDoneField;
+            }
+            set {
+                if ((this.JobsDoneField.Equals(value) != true)) {
+                    this.JobsDoneField = value;
+                    this.RaisePropertyChanged("JobsDone");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int JobsFetched {
+            get {
+                return this.JobsFetchedField;
+            }
+            set {
+                if ((this.JobsFetchedField.Equals(value) != true)) {
+                    this.JobsFetchedField = value;
+                    this.RaisePropertyChanged("JobsFetched");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public HeuristicLab.Hive.Client.Console.ClientService.NetworkEnumWcfConnState Status {
+            get {
+                return this.StatusField;
+            }
+            set {
+                if ((this.StatusField.Equals(value) != true)) {
+                    this.StatusField = value;
+                    this.RaisePropertyChanged("Status");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="JobStatus", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private long JobIdField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private double ProgressField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private System.DateTime SinceField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public long JobId {
+            get {
+                return this.JobIdField;
+            }
+            set {
+                if ((this.JobIdField.Equals(value) != true)) {
+                    this.JobIdField = value;
+                    this.RaisePropertyChanged("JobId");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public double Progress {
+            get {
+                return this.ProgressField;
+            }
+            set {
+                if ((this.ProgressField.Equals(value) != true)) {
+                    this.ProgressField = value;
+                    this.RaisePropertyChanged("Progress");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public System.DateTime Since {
+            get {
+                return this.SinceField;
+            }
+            set {
+                if ((this.SinceField.Equals(value) != true)) {
+                    this.SinceField = value;
+                    this.RaisePropertyChanged("Since");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="NetworkEnum.WcfConnState", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common")]
+    public enum NetworkEnumWcfConnState : int {
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Connected = 0,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Disconnected = 1,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Failed = 2,
+        
+        [System.Runtime.Serialization.EnumMemberAttribute()]
+        Loggedin = 3,
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ConnectionContainer", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private string IPAdressField;
+        
+        [System.Runtime.Serialization.OptionalFieldAttribute()]
+        private int PortField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public string IPAdress {
+            get {
+                return this.IPAdressField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IPAdressField, value) != true)) {
+                    this.IPAdressField = value;
+                    this.RaisePropertyChanged("IPAdress");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute()]
+        public int Port {
+            get {
+                return this.PortField;
+            }
+            set {
+                if ((this.PortField.Equals(value) != true)) {
+                    this.PortField = value;
+                    this.RaisePropertyChanged("Port");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ClientService.IClientConsoleCommunicator")]
+    public interface IClientConsoleCommunicator {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+        HeuristicLab.Hive.Client.Console.ClientService.StatusCommons GetStatusInfos();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+        System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Client.Console.ClientService.StatusCommons EndGetStatusInfos(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+        void SetConnection(HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container);
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+        System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container, System.AsyncCallback callback, object asyncState);
+        
+        void EndSetConnection(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
+        void Disconnect();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientConsoleCommunicator/Disconnect", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse")]
+        System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState);
+        
+        void EndDisconnect(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnectionResponse")]
+        HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer GetCurrentConnection();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnectionResponse")]
+        System.IAsyncResult BeginGetCurrentConnection(System.AsyncCallback callback, object asyncState);
+        
+        HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer EndGetCurrentConnection(System.IAsyncResult result);
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/ShutdownClient", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/ShutdownClientResponse")]
+        void ShutdownClient();
+        
+        [System.ServiceModel.OperationContractAttribute(AsyncPattern=true, Action="http://tempuri.org/IClientConsoleCommunicator/ShutdownClient", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/ShutdownClientResponse")]
+        System.IAsyncResult BeginShutdownClient(System.AsyncCallback callback, object asyncState);
+        
+        void EndShutdownClient(System.IAsyncResult result);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public interface IClientConsoleCommunicatorChannel : HeuristicLab.Hive.Client.Console.ClientService.IClientConsoleCommunicator, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class GetStatusInfosCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetStatusInfosCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientService.StatusCommons Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Client.Console.ClientService.StatusCommons)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class GetCurrentConnectionCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
+        
+        private object[] results;
+        
+        public GetCurrentConnectionCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : 
+                base(exception, cancelled, userState) {
+            this.results = results;
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer Result {
+            get {
+                base.RaiseExceptionIfNecessary();
+                return ((HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer)(this.results[0]));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class ClientConsoleCommunicatorClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Client.Console.ClientService.IClientConsoleCommunicator>, HeuristicLab.Hive.Client.Console.ClientService.IClientConsoleCommunicator {
+        
+        private BeginOperationDelegate onBeginGetStatusInfosDelegate;
+        
+        private EndOperationDelegate onEndGetStatusInfosDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetStatusInfosCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginSetConnectionDelegate;
+        
+        private EndOperationDelegate onEndSetConnectionDelegate;
+        
+        private System.Threading.SendOrPostCallback onSetConnectionCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginDisconnectDelegate;
+        
+        private EndOperationDelegate onEndDisconnectDelegate;
+        
+        private System.Threading.SendOrPostCallback onDisconnectCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginGetCurrentConnectionDelegate;
+        
+        private EndOperationDelegate onEndGetCurrentConnectionDelegate;
+        
+        private System.Threading.SendOrPostCallback onGetCurrentConnectionCompletedDelegate;
+        
+        private BeginOperationDelegate onBeginShutdownClientDelegate;
+        
+        private EndOperationDelegate onEndShutdownClientDelegate;
+        
+        private System.Threading.SendOrPostCallback onShutdownClientCompletedDelegate;
+        
+        public ClientConsoleCommunicatorClient() {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public event System.EventHandler<GetStatusInfosCompletedEventArgs> GetStatusInfosCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> SetConnectionCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> DisconnectCompleted;
+        
+        public event System.EventHandler<GetCurrentConnectionCompletedEventArgs> GetCurrentConnectionCompleted;
+        
+        public event System.EventHandler<System.ComponentModel.AsyncCompletedEventArgs> ShutdownClientCompleted;
+        
+        public HeuristicLab.Hive.Client.Console.ClientService.StatusCommons GetStatusInfos() {
+            return base.Channel.GetStatusInfos();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetStatusInfos(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetStatusInfos(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Client.Console.ClientService.StatusCommons EndGetStatusInfos(System.IAsyncResult result) {
+            return base.Channel.EndGetStatusInfos(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetStatusInfos(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginGetStatusInfos(callback, asyncState);
+        }
+        
+        private object[] OnEndGetStatusInfos(System.IAsyncResult result) {
+            HeuristicLab.Hive.Client.Console.ClientService.StatusCommons retVal = this.EndGetStatusInfos(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetStatusInfosCompleted(object state) {
+            if ((this.GetStatusInfosCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetStatusInfosCompleted(this, new GetStatusInfosCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetStatusInfosAsync() {
+            this.GetStatusInfosAsync(null);
+        }
+        
+        public void GetStatusInfosAsync(object userState) {
+            if ((this.onBeginGetStatusInfosDelegate == null)) {
+                this.onBeginGetStatusInfosDelegate = new BeginOperationDelegate(this.OnBeginGetStatusInfos);
+            }
+            if ((this.onEndGetStatusInfosDelegate == null)) {
+                this.onEndGetStatusInfosDelegate = new EndOperationDelegate(this.OnEndGetStatusInfos);
+            }
+            if ((this.onGetStatusInfosCompletedDelegate == null)) {
+                this.onGetStatusInfosCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetStatusInfosCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetStatusInfosDelegate, null, this.onEndGetStatusInfosDelegate, this.onGetStatusInfosCompletedDelegate, userState);
+        }
+        
+        public void SetConnection(HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container) {
+            base.Channel.SetConnection(container);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginSetConnection(HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container, System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginSetConnection(container, callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndSetConnection(System.IAsyncResult result) {
+            base.Channel.EndSetConnection(result);
+        }
+        
+        private System.IAsyncResult OnBeginSetConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container = ((HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer)(inValues[0]));
+            return this.BeginSetConnection(container, callback, asyncState);
+        }
+        
+        private object[] OnEndSetConnection(System.IAsyncResult result) {
+            this.EndSetConnection(result);
+            return null;
+        }
+        
+        private void OnSetConnectionCompleted(object state) {
+            if ((this.SetConnectionCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.SetConnectionCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void SetConnectionAsync(HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container) {
+            this.SetConnectionAsync(container, null);
+        }
+        
+        public void SetConnectionAsync(HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer container, object userState) {
+            if ((this.onBeginSetConnectionDelegate == null)) {
+                this.onBeginSetConnectionDelegate = new BeginOperationDelegate(this.OnBeginSetConnection);
+            }
+            if ((this.onEndSetConnectionDelegate == null)) {
+                this.onEndSetConnectionDelegate = new EndOperationDelegate(this.OnEndSetConnection);
+            }
+            if ((this.onSetConnectionCompletedDelegate == null)) {
+                this.onSetConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnSetConnectionCompleted);
+            }
+            base.InvokeAsync(this.onBeginSetConnectionDelegate, new object[] {
+                        container}, this.onEndSetConnectionDelegate, this.onSetConnectionCompletedDelegate, userState);
+        }
+        
+        public void Disconnect() {
+            base.Channel.Disconnect();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginDisconnect(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginDisconnect(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndDisconnect(System.IAsyncResult result) {
+            base.Channel.EndDisconnect(result);
+        }
+        
+        private System.IAsyncResult OnBeginDisconnect(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginDisconnect(callback, asyncState);
+        }
+        
+        private object[] OnEndDisconnect(System.IAsyncResult result) {
+            this.EndDisconnect(result);
+            return null;
+        }
+        
+        private void OnDisconnectCompleted(object state) {
+            if ((this.DisconnectCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.DisconnectCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void DisconnectAsync() {
+            this.DisconnectAsync(null);
+        }
+        
+        public void DisconnectAsync(object userState) {
+            if ((this.onBeginDisconnectDelegate == null)) {
+                this.onBeginDisconnectDelegate = new BeginOperationDelegate(this.OnBeginDisconnect);
+            }
+            if ((this.onEndDisconnectDelegate == null)) {
+                this.onEndDisconnectDelegate = new EndOperationDelegate(this.OnEndDisconnect);
+            }
+            if ((this.onDisconnectCompletedDelegate == null)) {
+                this.onDisconnectCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnDisconnectCompleted);
+            }
+            base.InvokeAsync(this.onBeginDisconnectDelegate, null, this.onEndDisconnectDelegate, this.onDisconnectCompletedDelegate, userState);
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer GetCurrentConnection() {
+            return base.Channel.GetCurrentConnection();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginGetCurrentConnection(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginGetCurrentConnection(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer EndGetCurrentConnection(System.IAsyncResult result) {
+            return base.Channel.EndGetCurrentConnection(result);
+        }
+        
+        private System.IAsyncResult OnBeginGetCurrentConnection(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginGetCurrentConnection(callback, asyncState);
+        }
+        
+        private object[] OnEndGetCurrentConnection(System.IAsyncResult result) {
+            HeuristicLab.Hive.Client.Console.ClientService.ConnectionContainer retVal = this.EndGetCurrentConnection(result);
+            return new object[] {
+                    retVal};
+        }
+        
+        private void OnGetCurrentConnectionCompleted(object state) {
+            if ((this.GetCurrentConnectionCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.GetCurrentConnectionCompleted(this, new GetCurrentConnectionCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void GetCurrentConnectionAsync() {
+            this.GetCurrentConnectionAsync(null);
+        }
+        
+        public void GetCurrentConnectionAsync(object userState) {
+            if ((this.onBeginGetCurrentConnectionDelegate == null)) {
+                this.onBeginGetCurrentConnectionDelegate = new BeginOperationDelegate(this.OnBeginGetCurrentConnection);
+            }
+            if ((this.onEndGetCurrentConnectionDelegate == null)) {
+                this.onEndGetCurrentConnectionDelegate = new EndOperationDelegate(this.OnEndGetCurrentConnection);
+            }
+            if ((this.onGetCurrentConnectionCompletedDelegate == null)) {
+                this.onGetCurrentConnectionCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnGetCurrentConnectionCompleted);
+            }
+            base.InvokeAsync(this.onBeginGetCurrentConnectionDelegate, null, this.onEndGetCurrentConnectionDelegate, this.onGetCurrentConnectionCompletedDelegate, userState);
+        }
+        
+        public void ShutdownClient() {
+            base.Channel.ShutdownClient();
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public System.IAsyncResult BeginShutdownClient(System.AsyncCallback callback, object asyncState) {
+            return base.Channel.BeginShutdownClient(callback, asyncState);
+        }
+        
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+        public void EndShutdownClient(System.IAsyncResult result) {
+            base.Channel.EndShutdownClient(result);
+        }
+        
+        private System.IAsyncResult OnBeginShutdownClient(object[] inValues, System.AsyncCallback callback, object asyncState) {
+            return this.BeginShutdownClient(callback, asyncState);
+        }
+        
+        private object[] OnEndShutdownClient(System.IAsyncResult result) {
+            this.EndShutdownClient(result);
+            return null;
+        }
+        
+        private void OnShutdownClientCompleted(object state) {
+            if ((this.ShutdownClientCompleted != null)) {
+                InvokeAsyncCompletedEventArgs e = ((InvokeAsyncCompletedEventArgs)(state));
+                this.ShutdownClientCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(e.Error, e.Cancelled, e.UserState));
+            }
+        }
+        
+        public void ShutdownClientAsync() {
+            this.ShutdownClientAsync(null);
+        }
+        
+        public void ShutdownClientAsync(object userState) {
+            if ((this.onBeginShutdownClientDelegate == null)) {
+                this.onBeginShutdownClientDelegate = new BeginOperationDelegate(this.OnBeginShutdownClient);
+            }
+            if ((this.onEndShutdownClientDelegate == null)) {
+                this.onEndShutdownClientDelegate = new EndOperationDelegate(this.OnEndShutdownClient);
+            }
+            if ((this.onShutdownClientCompletedDelegate == null)) {
+                this.onShutdownClientCompletedDelegate = new System.Threading.SendOrPostCallback(this.OnShutdownClientCompleted);
+            }
+            base.InvokeAsync(this.onBeginShutdownClientDelegate, null, this.onEndShutdownClientDelegate, this.onShutdownClientCompletedDelegate, userState);
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/Reference.svcmap
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/Reference.svcmap	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/Reference.svcmap	(revision 1270)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="94ae11a7-d639-4d8a-b9e6-a027596236fd" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>true</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="net.tcp://127.0.0.1:8000/ClientConsole/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="87cfc3a8-46c3-4a46-bccf-6e5c33780b95" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="5ac15a29-55d2-4845-abcf-d435bbebd28b" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="20c63a8d-de03-429b-88b0-36988795ef19" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd" MetadataType="Schema" ID="36748734-59b6-4ba4-950d-66ca1a4fc8bb" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Client.Common.xsd" MetadataType="Schema" ID="0c1369fa-d4cc-4149-b202-00da9dd35972" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/configuration.svcinfo
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/configuration.svcinfo	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/configuration.svcinfo	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Transport&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IClientConsoleCommunicator" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientConsoleCommunicator&quot; contract=&quot;ClientService.IClientConsoleCommunicator&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08004@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientConsoleCommunicator&quot; contract=&quot;ClientService.IClientConsoleCommunicator&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08004@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="ClientService.IClientConsoleCommunicator" name="NetTcpBinding_IClientConsoleCommunicator" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/configuration91.svcinfo
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/configuration91.svcinfo	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/configuration91.svcinfo	(revision 1270)
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="LJHqHAg9UO+arib7mQMPUcNSFqQ=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IClientConsoleCommunicator">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.OleTransactionsProtocol</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Transport</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IClientConsoleCommunicator" contract="ClientService.IClientConsoleCommunicator" bindingType="netTcpBinding" address="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator" bindingConfiguration="NetTcpBinding_IClientConsoleCommunicator">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ClientService.IClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>mse08004@fhs-hagenberg.ac.at</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service.wsdl
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service.wsdl	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service.wsdl	(revision 1270)
@@ -0,0 +1,157 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="ClientConsoleCommunicator" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IClientConsoleCommunicator_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
+        </msb:BinaryEncoding>
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:WindowsTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy">
+                  <msf:ProtectionLevel>EncryptAndSign</msf:ProtectionLevel>
+                </msf:WindowsTransportSecurity>
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256>
+                </sp:Basic256>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict>
+                </sp:Strict>
+              </wsp:Policy>
+            </sp:Layout>
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <wsaw:UsingAddressing>
+        </wsaw:UsingAddressing>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Common" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IClientConsoleCommunicator_GetStatusInfos_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfos" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetStatusInfos_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfosResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_SetConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnection" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_SetConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnectionResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_Disconnect_InputMessage">
+    <wsdl:part name="parameters" element="tns:Disconnect" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_Disconnect_OutputMessage">
+    <wsdl:part name="parameters" element="tns:DisconnectResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetCurrentConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetCurrentConnection" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetCurrentConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetCurrentConnectionResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_ShutdownClient_InputMessage">
+    <wsdl:part name="parameters" element="tns:ShutdownClient" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_ShutdownClient_OutputMessage">
+    <wsdl:part name="parameters" element="tns:ShutdownClientResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IClientConsoleCommunicator">
+    <wsdl:operation name="GetStatusInfos">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos" message="tns:IClientConsoleCommunicator_GetStatusInfos_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse" message="tns:IClientConsoleCommunicator_GetStatusInfos_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection" message="tns:IClientConsoleCommunicator_SetConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse" message="tns:IClientConsoleCommunicator_SetConnection_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="Disconnect">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/Disconnect" message="tns:IClientConsoleCommunicator_Disconnect_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/DisconnectResponse" message="tns:IClientConsoleCommunicator_Disconnect_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetCurrentConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnection" message="tns:IClientConsoleCommunicator_GetCurrentConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnectionResponse" message="tns:IClientConsoleCommunicator_GetCurrentConnection_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="ShutdownClient">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/ShutdownClient" message="tns:IClientConsoleCommunicator_ShutdownClient_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/ShutdownClientResponse" message="tns:IClientConsoleCommunicator_ShutdownClient_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IClientConsoleCommunicator" type="tns:IClientConsoleCommunicator">
+    <wsp:PolicyReference URI="#NetTcpBinding_IClientConsoleCommunicator_policy">
+    </wsp:PolicyReference>
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="GetStatusInfos">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/SetConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="Disconnect">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/Disconnect" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetCurrentConnection">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/GetCurrentConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ShutdownClient">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/ShutdownClient" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ClientConsoleCommunicator">
+    <wsdl:port name="NetTcpBinding_IClientConsoleCommunicator" binding="tns:NetTcpBinding_IClientConsoleCommunicator">
+      <soap12:address location="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Upn>mse08004@fhs-hagenberg.ac.at</Upn>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service.xsd	(revision 1270)
@@ -0,0 +1,60 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" />
+  <xs:element name="GetStatusInfos">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStatusInfosResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="GetStatusInfosResult" nillable="true" type="q1:StatusCommons" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnection">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="container" nillable="true" type="q2:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnectionResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="Disconnect">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="DisconnectResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCurrentConnection">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetCurrentConnectionResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="GetCurrentConnectionResult" nillable="true" type="q3:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ShutdownClient">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ShutdownClientResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service1.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service1.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientService/service1.xsd	(revision 1270)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="ConnectionContainer" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer, Service References.ClientWCFService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.datasource
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.datasource	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.datasource	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio .Net. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="StatusCommons" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+   <TypeInfo>HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons, Service References.ClientWCFService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd	(revision 1270)
@@ -0,0 +1,45 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" xmlns:ser="http://schemas.microsoft.com/2003/10/Serialization/" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+  <xs:complexType name="StatusCommons">
+    <xs:sequence>
+      <xs:element name="_x003C_ClientGuid_x003E_k__BackingField" type="ser:guid" />
+      <xs:element name="_x003C_ConnectedSince_x003E_k__BackingField" type="xs:dateTime" />
+      <xs:element name="_x003C_JobsAborted_x003E_k__BackingField" type="xs:int" />
+      <xs:element name="_x003C_JobsDone_x003E_k__BackingField" type="xs:int" />
+      <xs:element name="_x003C_JobsFetched_x003E_k__BackingField" type="xs:int" />
+      <xs:element name="_x003C_Jobs_x003E_k__BackingField" nillable="true" type="tns:ArrayOfJobStatus" />
+      <xs:element name="_x003C_Status_x003E_k__BackingField" type="tns:StatusCommons.ClientStatusEnum" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="StatusCommons" nillable="true" type="tns:StatusCommons" />
+  <xs:complexType name="ArrayOfJobStatus">
+    <xs:sequence>
+      <xs:element minOccurs="0" maxOccurs="unbounded" name="JobStatus" nillable="true" type="tns:JobStatus" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ArrayOfJobStatus" nillable="true" type="tns:ArrayOfJobStatus" />
+  <xs:complexType name="JobStatus">
+    <xs:sequence>
+      <xs:element name="_x003C_JobId_x003E_k__BackingField" type="xs:long" />
+      <xs:element name="_x003C_Progress_x003E_k__BackingField" type="xs:double" />
+      <xs:element name="_x003C_Since_x003E_k__BackingField" type="xs:dateTime" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="JobStatus" nillable="true" type="tns:JobStatus" />
+  <xs:simpleType name="StatusCommons.ClientStatusEnum">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="Connected" />
+      <xs:enumeration value="Disconnected" />
+      <xs:enumeration value="ConnInterrupted" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="StatusCommons.ClientStatusEnum" nillable="true" type="tns:StatusCommons.ClientStatusEnum" />
+  <xs:complexType name="ConnectionContainer">
+    <xs:sequence>
+      <xs:element name="_x003C_IPAdress_x003E_k__BackingField" nillable="true" type="xs:string" />
+      <xs:element name="_x003C_Port_x003E_k__BackingField" type="xs:int" />
+    </xs:sequence>
+  </xs:complexType>
+  <xs:element name="ConnectionContainer" nillable="true" type="tns:ConnectionContainer" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/Reference.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/Reference.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/Reference.cs	(revision 1270)
@@ -0,0 +1,354 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Console.ClientWCFService {
+    using System.Runtime.Serialization;
+    using System;
+    
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="StatusCommons", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class StatusCommons : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private System.Guid ClientGuidk__BackingFieldField;
+        
+        private System.DateTime ConnectedSincek__BackingFieldField;
+        
+        private int JobsAbortedk__BackingFieldField;
+        
+        private int JobsDonek__BackingFieldField;
+        
+        private int JobsFetchedk__BackingFieldField;
+        
+        private HeuristicLab.Hive.Client.Console.ClientWCFService.JobStatus[] Jobsk__BackingFieldField;
+        
+        private HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.ClientStatusEnum Statusk__BackingFieldField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<ClientGuid>k__BackingField", IsRequired=true)]
+        public System.Guid ClientGuidk__BackingField {
+            get {
+                return this.ClientGuidk__BackingFieldField;
+            }
+            set {
+                if ((this.ClientGuidk__BackingFieldField.Equals(value) != true)) {
+                    this.ClientGuidk__BackingFieldField = value;
+                    this.RaisePropertyChanged("ClientGuidk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<ConnectedSince>k__BackingField", IsRequired=true)]
+        public System.DateTime ConnectedSincek__BackingField {
+            get {
+                return this.ConnectedSincek__BackingFieldField;
+            }
+            set {
+                if ((this.ConnectedSincek__BackingFieldField.Equals(value) != true)) {
+                    this.ConnectedSincek__BackingFieldField = value;
+                    this.RaisePropertyChanged("ConnectedSincek__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobsAborted>k__BackingField", IsRequired=true)]
+        public int JobsAbortedk__BackingField {
+            get {
+                return this.JobsAbortedk__BackingFieldField;
+            }
+            set {
+                if ((this.JobsAbortedk__BackingFieldField.Equals(value) != true)) {
+                    this.JobsAbortedk__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobsAbortedk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobsDone>k__BackingField", IsRequired=true)]
+        public int JobsDonek__BackingField {
+            get {
+                return this.JobsDonek__BackingFieldField;
+            }
+            set {
+                if ((this.JobsDonek__BackingFieldField.Equals(value) != true)) {
+                    this.JobsDonek__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobsDonek__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobsFetched>k__BackingField", IsRequired=true)]
+        public int JobsFetchedk__BackingField {
+            get {
+                return this.JobsFetchedk__BackingFieldField;
+            }
+            set {
+                if ((this.JobsFetchedk__BackingFieldField.Equals(value) != true)) {
+                    this.JobsFetchedk__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobsFetchedk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Jobs>k__BackingField", IsRequired=true)]
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.JobStatus[] Jobsk__BackingField {
+            get {
+                return this.Jobsk__BackingFieldField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.Jobsk__BackingFieldField, value) != true)) {
+                    this.Jobsk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Jobsk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Status>k__BackingField", IsRequired=true)]
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons.ClientStatusEnum Statusk__BackingField {
+            get {
+                return this.Statusk__BackingFieldField;
+            }
+            set {
+                if ((this.Statusk__BackingFieldField.Equals(value) != true)) {
+                    this.Statusk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Statusk__BackingField");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+        
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+        [System.Runtime.Serialization.DataContractAttribute(Name="StatusCommons.ClientStatusEnum", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+            "leService")]
+        public enum ClientStatusEnum : int {
+            
+            [System.Runtime.Serialization.EnumMemberAttribute()]
+            Connected = 0,
+            
+            [System.Runtime.Serialization.EnumMemberAttribute()]
+            Disconnected = 1,
+            
+            [System.Runtime.Serialization.EnumMemberAttribute()]
+            ConnInterrupted = 2,
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="JobStatus", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class JobStatus : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private long JobIdk__BackingFieldField;
+        
+        private double Progressk__BackingFieldField;
+        
+        private System.DateTime Sincek__BackingFieldField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<JobId>k__BackingField", IsRequired=true)]
+        public long JobIdk__BackingField {
+            get {
+                return this.JobIdk__BackingFieldField;
+            }
+            set {
+                if ((this.JobIdk__BackingFieldField.Equals(value) != true)) {
+                    this.JobIdk__BackingFieldField = value;
+                    this.RaisePropertyChanged("JobIdk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Progress>k__BackingField", IsRequired=true)]
+        public double Progressk__BackingField {
+            get {
+                return this.Progressk__BackingFieldField;
+            }
+            set {
+                if ((this.Progressk__BackingFieldField.Equals(value) != true)) {
+                    this.Progressk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Progressk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Since>k__BackingField", IsRequired=true)]
+        public System.DateTime Sincek__BackingField {
+            get {
+                return this.Sincek__BackingFieldField;
+            }
+            set {
+                if ((this.Sincek__BackingFieldField.Equals(value) != true)) {
+                    this.Sincek__BackingFieldField = value;
+                    this.RaisePropertyChanged("Sincek__BackingField");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]
+    [System.Runtime.Serialization.DataContractAttribute(Name="ConnectionContainer", Namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConso" +
+        "leService")]
+    [System.SerializableAttribute()]
+    public partial class ConnectionContainer : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
+        
+        [System.NonSerializedAttribute()]
+        private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
+        
+        private string IPAdressk__BackingFieldField;
+        
+        private int Portk__BackingFieldField;
+        
+        [global::System.ComponentModel.BrowsableAttribute(false)]
+        public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
+            get {
+                return this.extensionDataField;
+            }
+            set {
+                this.extensionDataField = value;
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<IPAdress>k__BackingField", IsRequired=true)]
+        public string IPAdressk__BackingField {
+            get {
+                return this.IPAdressk__BackingFieldField;
+            }
+            set {
+                if ((object.ReferenceEquals(this.IPAdressk__BackingFieldField, value) != true)) {
+                    this.IPAdressk__BackingFieldField = value;
+                    this.RaisePropertyChanged("IPAdressk__BackingField");
+                }
+            }
+        }
+        
+        [System.Runtime.Serialization.DataMemberAttribute(Name="<Port>k__BackingField", IsRequired=true)]
+        public int Portk__BackingField {
+            get {
+                return this.Portk__BackingFieldField;
+            }
+            set {
+                if ((this.Portk__BackingFieldField.Equals(value) != true)) {
+                    this.Portk__BackingFieldField = value;
+                    this.RaisePropertyChanged("Portk__BackingField");
+                }
+            }
+        }
+        
+        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+        
+        protected void RaisePropertyChanged(string propertyName) {
+            System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+            if ((propertyChanged != null)) {
+                propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+            }
+        }
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ClientWCFService.IClientConsoleCommunicator")]
+    public interface IClientConsoleCommunicator {
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse")]
+        HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons GetStatusInfos();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/GetConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse")]
+        HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer GetConnection();
+        
+        [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection", ReplyAction="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse")]
+        void SetConnection(HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer container);
+    }
+    
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public interface IClientConsoleCommunicatorChannel : HeuristicLab.Hive.Client.Console.ClientWCFService.IClientConsoleCommunicator, System.ServiceModel.IClientChannel {
+    }
+    
+    [System.Diagnostics.DebuggerStepThroughAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
+    public partial class ClientConsoleCommunicatorClient : System.ServiceModel.ClientBase<HeuristicLab.Hive.Client.Console.ClientWCFService.IClientConsoleCommunicator>, HeuristicLab.Hive.Client.Console.ClientWCFService.IClientConsoleCommunicator {
+        
+        public ClientConsoleCommunicatorClient() {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName) : 
+                base(endpointConfigurationName) {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName, string remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientConsoleCommunicatorClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(endpointConfigurationName, remoteAddress) {
+        }
+        
+        public ClientConsoleCommunicatorClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
+                base(binding, remoteAddress) {
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.StatusCommons GetStatusInfos() {
+            return base.Channel.GetStatusInfos();
+        }
+        
+        public HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer GetConnection() {
+            return base.Channel.GetConnection();
+        }
+        
+        public void SetConnection(HeuristicLab.Hive.Client.Console.ClientWCFService.ConnectionContainer container) {
+            base.Channel.SetConnection(container);
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/Reference.svcmap
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/Reference.svcmap	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/Reference.svcmap	(revision 1270)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="9ea57ddc-eea2-4ddf-9d73-9a67a3dd8193" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+  <ClientOptions>
+    <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+    <EnableDataBinding>true</EnableDataBinding>
+    <ExcludedTypes />
+    <ImportXmlTypes>false</ImportXmlTypes>
+    <GenerateInternalTypes>false</GenerateInternalTypes>
+    <GenerateMessageContracts>false</GenerateMessageContracts>
+    <NamespaceMappings />
+    <CollectionMappings />
+    <GenerateSerializableTypes>true</GenerateSerializableTypes>
+    <Serializer>Auto</Serializer>
+    <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+    <ReferencedAssemblies />
+    <ReferencedDataContractTypes />
+    <ServiceContractMappings />
+  </ClientOptions>
+  <MetadataSources>
+    <MetadataSource Address="net.tcp://127.0.0.1:8000/ClientConsole/mex" Protocol="mex" SourceId="1" />
+  </MetadataSources>
+  <Metadata>
+    <MetadataFile FileName="service.wsdl" MetadataType="Wsdl" ID="5425b0cf-62ce-4ca2-af78-a048e9784640" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="service.xsd" MetadataType="Schema" ID="0d878304-2c0b-4e74-8041-58b12e2da1e9" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="service1.xsd" MetadataType="Schema" ID="6a4352ef-3d11-42ef-8ebf-0c9f0978884b" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+    <MetadataFile FileName="HeuristicLab.Hive.Client.Core.ClientConsoleService.xsd" MetadataType="Schema" ID="af1f5bc1-1eeb-44bd-ad6a-d97746a645e5" SourceId="1" SourceUrl="net.tcp://127.0.0.1:8000/ClientConsole/mex" />
+  </Metadata>
+  <Extensions>
+    <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+    <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+  </Extensions>
+</ReferenceGroup>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/configuration.svcinfo
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/configuration.svcinfo	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/configuration.svcinfo	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+  <behaviors />
+  <bindings>
+    <binding digest="System.ServiceModel.Configuration.NetTcpBindingElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data hostNameComparisonMode=&quot;StrongWildcard&quot; listenBacklog=&quot;10&quot; maxBufferSize=&quot;65536&quot; maxConnections=&quot;10&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot; transactionFlow=&quot;false&quot; transactionProtocol=&quot;OleTransactions&quot; transferMode=&quot;Buffered&quot;&gt;&lt;readerQuotas maxArrayLength=&quot;16384&quot; maxBytesPerRead=&quot;4096&quot; maxDepth=&quot;32&quot; maxNameTableCharCount=&quot;16384&quot; maxStringContentLength=&quot;8192&quot; /&gt;&lt;reliableSession enabled=&quot;false&quot; inactivityTimeout=&quot;00:10:00&quot; ordered=&quot;true&quot; /&gt;&lt;security mode=&quot;Transport&quot;&gt;&lt;message clientCredentialType=&quot;Windows&quot; /&gt;&lt;transport clientCredentialType=&quot;Windows&quot; protectionLevel=&quot;EncryptAndSign&quot; /&gt;&lt;/security&gt;&lt;/Data&gt;" bindingType="netTcpBinding" name="NetTcpBinding_IClientConsoleCommunicator2" />
+  </bindings>
+  <endpoints>
+    <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot; contract=&quot;ClientWCFService.IClientConsoleCommunicator&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08004@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator&quot; binding=&quot;netTcpBinding&quot; bindingConfiguration=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot; contract=&quot;ClientWCFService.IClientConsoleCommunicator&quot; name=&quot;NetTcpBinding_IClientConsoleCommunicator2&quot;&gt;&lt;identity&gt;&lt;userPrincipalName value=&quot;mse08004@fhs-hagenberg.ac.at&quot; /&gt;&lt;/identity&gt;&lt;/Data&gt;" contractName="ClientWCFService.IClientConsoleCommunicator" name="NetTcpBinding_IClientConsoleCommunicator2" />
+  </endpoints>
+</configurationSnapshot>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/configuration91.svcinfo
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/configuration91.svcinfo	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/configuration91.svcinfo	(revision 1270)
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="JNLo0XZb7XeV8gd1Vd1M13/GZZM=">
+  <bindingConfigurations>
+    <bindingConfiguration bindingType="netTcpBinding" name="NetTcpBinding_IClientConsoleCommunicator2">
+      <properties>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator2</serializedValue>
+        </property>
+        <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:01:00</serializedValue>
+        </property>
+        <property path="/transactionFlow" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/transferMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Buffered</serializedValue>
+        </property>
+        <property path="/transactionProtocol" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TransactionProtocol, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.OleTransactionsProtocol</serializedValue>
+        </property>
+        <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>StrongWildcard</serializedValue>
+        </property>
+        <property path="/listenBacklog" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>524288</serializedValue>
+        </property>
+        <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/maxConnections" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>10</serializedValue>
+        </property>
+        <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>65536</serializedValue>
+        </property>
+        <property path="/portSharingEnabled" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>32</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>8192</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>4096</serializedValue>
+        </property>
+        <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>16384</serializedValue>
+        </property>
+        <property path="/reliableSession" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.StandardBindingOptionalReliableSessionElement</serializedValue>
+        </property>
+        <property path="/reliableSession/ordered" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>True</serializedValue>
+        </property>
+        <property path="/reliableSession/inactivityTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>00:10:00</serializedValue>
+        </property>
+        <property path="/reliableSession/enabled" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.NetTcpSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.NetTcpSecurityElement</serializedValue>
+        </property>
+        <property path="/security/mode" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.SecurityMode, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Transport</serializedValue>
+        </property>
+        <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.TcpTransportSecurityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.TcpTransportSecurityElement</serializedValue>
+        </property>
+        <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.TcpClientCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/transport/protectionLevel" isComplexType="false" isExplicitlyDefined="true" clrType="System.Net.Security.ProtectionLevel, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>EncryptAndSign</serializedValue>
+        </property>
+        <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.MessageSecurityOverTcpElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.MessageSecurityOverTcpElement</serializedValue>
+        </property>
+        <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.MessageCredentialType, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Windows</serializedValue>
+        </property>
+        <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>Basic256</serializedValue>
+        </property>
+      </properties>
+    </bindingConfiguration>
+  </bindingConfigurations>
+  <endpoints>
+    <endpoint name="NetTcpBinding_IClientConsoleCommunicator2" contract="ClientWCFService.IClientConsoleCommunicator" bindingType="netTcpBinding" address="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator" bindingConfiguration="NetTcpBinding_IClientConsoleCommunicator2">
+      <properties>
+        <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>netTcpBinding</serializedValue>
+        </property>
+        <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator2</serializedValue>
+        </property>
+        <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>ClientWCFService.IClientConsoleCommunicator</serializedValue>
+        </property>
+        <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+        </property>
+        <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>&lt;Header /&gt;</serializedValue>
+        </property>
+        <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>mse08004@fhs-hagenberg.ac.at</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+        </property>
+        <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+        </property>
+        <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+        </property>
+        <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+        </property>
+        <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>My</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>LocalMachine</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+        </property>
+        <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue />
+        </property>
+        <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>False</serializedValue>
+        </property>
+        <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+          <serializedValue>NetTcpBinding_IClientConsoleCommunicator2</serializedValue>
+        </property>
+      </properties>
+    </endpoint>
+  </endpoints>
+</SavedWcfConfigurationInformation>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service.wsdl
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service.wsdl	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service.wsdl	(revision 1270)
@@ -0,0 +1,118 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:tns="http://tempuri.org/" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="ClientConsoleCommunicator" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsp:Policy wsu:Id="NetTcpBinding_IClientConsoleCommunicator_policy">
+    <wsp:ExactlyOne>
+      <wsp:All>
+        <msb:BinaryEncoding xmlns:msb="http://schemas.microsoft.com/ws/06/2004/mspolicy/netbinary1">
+        </msb:BinaryEncoding>
+        <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+          <wsp:Policy>
+            <sp:TransportToken>
+              <wsp:Policy>
+                <msf:WindowsTransportSecurity xmlns:msf="http://schemas.microsoft.com/ws/2006/05/framing/policy">
+                  <msf:ProtectionLevel>EncryptAndSign</msf:ProtectionLevel>
+                </msf:WindowsTransportSecurity>
+              </wsp:Policy>
+            </sp:TransportToken>
+            <sp:AlgorithmSuite>
+              <wsp:Policy>
+                <sp:Basic256>
+                </sp:Basic256>
+              </wsp:Policy>
+            </sp:AlgorithmSuite>
+            <sp:Layout>
+              <wsp:Policy>
+                <sp:Strict>
+                </sp:Strict>
+              </wsp:Policy>
+            </sp:Layout>
+          </wsp:Policy>
+        </sp:TransportBinding>
+        <wsaw:UsingAddressing>
+        </wsaw:UsingAddressing>
+      </wsp:All>
+    </wsp:ExactlyOne>
+  </wsp:Policy>
+  <wsdl:types>
+    <xsd:schema targetNamespace="http://tempuri.org/Imports">
+      <xsd:import namespace="http://tempuri.org/" />
+      <xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
+      <xsd:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" />
+    </xsd:schema>
+  </wsdl:types>
+  <wsdl:message name="IClientConsoleCommunicator_GetStatusInfos_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfos" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetStatusInfos_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetStatusInfosResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:GetConnection" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_GetConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:GetConnectionResponse" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_SetConnection_InputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnection" />
+  </wsdl:message>
+  <wsdl:message name="IClientConsoleCommunicator_SetConnection_OutputMessage">
+    <wsdl:part name="parameters" element="tns:SetConnectionResponse" />
+  </wsdl:message>
+  <wsdl:portType name="IClientConsoleCommunicator">
+    <wsdl:operation name="GetStatusInfos">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos" message="tns:IClientConsoleCommunicator_GetStatusInfos_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfosResponse" message="tns:IClientConsoleCommunicator_GetStatusInfos_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="GetConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetConnection" message="tns:IClientConsoleCommunicator_GetConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/GetConnectionResponse" message="tns:IClientConsoleCommunicator_GetConnection_OutputMessage" />
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <wsdl:input wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/SetConnection" message="tns:IClientConsoleCommunicator_SetConnection_InputMessage" />
+      <wsdl:output wsaw:Action="http://tempuri.org/IClientConsoleCommunicator/SetConnectionResponse" message="tns:IClientConsoleCommunicator_SetConnection_OutputMessage" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="NetTcpBinding_IClientConsoleCommunicator" type="tns:IClientConsoleCommunicator">
+    <wsp:PolicyReference URI="#NetTcpBinding_IClientConsoleCommunicator_policy">
+    </wsp:PolicyReference>
+    <soap12:binding transport="http://schemas.microsoft.com/soap/tcp" />
+    <wsdl:operation name="GetStatusInfos">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/GetStatusInfos" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="GetConnection">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/GetConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="SetConnection">
+      <soap12:operation soapAction="http://tempuri.org/IClientConsoleCommunicator/SetConnection" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="ClientConsoleCommunicator">
+    <wsdl:port name="NetTcpBinding_IClientConsoleCommunicator" binding="tns:NetTcpBinding_IClientConsoleCommunicator">
+      <soap12:address location="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator" />
+      <wsa10:EndpointReference>
+        <wsa10:Address>net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator</wsa10:Address>
+        <Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
+          <Upn>mse08004@fhs-hagenberg.ac.at</Upn>
+        </Identity>
+      </wsa10:EndpointReference>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service.xsd	(revision 1270)
@@ -0,0 +1,40 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://tempuri.org/" elementFormDefault="qualified" targetNamespace="http://tempuri.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:import namespace="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" />
+  <xs:element name="GetStatusInfos">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetStatusInfosResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q1="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="GetStatusInfosResult" nillable="true" type="q1:StatusCommons" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetConnection">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="GetConnectionResponse">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q2="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="GetConnectionResult" nillable="true" type="q2:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnection">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element xmlns:q3="http://schemas.datacontract.org/2004/07/HeuristicLab.Hive.Client.Core.ClientConsoleService" minOccurs="0" name="container" nillable="true" type="q3:ConnectionContainer" />
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="SetConnectionResponse">
+    <xs:complexType>
+      <xs:sequence />
+    </xs:complexType>
+  </xs:element>
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service1.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service1.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/Service References/ClientWCFService/service1.xsd	(revision 1270)
@@ -0,0 +1,42 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="anyType" nillable="true" type="xs:anyType" />
+  <xs:element name="anyURI" nillable="true" type="xs:anyURI" />
+  <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" />
+  <xs:element name="boolean" nillable="true" type="xs:boolean" />
+  <xs:element name="byte" nillable="true" type="xs:byte" />
+  <xs:element name="dateTime" nillable="true" type="xs:dateTime" />
+  <xs:element name="decimal" nillable="true" type="xs:decimal" />
+  <xs:element name="double" nillable="true" type="xs:double" />
+  <xs:element name="float" nillable="true" type="xs:float" />
+  <xs:element name="int" nillable="true" type="xs:int" />
+  <xs:element name="long" nillable="true" type="xs:long" />
+  <xs:element name="QName" nillable="true" type="xs:QName" />
+  <xs:element name="short" nillable="true" type="xs:short" />
+  <xs:element name="string" nillable="true" type="xs:string" />
+  <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" />
+  <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" />
+  <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" />
+  <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" />
+  <xs:element name="char" nillable="true" type="tns:char" />
+  <xs:simpleType name="char">
+    <xs:restriction base="xs:int" />
+  </xs:simpleType>
+  <xs:element name="duration" nillable="true" type="tns:duration" />
+  <xs:simpleType name="duration">
+    <xs:restriction base="xs:duration">
+      <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" />
+      <xs:minInclusive value="-P10675199DT2H48M5.4775808S" />
+      <xs:maxInclusive value="P10675199DT2H48M5.4775807S" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:element name="guid" nillable="true" type="tns:guid" />
+  <xs:simpleType name="guid">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" />
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:attribute name="FactoryType" type="xs:QName" />
+  <xs:attribute name="Id" type="xs:ID" />
+  <xs:attribute name="Ref" type="xs:IDREF" />
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ServiceLocator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ServiceLocator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/ServiceLocator.cs	(revision 1270)
@@ -0,0 +1,23 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+//using HeuristicLab.Hive.Client.ClientConsole;
+
+namespace HeuristicLab.Hive.Client.Console {
+  public class ServiceLocator {
+    private static ClientConsoleCommunicatorClient proxy = null;
+
+    public static ClientConsoleCommunicatorClient ClientConsoleCommunicatorClient() {
+      if (proxy == null) {
+        proxy = new ClientConsoleCommunicatorClient(
+          new NetTcpBinding(),
+          new EndpointAddress("net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator")
+          );
+      }
+
+      return proxy;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Console/app.config	(revision 1270)
@@ -0,0 +1,45 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.Hive.Client.Console.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <system.serviceModel>
+        <bindings>
+            <netTcpBinding>
+                <binding name="NetTcpBinding_IClientConsoleCommunicator" closeTimeout="00:01:00"
+                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
+                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
+                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
+                    maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
+                    maxReceivedMessageSize="65536">
+                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
+                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
+                        enabled="false" />
+                    <security mode="None">
+                        <transport clientCredentialType="None" protectionLevel="None" />
+                        <message clientCredentialType="None" />
+                    </security>
+                </binding>
+            </netTcpBinding>
+        </bindings>
+        <client>
+            <endpoint address="net.tcp://127.0.0.1:8000/ClientConsole/ClientConsoleCommunicator"
+                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IClientConsoleCommunicator"
+                contract="ClientService.IClientConsoleCommunicator" name="NetTcpBinding_IClientConsoleCommunicator">
+                <identity>
+                    <userPrincipalName value="mse08004@fhs-hagenberg.ac.at" />
+                </identity>
+            </endpoint>
+        </client>
+    </system.serviceModel>
+    <userSettings>
+        <HeuristicLab.Hive.Client.Console.Properties.Settings>
+            <setting name="IpAdress" serializeAs="String">
+                <value>10.0.0.1</value>
+            </setting>
+        </HeuristicLab.Hive.Client.Console.Properties.Settings>
+    </userSettings>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleCommunicator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleCommunicator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleCommunicator.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Client.Core.ClientConsoleService.Interfaces;
+using HeuristicLab.Hive.Client.Core.ConfigurationManager;
+using HeuristicLab.Hive.Client.Communication;
+using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Client.Core.ClientConsoleService {
+  public class ClientConsoleCommunicator: IClientConsoleCommunicator {
+    #region IClientConsoleCommunicator Members
+
+    public StatusCommons GetStatusInfos() {
+      lock (Core.Locker) {
+        return ConfigManager.Instance.GetStatusForClientConsole();
+      }
+    }
+
+    public void SetConnection(ConnectionContainer container) {
+      ConfigManager.Instance.SetServerIPAndPort(container);
+      WcfService.Instance.Connect(container.IPAdress, container.Port);
+    }
+
+    public void Disconnect() {
+      WcfService.Instance.Disconnect();
+    }   
+
+    public ConnectionContainer GetCurrentConnection() {
+      return new ConnectionContainer { IPAdress = WcfService.Instance.ServerIP, Port = WcfService.Instance.ServerPort };
+    }
+
+    public void ShutdownClient() {
+      MessageQueue.GetInstance().AddMessage(MessageContainer.MessageType.Shutdown);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleServer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleServer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/ClientConsoleServer.cs	(revision 1270)
@@ -0,0 +1,55 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel.Description;
+using System.ServiceModel;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Hive.Client.Core.ClientConsoleService.Interfaces;
+
+namespace HeuristicLab.Hive.Client.Core.ClientConsoleService {
+  public class ClientConsoleServer {
+
+    DiscoveryService discService = new DiscoveryService();
+   
+    private bool AddMexEndpoint(ServiceHost serviceHost) {
+      if (serviceHost != null) {
+        ServiceMetadataBehavior behavior =
+            new ServiceMetadataBehavior();
+        serviceHost.Description.Behaviors.Add(behavior);
+
+        return serviceHost.AddServiceEndpoint(
+          typeof(IMetadataExchange),
+          MetadataExchangeBindings.CreateMexTcpBinding(),
+          "mex") != null;
+      } else
+        return false;
+    }
+    
+    public ServiceHost StartClientConsoleServer(Uri uriTcp) {
+      IClientConsoleCommunicator[] clientConsoleServerInstances =
+        discService.GetInstances<IClientConsoleCommunicator>();
+
+      if (clientConsoleServerInstances.Length > 0) {
+        ServiceHost serviceHost =
+                new ServiceHost(clientConsoleServerInstances[0].GetType(),
+                  uriTcp);
+
+        System.ServiceModel.Channels.Binding binding =
+          new NetTcpBinding();
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IClientConsoleCommunicator),
+              binding,
+              "ClientConsoleCommunicator");
+
+        AddMexEndpoint(serviceHost);
+
+        serviceHost.Open();
+        return serviceHost;
+      } else {
+        return null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/Interfaces/IClientConsoleCommunicator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/Interfaces/IClientConsoleCommunicator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/Interfaces/IClientConsoleCommunicator.cs	(revision 1270)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+
+namespace HeuristicLab.Hive.Client.Core.ClientConsoleService.Interfaces {
+  /// <summary>
+  /// Defines the interfaces for the Client Console
+  /// </summary>
+  [ServiceContract]
+  public interface IClientConsoleCommunicator {
+    /// <summary>
+    /// Gets all status information concerning the client Service
+    /// </summary>
+    /// <returns>the StatusCommons Object, filled with the client details</returns>
+    [OperationContract]
+    StatusCommons GetStatusInfos();
+    /// <summary>
+    /// Set the connection settings in the wcfService
+    /// </summary>
+    /// <param name="container">the container with the connection details</param>
+    [OperationContract]
+    void SetConnection(ConnectionContainer container);
+    /// <summary>
+    /// Signals the client to disconnect from the server
+    /// </summary>
+    [OperationContract]
+    void Disconnect();
+    /// <summary>
+    /// Get the current connection details
+    /// </summary>
+    /// <returns>the ConnectionContainer Object</returns>
+    [OperationContract]
+    ConnectionContainer GetCurrentConnection();
+    /// <summary>
+    /// Signals the client to exit all jobs and shutdown
+    /// </summary>
+    [OperationContract]
+    void ShutdownClient();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/ConnectionContainer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/ConnectionContainer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/ConnectionContainer.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Client.Core.ClientConsoleService {
+  [DataContract]
+  public class ConnectionContainer {
+    [DataMember]
+    public string IPAdress { get; set; }
+    [DataMember]
+    public int Port { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/JobStatus.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/JobStatus.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/JobStatus.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Client.Core.ClientConsoleService {
+  [DataContract]
+  public class JobStatus {
+    /// <summary>
+    /// Id of the Job
+    /// </summary>
+    [DataMember]
+    public long JobId { get; set; }
+    /// <summary>
+    /// When has the calculation of the Job begun?
+    /// </summary>
+    [DataMember]
+    public DateTime Since { get; set; }
+    /// <summary>
+    /// Current progress
+    /// </summary>
+    [DataMember]
+    public double Progress { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/StatusCommons.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/StatusCommons.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ClientConsoleService/TransferObjects/StatusCommons.cs	(revision 1270)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Client.Common;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Client.Core.ClientConsoleService {
+  /// <summary>
+  /// Various Status Information for the ClientConsole
+  /// </summary>
+  [DataContract]
+  public class StatusCommons {    
+    [DataMember]
+    public Guid ClientGuid { get; set; }
+    [DataMember]
+    public NetworkEnum.WcfConnState Status { get; set; }
+    [DataMember]    
+    public DateTime ConnectedSince { get; set; }
+    [DataMember]
+    public int JobsFetched { get; set; }
+    [DataMember]
+    public int JobsDone { get; set; }
+    [DataMember]
+    public int JobsAborted { get; set; }
+    [DataMember]
+    public List<JobStatus> Jobs { get; set; }   
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ConfigurationManager/ClientStatusInfo.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ConfigurationManager/ClientStatusInfo.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ConfigurationManager/ClientStatusInfo.cs	(revision 1270)
@@ -0,0 +1,14 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Client.Core.ConfigurationManager {
+  public class ClientStatusInfo {
+    static public int JobsProcessed { get; set; }
+    static public int JobsAborted { get; set; }
+    static public int JobsFetched { get; set; }
+    static public DateTime LoginTime { get; set; }
+    
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ConfigurationManager/ConfigManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ConfigurationManager/ConfigManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/ConfigurationManager/ConfigManager.cs	(revision 1270)
@@ -0,0 +1,133 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Client.ExecutionEngine;
+using HeuristicLab.Hive.Client.Core.ClientConsoleService;
+using HeuristicLab.Hive.Client.Communication;
+using HeuristicLab.Hive.Client.Core.Properties;
+
+namespace HeuristicLab.Hive.Client.Core.ConfigurationManager {
+  /// <summary>
+  /// accesses the Server and sends his data (uuid, uptimes, hardware config) 
+  /// </summary>
+  public class ConfigManager {
+    private static ConfigManager instance = null;
+    public static ConfigManager Instance {
+      get {
+        if (instance == null) {
+          instance = new ConfigManager();
+        }
+        return instance;
+      }
+    }
+
+    public Core Core { get; set; }    
+    private ClientInfo hardwareInfo;        
+
+    /// <summary>
+    /// Constructor for the singleton, must recover Guid, Calendar, ...
+    /// </summary>
+    private ConfigManager() {      
+      hardwareInfo = new ClientInfo();
+
+      if (Settings.Default.Guid == Guid.Empty) {
+        hardwareInfo.ClientId = Guid.NewGuid();
+        Settings.Default.Guid = hardwareInfo.ClientId;
+        Settings.Default.Save();
+      } else
+        hardwareInfo.ClientId = Settings.Default.Guid;
+      
+      hardwareInfo.NrOfCores = Environment.ProcessorCount;
+      hardwareInfo.Memory = 1024;
+      hardwareInfo.Name = Environment.MachineName;
+    }
+
+    /// <summary>
+    /// Get all the Information about the client
+    /// </summary>
+    /// <returns>the ClientInfo object</returns>
+    public ClientInfo GetClientInfo() {
+      hardwareInfo.Login = WcfService.Instance.ConnectedSince;
+      return hardwareInfo;          
+    }
+
+    /// <summary>
+    /// Returns the connectioncontainer with the IP and Port, storred in the Settings framework
+    /// </summary>
+    /// <returns>The IP and Port of the server</returns>
+    public ConnectionContainer GetServerIPAndPort() {
+      ConnectionContainer cc = new ConnectionContainer();
+      cc.IPAdress = Settings.Default.ServerIP;
+      cc.Port = Settings.Default.ServerPort;
+      return cc;
+    }
+
+    /// <summary>
+    /// Sets and saves IP and Port in the Settings framework
+    /// </summary>
+    /// <param name="cc"></param>
+    public void SetServerIPAndPort(ConnectionContainer cc) {
+      Settings.Default.ServerIP = cc.IPAdress;
+      Settings.Default.ServerPort = cc.Port;
+      Settings.Default.Save();
+    }
+    /// <summary>
+    /// collects and returns information that get displayed by the Client Console
+    /// </summary>
+    /// <returns></returns>
+    public StatusCommons GetStatusForClientConsole() {
+      StatusCommons st = new StatusCommons();
+      st.ClientGuid = hardwareInfo.ClientId;
+      
+      st.Status = WcfService.Instance.ConnState;
+      st.ConnectedSince = WcfService.Instance.ConnectedSince;
+
+      st.JobsAborted = ClientStatusInfo.JobsAborted;
+      st.JobsDone = ClientStatusInfo.JobsProcessed;
+      st.JobsFetched = ClientStatusInfo.JobsFetched;      
+
+      Dictionary<long, Executor> engines = Core.GetExecutionEngines();
+      st.Jobs = new List<JobStatus>();
+
+      foreach (KeyValuePair<long, Executor> kvp in engines) {
+        Executor e = kvp.Value;
+        st.Jobs.Add(new JobStatus { JobId = e.JobId, Progress = e.Progress, Since = e.CreationTime });
+      }
+      return st;      
+    }
+
+    public Dictionary<long, double> GetProgressOfAllJobs() {
+      Dictionary<long,double> prog = new Dictionary<long,double>();
+      Dictionary<long, Executor> engines = Core.GetExecutionEngines();
+      foreach (KeyValuePair<long, Executor> kvp in engines) {
+        Executor e = kvp.Value;
+        prog[e.JobId] = e.Progress;
+      }
+      return prog;
+    }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Core.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Core.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Core.cs	(revision 1270)
@@ -0,0 +1,281 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Client.ExecutionEngine;
+using HeuristicLab.Hive.Client.Common;
+using System.Threading;
+using System.Reflection;
+using System.Diagnostics;
+using System.Security.Permissions;
+using System.Security.Policy;
+using System.Security;
+using HeuristicLab.Hive.Client.Communication;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Runtime.Remoting.Messaging;
+using HeuristicLab.PluginInfrastructure;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using HeuristicLab.Hive.Client.Core.ClientConsoleService;
+using HeuristicLab.Hive.Client.Core.ConfigurationManager;
+using HeuristicLab.Hive.Client.Communication.ServerService;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Hive.Client.Core.JobStorrage;
+
+
+namespace HeuristicLab.Hive.Client.Core {
+  /// <summary>
+  /// The core component of the Hive Client
+  /// </summary>
+  public class Core: MarshalByRefObject {
+    public delegate string GetASnapshotDelegate();
+
+    public static Object Locker { get; set; }
+
+    public static bool ShutdownFlag { get; set; }
+
+    Dictionary<long, Executor> engines = new Dictionary<long, Executor>();
+    Dictionary<long, AppDomain> appDomains = new Dictionary<long, AppDomain>();
+    Dictionary<long, Job> jobs = new Dictionary<long, Job>();
+
+    private WcfService wcfService;
+    private Heartbeat beat;
+    
+    /// <summary>
+    /// Main Method for the client
+    /// </summary>
+    public void Start() {
+      Core.Locker = new Object();
+      ShutdownFlag = false;
+
+      Logging.GetInstance().Info(this.ToString(), "Hive Client started");
+      ClientConsoleServer server = new ClientConsoleServer();
+      server.StartClientConsoleServer(new Uri("net.tcp://127.0.0.1:8000/ClientConsole/"));
+
+      ConfigManager manager = ConfigManager.Instance;
+      manager.Core = this;
+      
+      //Register all Wcf Service references
+      wcfService = WcfService.Instance;
+      wcfService.LoginCompleted += new EventHandler<LoginCompletedEventArgs>(wcfService_LoginCompleted);
+      wcfService.PullJobCompleted += new EventHandler<PullJobCompletedEventArgs>(wcfService_PullJobCompleted);
+      wcfService.SendJobResultCompleted += new EventHandler<SendJobResultCompletedEventArgs>(wcfService_SendJobResultCompleted);
+      wcfService.ConnectionRestored += new EventHandler(wcfService_ConnectionRestored);
+      wcfService.ServerChanged += new EventHandler(wcfService_ServerChanged);
+      wcfService.Connected += new EventHandler(wcfService_Connected);
+      //Recover Server IP and Port from the Settings Framework
+      ConnectionContainer cc = ConfigManager.Instance.GetServerIPAndPort();     
+      if (cc.IPAdress != String.Empty && cc.Port != 0) {
+        wcfService.Connect(cc.IPAdress, cc.Port);
+      }
+   
+      //Initialize the heartbeat
+      beat = new Heartbeat { Interval = 10000 };
+      beat.StartHeartbeat();     
+
+      MessageQueue queue = MessageQueue.GetInstance();
+      
+      //Main processing loop
+      while (!ShutdownFlag) {
+        MessageContainer container = queue.GetMessage();
+        Debug.WriteLine("Main loop received this message: " + container.Message.ToString());
+        Logging.GetInstance().Info(this.ToString(), container.Message.ToString());
+        DetermineAction(container);
+      }
+    }
+
+    /// <summary>
+    /// Reads and analyzes the Messages from the MessageQueue and starts corresponding actions
+    /// </summary>
+    /// <param name="container">The Container, containing the message</param>
+    private void DetermineAction(MessageContainer container) {
+      switch (container.Message) {
+        //Server requests to abort a job
+        case MessageContainer.MessageType.AbortJob:
+          engines[container.JobId].Abort();
+          break;
+        //Job has been successfully aborted
+        case MessageContainer.MessageType.JobAborted:
+          Debug.WriteLine("-- Job Aborted Message received");
+          break;
+        //Request a Snapshot from the Execution Engine
+        case MessageContainer.MessageType.RequestSnapshot:
+          engines[container.JobId].RequestSnapshot();
+          break;
+        //Snapshot is ready and can be sent back to the Server
+        case MessageContainer.MessageType.SnapshotReady:
+          Thread ssr = new Thread(new ParameterizedThreadStart(GetSnapshot));
+          ssr.Start(container.JobId);          
+          break;
+        //Pull a Job from the Server
+        case MessageContainer.MessageType.FetchJob: 
+          wcfService.PullJobAsync(ConfigManager.Instance.GetClientInfo().ClientId);
+          break;          
+        //A Job has finished and can be sent back to the server
+        case MessageContainer.MessageType.FinishedJob:
+          Thread finThread = new Thread(new ParameterizedThreadStart(GetFinishedJob));
+          finThread.Start(container.JobId);          
+          break;     
+        //Hard shutdown of the client
+        case MessageContainer.MessageType.Shutdown:
+          ShutdownFlag = true;
+          beat.StopHeartBeat();
+          break;
+      }
+    }
+
+    //Asynchronous Threads for interaction with the Execution Engine
+    #region Async Threads for the EE
+    
+    private void GetFinishedJob(object jobId) {
+      long jId = (long)jobId;
+      byte[] sJob = engines[jId].GetFinishedJob();
+
+      if (WcfService.Instance.ConnState == NetworkEnum.WcfConnState.Loggedin) {
+        wcfService.SendJobResultAsync(ConfigManager.Instance.GetClientInfo().ClientId,
+          jId,
+          sJob,
+          1,
+          null,
+          true);
+      } else {
+        JobStorrageManager.PersistObjectToDisc(wcfService.ServerIP, wcfService.ServerPort, jId, sJob);
+        AppDomain.Unload(appDomains[jId]);
+        appDomains.Remove(jId);
+        engines.Remove(jId);
+        jobs.Remove(jId);
+      }
+    }
+
+    private void GetSnapshot(object jobId) {
+      long jId = (long)jobId;
+      byte[] obj = engines[jId].GetSnapshot();
+      wcfService.SendJobResultAsync(ConfigManager.Instance.GetClientInfo().ClientId,
+        jId,
+        obj,
+        engines[jId].Progress,
+        null,
+        false);
+    }
+
+    #endregion
+
+    //Eventhandlers for the communication with the wcf Layer 
+    #region wcfService Events
+
+    void wcfService_LoginCompleted(object sender, LoginCompletedEventArgs e) {
+      if (e.Result.Success) {
+        Logging.GetInstance().Info(this.ToString(), "Login completed to Hive Server @ " + DateTime.Now);        
+      } else
+        Logging.GetInstance().Error(this.ToString(), e.Result.StatusMessage);
+    }    
+
+    void wcfService_PullJobCompleted(object sender, PullJobCompletedEventArgs e) {
+      if (e.Result.StatusMessage != ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT) {
+        bool sandboxed = true;
+
+        PluginManager.Manager.Initialize();
+        AppDomain appDomain = PluginManager.Manager.CreateAndInitAppDomainWithSandbox(e.Result.Job.Id.ToString(), sandboxed, typeof(TestJob));
+        appDomain.UnhandledException += new UnhandledExceptionEventHandler(appDomain_UnhandledException);
+        lock (Locker) {                    
+          if (!jobs.ContainsKey(e.Result.Job.Id)) {
+            jobs.Add(e.Result.Job.Id, e.Result.Job);
+            appDomains.Add(e.Result.Job.Id, appDomain);
+
+            Executor engine = (Executor)appDomain.CreateInstanceAndUnwrap(typeof(Executor).Assembly.GetName().Name, typeof(Executor).FullName);
+            engine.JobId = e.Result.Job.Id;
+            engine.Queue = MessageQueue.GetInstance();
+            engine.Start(e.Result.Job.SerializedJob);
+            engines.Add(e.Result.Job.Id, engine);
+
+            ClientStatusInfo.JobsFetched++;
+
+            Debug.WriteLine("Increment FetchedJobs to:" + ClientStatusInfo.JobsFetched);
+          }
+        }
+      }
+    }
+
+    void wcfService_SendJobResultCompleted(object sender, SendJobResultCompletedEventArgs e) {
+      if (e.Result.Success) {        
+        lock (Locker) {
+          //if the engine is running again -> we sent an snapshot. Otherwise the job was finished
+          //this method has a risk concerning race conditions.
+          //better expand the sendjobresultcompltedeventargs with a boolean "snapshot?" flag
+          if (e.Result.finished == false) {
+            Logging.GetInstance().Info(this.ToString(), "Snapshot for Job " + e.Result.JobId + " transmitted");
+          } else {
+            AppDomain.Unload(appDomains[e.Result.JobId]);
+            appDomains.Remove(e.Result.JobId);
+            engines.Remove(e.Result.JobId);
+            jobs.Remove(e.Result.JobId);
+            ClientStatusInfo.JobsProcessed++;
+            Debug.WriteLine("ProcessedJobs to:" + ClientStatusInfo.JobsProcessed);
+          }
+        }        
+      } else {
+        Logging.GetInstance().Error(this.ToString(), "Sending of job " + e.Result.JobId + " failed");
+      }
+    }
+
+    void wcfService_ServerChanged(object sender, EventArgs e) {
+      Logging.GetInstance().Info(this.ToString(), "ServerChanged has been called");
+      lock (Locker) {
+        foreach (KeyValuePair<long, AppDomain> entries in appDomains)
+          AppDomain.Unload(appDomains[entries.Key]);
+        appDomains = new Dictionary<long, AppDomain>();
+        engines = new Dictionary<long, Executor>();
+      }
+    }
+
+    void wcfService_Connected(object sender, EventArgs e) {
+      wcfService.LoginSync(ConfigManager.Instance.GetClientInfo());
+      JobStorrageManager.CheckAndSubmitJobsFromDisc();
+    }
+
+    //this is a little bit tricky - 
+    void wcfService_ConnectionRestored(object sender, EventArgs e) {
+      Logging.GetInstance().Info(this.ToString(), "Reconnected to old server - checking currently running appdomains");                 
+
+      foreach (KeyValuePair<long, Executor> execKVP in engines) {
+        if (!execKVP.Value.Running && execKVP.Value.CurrentMessage == MessageContainer.MessageType.NoMessage) {
+          Logging.GetInstance().Info(this.ToString(), "Checking for JobId: " + execKVP.Value.JobId);
+          Thread finThread = new Thread(new ParameterizedThreadStart(GetFinishedJob));
+          finThread.Start(execKVP.Value.JobId);
+        }
+      }
+    }
+
+    #endregion
+
+    public Dictionary<long, Executor> GetExecutionEngines() {
+      return engines;
+    }
+
+    void appDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
+      Logging.GetInstance().Error(this.ToString(), " Exception: " + e.ExceptionObject.ToString());
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/CoreApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/CoreApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/CoreApplication.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+using System.Diagnostics;
+using HeuristicLab.Hive.Client.Common;
+using System.Timers;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Client.Core {
+  [ClassInfo(Name = "Hive Client", Description = "Hive Client Core baseclass", AutoRestart = true)]
+  public class CoreApplication: ApplicationBase {
+    public override void Run() {
+      Core core = new Core();
+      core.Start();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/CorePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/CorePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/CorePlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Client.Core {
+  [ClassInfo(Name = "HeuristicLab.Hive.Client.Core-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Client.Core-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class CorePlugin: PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Heartbeat.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Heartbeat.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Heartbeat.cs	(revision 1270)
@@ -0,0 +1,99 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Timers;
+using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Client.Communication;
+using System.Diagnostics;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Client.Core.ConfigurationManager;
+using HeuristicLab.Hive.Client.Communication.ServerService;
+//using BO = HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Client.Core {
+  /// <summary>
+  /// Heartbeat class. It sends every x ms a heartbeat to the server and receives a Message
+  /// </summary>
+  public class Heartbeat {
+    public double Interval { get; set; }    
+    private Timer heartbeatTimer = null;
+        
+    public Heartbeat() {
+      Interval = 100;
+    }
+
+    public Heartbeat(double interval) {
+      Interval = interval;      
+    }
+
+    private WcfService wcfService;
+
+    /// <summary>
+    /// Starts the Heartbeat signal.
+    /// </summary>
+    public void StartHeartbeat() {
+      heartbeatTimer = new System.Timers.Timer();
+      heartbeatTimer.Interval = this.Interval;
+      heartbeatTimer.AutoReset = true;
+      heartbeatTimer.Elapsed += new ElapsedEventHandler(heartbeatTimer_Elapsed);
+      wcfService = WcfService.Instance;
+      wcfService.SendHeartBeatCompleted += new EventHandler<SendHeartBeatCompletedEventArgs>(wcfService_SendHeartBeatCompleted);
+      heartbeatTimer.Start();
+    }
+
+    /// <summary>
+    /// This Method is called every time the timer ticks
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void heartbeatTimer_Elapsed(object sender, ElapsedEventArgs e) {
+      Console.WriteLine("tick");  
+      ClientInfo info = ConfigManager.Instance.GetClientInfo();
+      // Todo: remove tempfix for free cores.
+
+      HeartBeatData heartBeatData = new HeartBeatData {
+        ClientId = info.ClientId,
+        freeCores = info.NrOfCores - (ClientStatusInfo.JobsFetched - ClientStatusInfo.JobsProcessed),
+        freeMemory = 1000,
+        jobProgress = ConfigManager.Instance.GetProgressOfAllJobs()
+      };
+      if (wcfService.ConnState == NetworkEnum.WcfConnState.Failed) {
+        wcfService.Connect();
+      } else if (wcfService.ConnState == NetworkEnum.WcfConnState.Loggedin) {
+        wcfService.SendHeartBeatAsync(heartBeatData);
+      }
+    }
+
+    void wcfService_SendHeartBeatCompleted(object sender, SendHeartBeatCompletedEventArgs e) {
+      System.Diagnostics.Debug.WriteLine("Heartbeat received! ");
+      e.Result.ActionRequest.ForEach(mc => MessageQueue.GetInstance().AddMessage(mc));
+    }
+
+    public void StopHeartBeat() {
+      heartbeatTimer.Dispose();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/HeuristicLab.Hive.Client.Core.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/HeuristicLab.Hive.Client.Core.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/HeuristicLab.Hive.Client.Core.csproj	(revision 1270)
@@ -0,0 +1,149 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5010BD86-23B7-4F8C-888A-76D21AD5266A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Client.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Client.Core-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClientConsoleService\ClientConsoleCommunicator.cs" />
+    <Compile Include="ClientConsoleService\ClientConsoleServer.cs" />
+    <Compile Include="ClientConsoleService\Interfaces\IClientConsoleCommunicator.cs" />
+    <Compile Include="ClientConsoleService\TransferObjects\ConnectionContainer.cs" />
+    <Compile Include="ClientConsoleService\TransferObjects\JobStatus.cs" />
+    <Compile Include="ClientConsoleService\TransferObjects\StatusCommons.cs" />
+    <Compile Include="ConfigurationManager\ClientStatusInfo.cs" />
+    <Compile Include="ConfigurationManager\ConfigManager.cs" />
+    <Compile Include="Core.cs" />
+    <Compile Include="CoreApplication.cs" />
+    <Compile Include="CorePlugin.cs" />
+    <Compile Include="Heartbeat.cs" />
+    <Compile Include="JobStorrage\JobStorrageInfo.cs" />
+    <Compile Include="JobStorrage\JobStorrageManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="Settings.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Client.Common\HeuristicLab.Hive.Client.Common.csproj">
+      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
+      <Name>HeuristicLab.Hive.Client.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Client.Communication\HeuristicLab.Hive.Client.Communication.csproj">
+      <Project>{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}</Project>
+      <Name>HeuristicLab.Hive.Client.Communication</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Client.ExecutionEngine\HeuristicLab.Hive.Client.ExecutionEngine.csproj">
+      <Project>{1605256A-1CB3-44AB-AAFF-577093EE5789}</Project>
+      <Name>HeuristicLab.Hive.Client.ExecutionEngine</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.JobBase\HeuristicLab.Hive.JobBase.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/JobStorrage/JobStorrageInfo.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/JobStorrage/JobStorrageInfo.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/JobStorrage/JobStorrageInfo.cs	(revision 1270)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Client.Core.JobStorrage {
+  public class JobStorrageInfo {
+    public String ServerIP { get; set; }
+    public long ServerPort { get; set; }
+    public DateTime TimeFinished { get; set; }
+    public long JobID { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/JobStorrage/JobStorrageManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/JobStorrage/JobStorrageManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/JobStorrage/JobStorrageManager.cs	(revision 1270)
@@ -0,0 +1,37 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using HeuristicLab.Hive.Client.Common;
+using HeuristicLab.Hive.Client.Communication;
+
+namespace HeuristicLab.Hive.Client.Core.JobStorrage {
+  public class JobStorrageManager {
+    private static List<JobStorrageInfo> StoredJobsList = new List<JobStorrageInfo>();
+    
+    public static void PersistObjectToDisc(String serverIP, long serverPort, long jobId, byte[] job) {
+      String filename = serverIP + "." + serverPort + "." + jobId.ToString();
+      
+      JobStorrageInfo info = new JobStorrageInfo { JobID = jobId, ServerIP = serverIP, ServerPort = serverPort, TimeFinished = DateTime.Now };
+      try {
+        Stream jobstream = File.Create("C:\\Program Files\\HeuristicLab 3.0\\plugins\\jobStorrage\\ "+filename + ".dat");
+        jobstream.Write(job, 0, job.Length);
+        StoredJobsList.Add(info);
+        jobstream.Close();
+        Logging.GetInstance().Info("JobStorrageManager", "Job " + info.JobID + " stored on the harddisc");
+      }
+      catch (Exception e) {
+        Console.WriteLine(e);
+      }       
+    }
+
+    public static void CheckAndSubmitJobsFromDisc() {
+      foreach (JobStorrageInfo info in StoredJobsList) {
+        if (WcfService.Instance.ConnState == NetworkEnum.WcfConnState.Loggedin && (info.ServerIP == WcfService.Instance.ServerIP && info.ServerPort == WcfService.Instance.ServerPort)) {
+          Logging.GetInstance().Info("JobStorrageManager", "Sending stored job " + info.JobID + " to the server");
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Security;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Client.Core")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("390a4020-8f30-4c57-b039-6f3647df86b0")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,62 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Client.Core.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("00000000-0000-0000-0000-000000000000")]
+        public global::System.Guid Guid {
+            get {
+                return ((global::System.Guid)(this["Guid"]));
+            }
+            set {
+                this["Guid"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("")]
+        public string ServerIP {
+            get {
+                return ((string)(this["ServerIP"]));
+            }
+            set {
+                this["ServerIP"] = value;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("0")]
+        public int ServerPort {
+            get {
+                return ((int)(this["ServerPort"]));
+            }
+            set {
+                this["ServerPort"] = value;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,15 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Client.Core.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="Guid" Type="System.Guid" Scope="User">
+      <Value Profile="(Default)">00000000-0000-0000-0000-000000000000</Value>
+    </Setting>
+    <Setting Name="ServerIP" Type="System.String" Scope="User">
+      <Value Profile="(Default)" />
+    </Setting>
+    <Setting Name="ServerPort" Type="System.Int32" Scope="User">
+      <Value Profile="(Default)">0</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Settings.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Settings.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/Settings.cs	(revision 1270)
@@ -0,0 +1,28 @@
+﻿namespace HeuristicLab.Hive.Client.Core.Properties {
+    
+    
+    // This class allows you to handle specific events on the settings class:
+    //  The SettingChanging event is raised before a setting's value is changed.
+    //  The PropertyChanged event is raised after a setting's value is changed.
+    //  The SettingsLoaded event is raised after the setting values are loaded.
+    //  The SettingsSaving event is raised before the setting values are saved.
+    public sealed partial class Settings {
+        
+        public Settings() {
+            // // To add event handlers for saving and changing settings, uncomment the lines below:
+            //
+            // this.SettingChanging += this.SettingChangingEventHandler;
+            //
+            // this.SettingsSaving += this.SettingsSavingEventHandler;
+            //
+        }
+        
+        private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
+            // Add code to handle the SettingChangingEvent event here.
+        }
+        
+        private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
+            // Add code to handle the SettingsSaving event here.
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.Core/app.config	(revision 1270)
@@ -0,0 +1,21 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.Hive.Client.Core.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <userSettings>
+        <HeuristicLab.Hive.Client.Core.Properties.Settings>
+            <setting name="Guid" serializeAs="String">
+                <value>00000000-0000-0000-0000-000000000000</value>
+            </setting>
+            <setting name="ServerIP" serializeAs="String">
+                <value />
+            </setting>
+            <setting name="ServerPort" serializeAs="String">
+                <value>0</value>
+            </setting>
+        </HeuristicLab.Hive.Client.Core.Properties.Settings>
+    </userSettings>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/ExecutionEnginePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/ExecutionEnginePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/ExecutionEnginePlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Client.ExecutionEngine {
+  [ClassInfo(Name = "HeuristicLab.Hive.Client.ExecutionEngine-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Client.ExecutionEngine-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Hive.Client.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class ExecutionEnginePlugin: PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/Executor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/Executor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/Executor.cs	(revision 1270)
@@ -0,0 +1,120 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Client.Common;
+using System.Xml;
+using System.Xml.Serialization;
+using System.IO;
+using HeuristicLab.Core;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Client.ExecutionEngine {
+  public class Executor: MarshalByRefObject {
+    public long JobId { get; set; }
+    public IJob Job { get; set; }
+    public MessageContainer.MessageType CurrentMessage { get; set; }
+    public MessageQueue Queue { get; set; }
+    public bool Running {
+      get {
+        return Job.Running;
+      }
+    }
+    public double Progress {
+      get {
+        return Job.Progress;
+      }
+    }
+
+    public DateTime CreationTime { get; set; }
+
+    public void Start(byte[] serializedJob) {
+      CreationTime = DateTime.Now;
+      Job = (IJob)PersistenceManager.RestoreFromGZip(serializedJob);
+      //debug
+      //Job = new TestJob();
+      Job.JobStopped += new EventHandler(Job_JobStopped);
+      Job.Start();
+    }
+
+    public void Abort() {
+      CurrentMessage = MessageContainer.MessageType.AbortJob;
+      Job.Stop();      
+    }
+
+    void Job_JobStopped(object sender, EventArgs e) {
+      if (CurrentMessage == MessageContainer.MessageType.NoMessage)
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.FinishedJob, JobId));
+      else if (CurrentMessage == MessageContainer.MessageType.RequestSnapshot)
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.SnapshotReady, JobId));
+      else if (CurrentMessage == MessageContainer.MessageType.AbortJob)
+        Queue.AddMessage(new MessageContainer(MessageContainer.MessageType.JobAborted, JobId));
+    }
+
+    public byte[] GetSnapshot() {
+      //if the job is still running, something went VERY bad.
+      if (Job.Running) {
+        return null;
+      } else {
+        // Clear the Status message
+        CurrentMessage = MessageContainer.MessageType.NoMessage;
+        // Pack the whole job inside an xml document
+        byte[] job = SerializeJobObject();        
+        // Restart the job
+        Job.Start();
+        // Return the Snapshot
+        return job;
+      }
+    }
+
+    public byte[] GetFinishedJob() {
+      //Job isn't finished!
+      if (Job.Running) {
+        return null;
+      } else {
+        return SerializeJobObject();
+      }
+    }
+
+
+    public void RequestSnapshot() {
+      CurrentMessage = MessageContainer.MessageType.RequestSnapshot;
+      Job.Stop();
+    }
+
+    private byte[] SerializeJobObject() {
+      return PersistenceManager.SaveToGZip(Job);
+    }
+
+    private void RestoreJobObject(byte[] sjob) {
+      Job = (IJob)PersistenceManager.RestoreFromGZip(sjob);
+    }
+
+    public Executor() {
+      CurrentMessage = MessageContainer.MessageType.NoMessage;
+      Job = new TestJob();
+    }    
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/HeuristicLab.Hive.Client.ExecutionEngine.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/HeuristicLab.Hive.Client.ExecutionEngine.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/HeuristicLab.Hive.Client.ExecutionEngine.csproj	(revision 1270)
@@ -0,0 +1,116 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{1605256A-1CB3-44AB-AAFF-577093EE5789}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Client.ExecutionEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Client.ExecutionEngine-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Executor.cs" />
+    <Compile Include="ExecutionEnginePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Client.Common\HeuristicLab.Hive.Client.Common.csproj">
+      <Project>{89F4BC52-C174-481E-9BD2-3814171020E8}</Project>
+      <Name>HeuristicLab.Hive.Client.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Client.Communication\HeuristicLab.Hive.Client.Communication.csproj">
+      <Project>{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}</Project>
+      <Name>HeuristicLab.Hive.Client.Communication</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.JobBase\HeuristicLab.Hive.JobBase.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Client.ExecutionEngine/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// 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.Hive.Client.ExecutionEngine")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ApplicationConstants.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ApplicationConstants.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ApplicationConstants.cs	(revision 1270)
@@ -0,0 +1,85 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts {
+  public class ApplicationConstants {
+
+    public static int HEARTBEAT_MAX_DIF = 30; // value in seconds
+
+    public static string RESPONSE_SERVERCONSOLE_LOGIN_SUCCESS = "Logged in";
+    public static string RESPONSE_SERVERCONSOLE_LOGIN_FAILED = "Login failed";
+
+    public static string RESPONSE_USERROLE_GET_ALL_USERS = "UserRole.GetAllUsers";
+    public static string RESPONSE_USERROLE_USER_EXISTS_ALLREADY = "UserRole.UserExistsAllready";
+    public static string RESPONSE_USERROLE_USER_SUCCESSFULLY_ADDED = "UserRole.UserSuccessfullyAdded";
+    public static string RESPONSE_USERROLE_USER_DOESNT_EXIST = "UserRole.UserDoesntExist";
+    public static string RESPONSE_USERROLE_USER_REMOVED = "UserRole.UserRemoved";
+    public static string RESPONSE_USERROLE_USERGROUP_EXISTS_ALLREADY = "UserRole.UsergroupExistsAllready";
+    public static string RESPONSE_USERROLE_USERGROUP_ADDED = "UserRole.UserGroupAdded";
+    public static string RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST = "UserRole.UserGroupDoesntExist";
+    public static string RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST = "UserRole.PermissionOwnerDoesntExist";
+    public static string RESPONSE_USERROLE_PERMISSIONOWNER_REMOVED = "UserRole.PermissionOwnerRemoved";
+    public static string RESPONSE_USERROLE_PERMISSIONOWNER_ADDED = "UserRole.PermissionOwnerAdded";
+    public static string RESPONSE_USERROLE_GET_ALL_USERGROUPS = "UserRole.AllUserGroupsReturned";
+    public static string RESPONSE_USERROLE_ID_MUST_NOT_BE_SET = "UserRole.IdMustNotBeSet";
+    public static string RESPONSE_USERROLE_USERGROUP_ADDED_TO_USERGROUP = "UserRole.UserGroupAddedToUserGroup";
+    public static string RESPONSE_USERROLE_USERNAME_EXISTS_ALLREADY = "UserRole.UsernameExistsAllready";
+
+    public static string RESPONSE_CLIENT_GET_ALL_CLIENTS = "Client.GetAllClients";
+    public static string RESPONSE_CLIENT_GET_ALL_CLIENTGROUPS = "Client.GetAllClientGroups";
+    public static string RESPONSE_CLIENT_ID_MUST_NOT_BE_SET = "Client.IdMustNotBeSet";
+    public static string RESPONSE_CLIENT_CLIENTGROUP_ADDED = "Client.ClientGroupAdded";
+    public static string RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST = "Client.ClientGroupDoesntExist";
+    public static string RESPONSE_CLIENT_RESOURCE_ADDED_TO_GROUP = "Client.ResourceAddedToGroup";
+    public static string RESPONSE_CLIENT_RESOURCE_REMOVED = "Client.ResourceRemoved";
+    public static string RESPONSE_CLIENT_RESOURCE_NOT_FOUND = "Client.ResourceNotFound";
+    public static string RESPONSE_CLIENT_PERMISSIONOWNER_DOESNT_EXIST = "Client.PermissionOwnerDoesntExist";
+
+    public static string RESPONSE_COMMUNICATOR_HARDBEAT_RECEIVED = "Communicator.HeardbeatReceived";
+    public static string RESPONSE_COMMUNICATOR_JOB_PULLED = "Communicator.JobPulled";
+    public static string RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED = "Communicator.JobResultReceived";
+    public static string RESPONSE_COMMUNICATOR_LOGIN_USER_ALLREADY_ONLINE = "Communicator.LoginUserAllreadyOnline";
+    public static string RESPONSE_COMMUNICATOR_LOGIN_SUCCESS = "Communicator.LoginSuccess";
+    public static string RESPONSE_COMMUNICATOR_LOGOUT_CLIENT_NOT_REGISTERED = "Communicator.LogoutClientNotRegistered";
+    public static string RESPONSE_COMMUNICATOR_LOGOUT_SUCCESS = "Communicator.LogoutSuccess";
+    public static string RESPONSE_COMMUNICATOR_NO_JOBS_LEFT = "Communicator.NoJobsLeft";
+    public static string RESPONSE_COMMUNICATOR_ID_MUST_NOT_BE_SET = "Communicator.IdMustNotBeSet";
+    public static string RESPONSE_COMMUNICATOR_NO_JOB_WITH_THIS_ID = "Communicator.NoJobWithThisId";
+    public static string RESPONSE_COMMUNICATOR_WRONG_JOB_STATE = "Communicator.WrongJobState";
+    public static string RESPONSE_COMMUNICATOR_USER_NOT_LOGGED_IN = "Communicator.UserNotLoggedIn";
+    public static string RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED = "Communicator.JobIsNotBeenigCalculated";
+    public static string RESPONSE_COMMUNICATOR_WRONG_CLIENT_FOR_JOB = "Communicator.WrongClientForJob";
+
+    public static string RESPONSE_JOB_ALL_JOBS = "Job.AllJobs";
+    public static string RESPONSE_JOB_ID_MUST_NOT_BE_SET = "Job.IdMustNotBeSet";
+    public static string RESPONSE_JOB_JOB_ADDED = "Job.JobAdded";
+    public static string RESPONSE_JOB_JOB_NULL = "Job.JobNull";
+    public static string RESPONSE_JOB_JOB_DOESNT_EXIST = "JobDoesntExist";
+    public static string RESPONSE_JOB_JOB_REMOVED = "Job.JobRemoved";
+    public static string RESPONSE_JOB_JOBSTATE_MUST_BE_OFFLINE = "Job.JobStateMustBeOffline";
+    public static string RESPONSE_JOB_JOB_RESULT_SENT = "Job.JobResultSent";
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Client.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Client.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Client.cs	(revision 1270)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+                                   
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  public enum State { nullState, idle, calculating, offline, finished };
+
+  [DataContract]
+  public class ClientInfo : Resource {
+    [DataMember]
+    public long ClientInfoId { get; set; }
+    [DataMember]
+    public Guid ClientId { get; set; }
+    [DataMember]
+    public int NrOfCores { get; set; }
+    [DataMember]
+    public int CpuSpeedPerCore { get; set; }
+    [DataMember]
+    public int Memory { get; set; }
+    [DataMember]
+    public DateTime Login { get; set; }
+    [DataMember]
+    public State State { get; set; }
+    [DataMember]
+    public ClientConfig Config { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/ClientConfig.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/ClientConfig.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/ClientConfig.cs	(revision 1270)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class ClientConfig: HiveBaseObject {
+    [DataMember]
+    public String UpDownTimeCalendar { get; set; } // TODO define DataStructure
+    [DataMember]
+    public int HeartBeatIntervall { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/ClientGroup.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/ClientGroup.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/ClientGroup.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class ClientGroup : Resource {
+    [DataMember]
+    public List<Resource> Resources { get; set; }
+
+    public ClientGroup() {
+      Resources = new List<Resource>();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/GrantedPermissions.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/GrantedPermissions.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/GrantedPermissions.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  
+  [DataContract]
+  public class GrantedPermissions: HiveBaseObject {
+    [DataMember]
+    public Permission Permission { get; set; }
+    [DataMember]
+    public Resource Resource { get; set; }
+    [DataMember]
+    public PermissionOwner PermissionOwner { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/HeartBeatData.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/HeartBeatData.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/HeartBeatData.cs	(revision 1270)
@@ -0,0 +1,41 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class HeartBeatData {
+    [DataMember]
+    public Guid ClientId { get; set; }
+    [DataMember]
+    public int freeMemory { get; set; }
+    [DataMember]
+    public int freeCores { get; set; }
+    [DataMember]
+    public Dictionary<long, double> jobProgress { get; set; } // TODO: define Type 
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/HiveBaseObject.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/HiveBaseObject.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/HiveBaseObject.cs	(revision 1270)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  [DataContract]
+  public class HiveBaseObject: IHiveObject {
+    [DataMember]
+    public long Id { get; set; }
+
+    public override bool Equals(object obj) {
+      if (obj is IHiveObject)
+        return this.Id.Equals(
+          (obj as IHiveObject).Id);
+      else
+        return base.Equals(obj);
+    }
+
+    public override int GetHashCode() {
+      return this.Id.GetHashCode();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/IHiveObject.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/IHiveObject.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/IHiveObject.cs	(revision 1270)
@@ -0,0 +1,31 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+  public interface IHiveObject {
+    long Id { get; set;  }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Job.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Job.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Job.cs	(revision 1270)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class Job : HiveBaseObject {
+    [DataMember]
+    public State State { get; set; }
+    [DataMember]
+    public User User { get; set; }
+    [DataMember]
+    public ClientInfo Client { get; set; }
+    [DataMember]
+    public Job ParentJob { get; set; }
+    [DataMember]
+    public double Percentage { get; set; }
+    [DataMember]
+    public byte[] SerializedJob { get; set; }
+    [DataMember]
+    public DateTime DateCreated { get; set; }
+    [DataMember]
+    public DateTime DateCalculated { get; set; }
+    [DataMember]
+    public int Priority { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/JobResult.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/JobResult.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/JobResult.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class JobResult: HiveBaseObject {
+    [DataMember]
+    public Job Job { get; set; }
+    [DataMember]
+    public byte[] Result { get; set; } 
+    [DataMember]
+    public double Percentage { get; set; }
+    [DataMember]
+    public DateTime timestamp { get; set; }
+    [DataMember]
+    public ClientInfo Client { get; set; }
+    [DataMember]
+    public Exception Exception { get; set; }
+    [DataMember]
+    public DateTime DateFinished { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Permission.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Permission.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Permission.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class Permission: HiveBaseObject {
+    [DataMember]
+    public String Name { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/PermissionOwner.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/PermissionOwner.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/PermissionOwner.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class PermissionOwner: HiveBaseObject {
+    [DataMember]
+    public string Name { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Resource.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Resource.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/Resource.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class Resource: HiveBaseObject {
+    [DataMember]
+    public string Name { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/UpTimeStatistics.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/UpTimeStatistics.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/UpTimeStatistics.cs	(revision 1270)
@@ -0,0 +1,42 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class UpTimeStatistics: IHiveObject {
+    [DataMember]
+    public long Id { get; set; }
+    [DataMember]
+    public ClientInfo Client { get; set; }
+    [DataMember]
+    public DateTime Login { get; set; }
+    [DataMember]
+    public DateTime Logout { get; set; }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/User.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/User.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/User.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class User : PermissionOwner {
+    [DataMember]
+    public String Password { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/UserGroup.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/UserGroup.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/BusinessObjects/UserGroup.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.BusinessObjects {
+
+  [DataContract]
+  public class UserGroup : PermissionOwner {
+    [DataMember]
+    public IList<PermissionOwner> Members { get; set; }
+
+    public UserGroup() {
+      Members = new List<PermissionOwner>();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HeuristicLab.Hive.Contracts.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HeuristicLab.Hive.Contracts.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HeuristicLab.Hive.Contracts.csproj	(revision 1270)
@@ -0,0 +1,140 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Contracts</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Contracts-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ApplicationConstants.cs" />
+    <Compile Include="BusinessObjects\GrantedPermissions.cs" />
+    <Compile Include="BusinessObjects\ClientGroup.cs" />
+    <Compile Include="BusinessObjects\HeartBeatData.cs" />
+    <Compile Include="BusinessObjects\HiveBaseObject.cs" />
+    <Compile Include="BusinessObjects\IHiveObject.cs" />
+    <Compile Include="BusinessObjects\Job.cs" />
+    <Compile Include="BusinessObjects\JobResult.cs" />
+    <Compile Include="BusinessObjects\Permission.cs" />
+    <Compile Include="BusinessObjects\PermissionOwner.cs" />
+    <Compile Include="BusinessObjects\Resource.cs" />
+    <Compile Include="BusinessObjects\UpTimeStatistics.cs" />
+    <Compile Include="BusinessObjects\Client.cs" />
+    <Compile Include="BusinessObjects\ClientConfig.cs" />
+    <Compile Include="BusinessObjects\User.cs" />
+    <Compile Include="BusinessObjects\UserGroup.cs" />
+    <Compile Include="Interfaces\IClientFacade.cs" />
+    <Compile Include="Interfaces\IExecutionEngineFacade.cs" />
+    <Compile Include="ResponseObject.cs" />
+    <Compile Include="Interfaces\IClientManager.cs" />
+    <Compile Include="Interfaces\IJobManager.cs" />
+    <Compile Include="Interfaces\ILifecycleManager.cs" />
+    <Compile Include="Interfaces\IServerConsoleFacade.cs" />
+    <Compile Include="Interfaces\ITransactionManager.cs" />
+    <Compile Include="Interfaces\IUserRoleManager.cs" />
+    <Compile Include="MessageContainer.cs" />
+    <Compile Include="ResponseJob.cs" />
+    <Compile Include="HiveContractPlugin.cs" />
+    <Compile Include="Interfaces\IClientCommunicator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Response.cs" />
+    <Compile Include="ResponseHB.cs" />
+    <Compile Include="ResponseList.cs" />
+    <Compile Include="ResponseResultReceived.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="HiveServerMessages.resx" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HiveContractPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HiveContractPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HiveContractPlugin.cs	(revision 1270)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [ClassInfo(Name = "HeuristicLab.Hive.Contracts-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Contracts-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HiveServerContracts : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HiveServerMessages.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HiveServerMessages.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/HiveServerMessages.resx	(revision 1270)
@@ -0,0 +1,240 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="Client.GetAllClientGroups" xml:space="preserve">
+    <value>All ClientGroups returned</value>
+  </data>
+  <data name="Client.GetAllClients" xml:space="preserve">
+    <value>All Clients returned</value>
+  </data>
+  <data name="Communicator.HeardbeatReceived" xml:space="preserve">
+    <value>Heartbeat received</value>
+  </data>
+  <data name="Communicator.JobPulled" xml:space="preserve">
+    <value>Job sent</value>
+  </data>
+  <data name="Communicator.JobResultReceived" xml:space="preserve">
+    <value>JobResult received, thanks for calculating</value>
+  </data>
+  <data name="Communicator.LoginClientNotRegistered" xml:space="preserve">
+    <value>Sorry this client was not registered yet</value>
+  </data>
+  <data name="Communicator.LoginSuccess" xml:space="preserve">
+    <value>The Login was successfull</value>
+  </data>
+  <data name="Communicator.LogoutSuccess" xml:space="preserve">
+    <value>You where logged out successfully. Good bye</value>
+  </data>
+  <data name="Communicator.LogoutUserAllreadyOnline" xml:space="preserve">
+    <value>A User with this GUID is allready logged in</value>
+  </data>
+  <data name="UserRole.AllUserGroupsReturned" xml:space="preserve">
+    <value>All UserGroups returned</value>
+  </data>
+  <data name="UserRole.GetAllUsers" xml:space="preserve">
+    <value>All Users returned</value>
+  </data>
+  <data name="UserRole.PermissionOwnerAdded" xml:space="preserve">
+    <value>PermissionOwner successfully added</value>
+  </data>
+  <data name="UserRole.PermissionOwnerDoesntExist" xml:space="preserve">
+    <value>PermissionOwner doesnt exist</value>
+  </data>
+  <data name="UserRole.PermissionOwnerRemoved" xml:space="preserve">
+    <value>PermissionOwner successfully removed</value>
+  </data>
+  <data name="UserRole.UserDoesntExist" xml:space="preserve">
+    <value>Sorry, but this user doesn't exist</value>
+  </data>
+  <data name="UserRole.UserExistsAllready" xml:space="preserve">
+    <value>Sorry, but a user with this name exists allready in database</value>
+  </data>
+  <data name="UserRole.UserGroupAdded" xml:space="preserve">
+    <value>UserGroup successfully added to database</value>
+  </data>
+  <data name="UserRole.UsergroupExistsAllready" xml:space="preserve">
+    <value>The UserGroup exists allready</value>
+  </data>
+  <data name="UserRole.UserRemoved" xml:space="preserve">
+    <value>User sucessfully removed from database</value>
+  </data>
+  <data name="UserRole.UserSuccessfullyAdded" xml:space="preserve">
+    <value>User successfully added to database</value>
+  </data>
+  <data name="Client.ClientGroupAdded" xml:space="preserve">
+    <value>ClientGroup successfully added</value>
+  </data>
+  <data name="Client.ClientGroupDoesntExist" xml:space="preserve">
+    <value>The specified ClientGroup doesn't exist</value>
+  </data>
+  <data name="Client.IdMustNotBeSet" xml:space="preserve">
+    <value>In this context the id must not be set</value>
+  </data>
+  <data name="Client.ResourceAddedToGroup" xml:space="preserve">
+    <value>Resource successfully added to ClientGroup</value>
+  </data>
+  <data name="Client.ResourceRemoved" xml:space="preserve">
+    <value>Resource successfully removed from ClientGroup</value>
+  </data>
+  <data name="UserRole.IdMustNotBeSet" xml:space="preserve">
+    <value>In this context the id must not be set</value>
+  </data>
+  <data name="Job.AllJobs" xml:space="preserve">
+    <value>All Jobs returned</value>
+  </data>
+  <data name="Job.IdMustNotBeSet" xml:space="preserve">
+    <value>Id must not be set in this context</value>
+  </data>
+  <data name="Job.JobAdded" xml:space="preserve">
+    <value>Job successfully added to database</value>
+  </data>
+  <data name="Job.JobNull" xml:space="preserve">
+    <value>The job you sent was null</value>
+  </data>
+  <data name="Job.JobRemoved" xml:space="preserve">
+    <value>Job successfully removed</value>
+  </data>
+  <data name="JobDoesntExist" xml:space="preserve">
+    <value>The specified job doesn't exist</value>
+  </data>
+  <data name="UserRole.UsernameExistsAllready" xml:space="preserve">
+    <value>A user with this username exists allready</value>
+  </data>
+  <data name="Communicator.IdMustNotBeSet" xml:space="preserve">
+    <value>The id must not be set in this context</value>
+  </data>
+  <data name="Communicator.NoJobWithThisId" xml:space="preserve">
+    <value>There exists no job with this id</value>
+  </data>
+  <data name="Job.JobStateMustBeOffline" xml:space="preserve">
+    <value>The state of the job must be offline</value>
+  </data>
+  <data name="Communicator.UserNotLoggedIn" xml:space="preserve">
+    <value>User is not logged in, you must login before sending Heartbeats</value>
+  </data>
+  <data name="Communicator.JobIsNotBeenigCalculated" xml:space="preserve">
+    <value>There is no client registered to calculate this job</value>
+  </data>
+  <data name="Communicator.WrongClientForJob" xml:space="preserve">
+    <value>This client is not registered to calculate this job</value>
+  </data>
+  <data name="Job.JobResultSent" xml:space="preserve">
+    <value>Job Result sent successfully</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientCommunicator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientCommunicator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientCommunicator.cs	(revision 1270)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the facade for the client communication
+  /// </summary>
+  [ServiceContract]
+  public interface IClientCommunicator {
+    [OperationContract]
+    Response Login(ClientInfo clientInfo);
+    [OperationContract]
+    ResponseHB SendHeartBeat(HeartBeatData hbData);
+    [OperationContract]
+    ResponseJob PullJob(Guid clientId);
+    [OperationContract]
+    ResponseResultReceived SendJobResult(Guid clientId, 
+      long jobId, 
+      byte[] result, 
+      double percentage,
+      Exception exception,  
+      bool finished);
+    [OperationContract]
+    Response Logout(Guid clientId);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientFacade.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientFacade.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientFacade.cs	(revision 1270)
@@ -0,0 +1,30 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  public interface IClientFacade: IClientCommunicator {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IClientManager.cs	(revision 1270)
@@ -0,0 +1,51 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the faced for the management console
+  /// </summary>
+  [ServiceContract]
+  public interface IClientManager {
+    [OperationContract]
+    ResponseList<ClientInfo> GetAllClients();
+    [OperationContract]
+    [ServiceKnownType(typeof (Resource))]
+    [ServiceKnownType(typeof(ClientInfo))]
+    [ServiceKnownType(typeof(ClientGroup))]
+    ResponseList<ClientGroup> GetAllClientGroups();
+    [OperationContract]
+    Response AddClientGroup(ClientGroup clientGroup);
+    [OperationContract]
+    Response AddResourceToGroup(long clientGroupId, Resource resource);
+    [OperationContract]
+    Response DeleteResourceFromGroup(long clientGroupId, long resourceId);
+    [OperationContract]
+    ResponseList<UpTimeStatistics> GetAllUpTimeStatistics();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IExecutionEngineFacade.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IExecutionEngineFacade.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IExecutionEngineFacade.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  [ServiceContract]
+  public interface IExecutionEngineFacade {
+    [OperationContract]
+    Response AddJob(Job job);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IJobManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IJobManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IJobManager.cs	(revision 1270)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the facade for the Job Manager used by the Management Console
+  /// </summary>
+  [ServiceContract]
+  public interface IJobManager {
+    [OperationContract]
+    ResponseList<Job> GetAllJobs();
+    [OperationContract]
+    ResponseObject<Job> AddNewJob(Job job);
+    [OperationContract]
+    Response RemoveJob(long jobId);
+    [OperationContract]
+    ResponseObject<JobResult> GetLastJobResultOf(long jobId);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/ILifecycleManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/ILifecycleManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/ILifecycleManager.cs	(revision 1270)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {    
+  /// <summary>
+  /// Manages the lifecycle of the application
+  /// </summary>
+  public interface ILifecycleManager {    
+    /// <summary>
+    /// Initializes the application
+    /// </summary>
+    void Init();
+
+    /// <summary>
+    /// The server heartbeat
+    /// </summary>
+    void RegisterHeartbeat(EventHandler handler);
+
+    /// <summary>
+    /// The startup event
+    /// </summary>
+    void RegisterStartup(EventHandler handler);
+
+    /// <summary>
+    /// The shutdown event
+    /// </summary>
+    void RegisterShutdown(EventHandler handler);
+
+    /// <summary>
+    /// Gets the transaction manager
+    /// </summary>
+    /// <returns></returns>
+    ITransactionManager GetTransactionManager();
+
+    /// <summary>
+    /// Shuts the application down
+    /// </summary>
+    void Shutdown();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IServerConsoleFacade.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IServerConsoleFacade.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IServerConsoleFacade.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// Facade for the server management console
+  /// </summary>
+  [ServiceContract(SessionMode=SessionMode.Required)]
+  public interface IServerConsoleFacade : IClientManager, 
+    IJobManager, 
+    IUserRoleManager {
+    [OperationContract]
+    Response Login(String username, String password); 
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/ITransactionManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/ITransactionManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/ITransactionManager.cs	(revision 1270)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// Transaction manager for the DB access layer
+  /// </summary>
+  public interface ITransactionManager {
+    /// <summary>
+    /// This event is fired when an update occurs
+    /// </summary>
+    event EventHandler OnUpdate; 
+
+    /// <summary>
+    /// Enables the auto update of the DB
+    /// </summary>
+    /// <param name="interval"></param>
+    void EnableAutoUpdate(TimeSpan interval);
+
+    /// <summary>
+    /// Disables the auto update of the DB
+    /// </summary>
+    void DisableAutoUpdate();
+
+    /// <summary>
+    /// Update the DB from the cache
+    /// </summary>
+    void UpdateDB();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IUserRoleManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IUserRoleManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Interfaces/IUserRoleManager.cs	(revision 1270)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts.Interfaces {
+  /// <summary>
+  /// This is the facade for the User/Role Manager used by the Management Console
+  /// </summary>
+  [ServiceContract]
+  public interface IUserRoleManager {
+    [OperationContract]
+    ResponseList<User> GetAllUsers();
+    [OperationContract]
+    ResponseObject<User> AddNewUser(User user);
+    [OperationContract]
+    Response RemoveUser(long userId);
+    [OperationContract]
+    ResponseObject<UserGroup> AddNewUserGroup(UserGroup userGroup);
+    [OperationContract]
+    Response RemoveUserGroup(long groupId);
+    [OperationContract]
+    [ServiceKnownType(typeof(PermissionOwner))]
+    [ServiceKnownType(typeof(User))]
+    [ServiceKnownType(typeof(UserGroup))]
+    ResponseList<UserGroup> GetAllUserGroups();
+    [OperationContract]
+    Response AddUserToGroup(long groupId, long userId);
+    [OperationContract]
+    Response AddUserGroupToGroup(long groupId, long groupToAddId);
+    [OperationContract]
+    Response RemovePermissionOwnerFromGroup(long groupId, long userId);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/MessageContainer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/MessageContainer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/MessageContainer.cs	(revision 1270)
@@ -0,0 +1,50 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Contracts {
+  /// <summary>
+  /// The MessageContainer is a container class for Messages. Its two parts are:
+  /// the actual message itself and the JobId, refered by the message
+  /// </summary>
+  [Serializable]
+  public class MessageContainer {
+
+    public enum MessageType { FetchJob, AbortJob, JobAborted, RequestSnapshot, FinishedJob, NoMessage, SnapshotReady, Shutdown };
+
+    public MessageType Message { get; set; }
+    public long JobId { get; set; }
+
+    public MessageContainer(MessageType message) {
+      Message = message;
+      JobId = 0;
+    }
+    public MessageContainer(MessageType message, long jobId) {
+      Message = message;
+      JobId = jobId;
+    }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// 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.Hive.Contracts")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Response.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Response.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/Response.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts {
+  /// <summary>
+  /// Server response class
+  /// </summary>
+  [DataContract]
+  public class Response {
+    [DataMember]
+    public bool Success { get; set; }
+    [DataMember]
+    public string StatusMessage { get; set; } 
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseHB.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseHB.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseHB.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts {
+
+
+  /// <summary>
+  /// Response Heartbeat class
+  /// Return value to hearbeats sent by the client
+  /// </summary>
+  [DataContract]
+  public class ResponseHB : Response {
+    [DataMember]
+    public List<MessageContainer> ActionRequest { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseJob.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseJob.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseJob.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts {
+
+  /// <summary>
+  /// Response Job class
+  /// If a client pulls a Job from the server he gets a ResponseJob as answer
+  /// </summary>
+  [DataContract]
+  public class ResponseJob : Response {
+    [DataMember]
+    public Job Job { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseList.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseList.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseList.cs	(revision 1270)
@@ -0,0 +1,38 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+using System.ServiceModel;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts {
+
+  [DataContract]
+  public class ResponseList<T> : Response {
+    [DataMember]
+    public IList<T> List { get; set; }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseObject.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseObject.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseObject.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+
+namespace HeuristicLab.Hive.Contracts {
+
+  [DataContract]
+  public class ResponseObject<T> : Response {
+    [DataMember]
+    public T Obj { get; set; }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseResultReceived.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseResultReceived.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Contracts/ResponseResultReceived.cs	(revision 1270)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.Serialization;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Contracts {
+  [DataContract]
+  public class ResponseResultReceived : Response {
+    [DataMember]
+    public long JobId { get; set; }
+    [DataMember]
+    public bool finished { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/HeuristicLab.Hive.JobBase.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/HeuristicLab.Hive.JobBase.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/HeuristicLab.Hive.JobBase.csproj	(revision 1270)
@@ -0,0 +1,86 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{21187322-52DD-4243-80A4-A85F0263E63B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.JobBase</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.JobBase-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interfaces\IJob.cs" />
+    <Compile Include="JobBase.cs" />
+    <Compile Include="JobPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="TestJob.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/Interfaces/IJob.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/Interfaces/IJob.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/Interfaces/IJob.cs	(revision 1270)
@@ -0,0 +1,13 @@
+﻿using System;
+using HeuristicLab.Core;
+namespace HeuristicLab.Hive.JobBase {
+  public interface IJob: IStorable {
+    event EventHandler JobStopped;
+    long JobId { get; set; }
+    double Progress { get; set; }
+    void Run();
+    bool Running { get; set; }
+    void Start();
+    void Stop();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/JobBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/JobBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/JobBase.cs	(revision 1270)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Hive.JobBase {
+  [Serializable]
+  abstract public class JobBase : StorableBase, IJob {
+
+    private Thread thread = null;
+    public event EventHandler JobStopped;
+    
+    public long JobId { get; set; }    
+    public double Progress { get; set; }        
+    public bool Running { get; set; }
+    
+    protected bool abort = false;    
+
+    abstract public void Run();
+
+    public void Start() {
+      thread = new Thread(new ThreadStart(Run));
+      thread.Start();
+      Running = true;
+    }
+
+    public void Stop() {
+      abort = true;        
+    }
+
+    protected void OnJobStopped() {
+      Console.WriteLine("Job has finished");
+      Running = false;
+      if (JobStopped != null)
+        JobStopped(this, new EventArgs());
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+      XmlNode progr = document.CreateNode(XmlNodeType.Element, "Progress", null);
+      progr.InnerText = Convert.ToString(Progress);
+
+      node.AppendChild(progr);
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      XmlNode progr = node.SelectSingleNode("Progress");
+      Progress = Convert.ToDouble(progr.InnerText);
+    }
+
+    public JobBase() {    
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/JobPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/JobPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/JobPlugin.cs	(revision 1270)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.JobBase {
+  [ClassInfo(Name = "HeuristicLab.Hive.JobBase-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.JobBase-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class JobBasePlugin: PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,61 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// 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.Hive.Job")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("B6BA196A-F2E3-4de2-AE8A-02D4995F8B57")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/TestJob.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/TestJob.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.JobBase/TestJob.cs	(revision 1270)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Diagnostics;
+using System.Xml;
+using System.Threading;
+using System.IO;
+using System.Security.Permissions;
+
+namespace HeuristicLab.Hive.JobBase {
+  [Serializable]
+  public class TestJob: JobBase {
+
+    private int runValue = 0;
+
+    public override void Run() {
+      int max = 10;
+      while(runValue < max && abort == false) {
+        //for (int y = 0; y < Int32.MaxValue; y++) ;
+        Thread.Sleep(2000);   
+        if (abort == true) {            
+          Debug.WriteLine("Job Abort Processing");
+          break;
+        }
+        runValue++;
+        Progress = (double)runValue / max;        
+        Debug.WriteLine("Iteration " + runValue + " done");
+        Debug.WriteLine("Progress " + Progress*100 + " Percent");
+      }      
+      OnJobStopped();
+    }
+    public override System.Xml.XmlNode GetXmlNode(string name, System.Xml.XmlDocument document, IDictionary<Guid, HeuristicLab.Core.IStorable> persistedObjects) {      
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+    
+      XmlNode startValue = document.CreateNode(XmlNodeType.Element, "StartValue", null);
+      startValue.InnerText = Convert.ToString(runValue);
+      
+      node.AppendChild(startValue);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, HeuristicLab.Core.IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      XmlNode startValue = node.SelectSingleNode("StartValue");
+      runValue = Convert.ToInt32(startValue.InnerText);
+    }
+
+    public TestJob() {
+    }
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/CachedDataAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/CachedDataAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/CachedDataAdapter.cs	(revision 1270)
@@ -0,0 +1,273 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Data;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  abstract class CachedDataAdapter<AdapterT, ObjT, RowT, CacheT> :
+    DataAdapterBase<AdapterT, ObjT, RowT>,
+    ICachedDataAdapter
+    where CacheT : System.Data.TypedTableBase<RowT>, new()
+    where AdapterT : new()
+    where RowT : System.Data.DataRow
+    where ObjT : IHiveObject, new() {
+    protected static CacheT cache =
+      new CacheT();
+
+    private static bool cacheFilled = false;
+
+    private static ReaderWriterLockSlim cacheLock =
+      new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+
+    protected ICollection<ICachedDataAdapter> parentAdapters =
+      new List<ICachedDataAdapter>();
+
+    protected CachedDataAdapter() {
+      cacheLock.EnterWriteLock();
+
+      if (!cacheFilled) {
+        FillCache();
+        cacheFilled = true;
+      }
+
+      cacheLock.ExitWriteLock();
+
+      ServiceLocator.GetTransactionManager().OnUpdate +=
+        new EventHandler(CachedDataAdapter_OnUpdate);
+    }
+
+    protected virtual RowT FindSingleRow(Selector dbSelector,
+      Selector cacheSelector) {
+      cacheLock.EnterReadLock();
+      
+      RowT row =
+         FindSingleRow(cacheSelector);
+
+      //not in cache
+      if (row == null) {
+        row =
+          FindSingleRow(dbSelector);
+      }
+
+      cacheLock.ExitReadLock();
+
+      return row;
+    }
+
+    protected virtual IEnumerable<RowT> FindMultipleRows(Selector dbSelector,
+        Selector cacheSelector) {
+      cacheLock.EnterReadLock();
+
+      IList<RowT> result =
+         new List<RowT>(cacheSelector());
+
+      IEnumerable<RowT> result2 =
+          dbSelector();
+
+      foreach (RowT row in result2) {
+        if (!IsCached(row)) {
+          result.Add(row);
+        }
+      }
+
+      cacheLock.ExitReadLock();
+
+      return result;
+    }
+
+    protected virtual ObjT FindSingle(Selector dbSelector,
+      Selector cacheSelector) {
+      ObjT obj = default(ObjT);
+
+      cacheLock.EnterReadLock();
+
+      RowT row = FindSingleRow(dbSelector, cacheSelector);
+
+      if (row != null) {
+        obj = new ObjT();
+        obj = Convert(row, obj);
+      }
+
+      cacheLock.ExitReadLock();
+
+      return obj;
+    }
+
+    protected virtual ICollection<ObjT> FindMultiple(Selector dbSelector,
+      Selector cacheSelector) {
+      cacheLock.EnterReadLock();
+
+      ICollection<ObjT> result =
+        FindMultiple(cacheSelector);
+
+      ICollection<ObjT> resultDb =
+        FindMultiple(dbSelector);
+
+      cacheLock.ExitReadLock();
+
+      foreach (ObjT obj in resultDb) {
+        if (!result.Contains(obj))
+          result.Add(obj);
+      }
+
+      return result;
+    }
+
+    protected abstract RowT InsertNewRowInCache(ObjT obj);
+
+    protected abstract void FillCache();
+
+    protected abstract void SynchronizeWithDb();
+
+    protected abstract bool PutInCache(ObjT obj);
+
+    protected abstract RowT FindCachedById(long id);
+
+    public void SyncWithDb() {
+      foreach (ICachedDataAdapter parent in this.parentAdapters) {        
+        parent.SyncWithDb();
+      }
+
+      cacheLock.EnterReadLock();
+
+      this.SynchronizeWithDb();
+
+      cacheLock.ExitReadLock();
+    }
+
+    void CachedDataAdapter_OnUpdate(object sender, EventArgs e) {
+      this.SyncWithDb();
+    }
+
+    protected virtual bool IsCached(RowT row) {
+      if (row == null)
+        return false;
+      else {
+        cacheLock.EnterReadLock();
+
+        bool cached = FindCachedById((long)row[row.Table.PrimaryKey[0]]) != null;
+
+        cacheLock.ExitReadLock();
+
+        return cached;
+      }
+    }
+
+    protected override RowT GetRowById(long id) {
+      cacheLock.EnterReadLock();
+
+      RowT row =
+        FindCachedById(id);
+
+      //not in cache
+      if (row == null)
+        row = FindSingleRow(
+          delegate() {
+            return FindById(id);
+          });
+
+      cacheLock.ExitReadLock();
+
+      return row;
+    }
+
+    private void AddToCache(RowT row) {
+      cacheLock.EnterWriteLock();
+
+      cache.ImportRow(row);
+      row.Table.Rows.Remove(row);
+
+      cacheLock.ExitWriteLock();
+    }
+
+    private RowT AddToCache(ObjT obj) {
+      cacheLock.EnterWriteLock();
+
+      RowT row =  InsertNewRowInCache(obj);
+
+      cacheLock.ExitWriteLock();
+
+      return row;
+    }
+
+    private void RemoveRowFromCache(RowT row) {
+      cacheLock.EnterWriteLock();
+
+      UpdateRow(row);
+
+      row.Table.Rows.Remove(row);     
+
+      cacheLock.ExitWriteLock();
+    }
+
+    public override void Update(ObjT obj) {
+      if (obj != null) {
+        RowT row = null;
+        long locked = default(long);
+
+        if (obj.Id != default(long)) {
+          LockRow(obj.Id);
+          locked = obj.Id;
+
+          row = GetRowById(obj.Id);
+        }
+
+        if (row == null) {
+          if (PutInCache(obj)) {
+            row = AddToCache(obj);
+          } else {
+            row = InsertNewRow(obj);
+          }
+
+          UpdateRow(row);
+          obj.Id = (long)row[row.Table.PrimaryKey[0]];
+        }
+
+        if (locked == default(long)) {
+          LockRow(obj.Id);
+          locked = obj.Id;
+        }
+
+        ConvertObj(obj, row);
+
+        if (!IsCached(row))
+          UpdateRow(row);
+
+        if (IsCached(row) &&
+            !PutInCache(obj)) {          
+          RemoveRowFromCache(row);
+        } else if (!IsCached(row) &&
+          PutInCache(obj)) {
+          AddToCache(row);
+        }
+
+        UnlockRow(locked);
+      }
+    }
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs	(revision 1270)
@@ -0,0 +1,293 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Linq.Expressions;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class ClientAdapter: 
+    CachedDataAdapter<
+      dsHiveServerTableAdapters.ClientTableAdapter, 
+      ClientInfo, 
+      dsHiveServer.ClientRow, 
+      dsHiveServer.ClientDataTable>,
+    IClientAdapter {
+    #region Fields
+    private IResourceAdapter resAdapter = null;
+
+    private IResourceAdapter ResAdapter {
+      get {
+        if (resAdapter == null)
+          resAdapter = ServiceLocator.GetResourceAdapter();
+
+        return resAdapter;
+      }
+    }
+
+    private IClientGroupAdapter clientGroupAdapter = null;
+
+    private IClientGroupAdapter ClientGroupAdapter {
+      get {
+        if (clientGroupAdapter == null) {
+          clientGroupAdapter = ServiceLocator.GetClientGroupAdapter();
+        }
+
+        return clientGroupAdapter;
+      }
+    }
+
+    private IJobAdapter jobAdapter = null;
+
+    private IJobAdapter JobAdapter {
+      get {
+        if (jobAdapter == null) {
+          jobAdapter = ServiceLocator.GetJobAdapter();
+        }
+
+        return jobAdapter;
+      }
+    }
+    #endregion
+
+    public ClientAdapter() {
+      parentAdapters.Add(this.ResAdapter as ICachedDataAdapter);
+    }
+
+    private void Preprocess(ClientInfo client) {
+      if (client != null && client.Id == default(long)) {
+        ClientInfo found = GetById(client.ClientId);
+        if (found != null)
+          client.Id = found.Id;
+      }
+    }
+
+    #region Overrides
+    protected override ClientInfo ConvertRow(dsHiveServer.ClientRow row, 
+      ClientInfo client) {
+      if(row != null && client != null) {      
+        /*Parent - resource*/
+        client.Id = row.ResourceId;
+        ResAdapter.GetById(client);
+
+        /*ClientInfo*/
+        if (!row.IsGUIDNull())
+          client.ClientId = row.GUID;
+        else
+          client.ClientId = Guid.Empty;
+       
+        if (!row.IsCPUSpeedNull())
+          client.CpuSpeedPerCore = row.CPUSpeed;
+        else
+          client.CpuSpeedPerCore = 0;
+
+        if (!row.IsMemoryNull())
+          client.Memory = row.Memory;
+        else
+          client.Memory = 0;
+
+        if (!row.IsLoginNull())
+          client.Login = row.Login;
+        else
+          client.Login = DateTime.MinValue;
+
+        if (!row.IsStatusNull())
+          client.State = (State)Enum.Parse(typeof(State), row.Status, true);
+        else
+          client.State = State.nullState;
+
+        if (!row.IsNumberOfCoresNull())
+          client.NrOfCores = row.NumberOfCores;
+        else
+          client.NrOfCores = 0;
+
+        //todo: config adapter (client.config)
+
+        return client;
+      }
+      else
+        return null;
+    }
+
+    protected override dsHiveServer.ClientRow ConvertObj(ClientInfo client,
+      dsHiveServer.ClientRow row) {
+      if (client != null && row != null) {      
+        row.GUID = client.ClientId;
+        row.CPUSpeed = client.CpuSpeedPerCore;
+        row.Memory = client.Memory;
+        row.Login = client.Login;
+        if (client.State != State.nullState)
+          row.Status = client.State.ToString();
+        else
+          row.SetStatusNull();
+        row.NumberOfCores = client.NrOfCores;
+
+        //todo: config adapter
+        /*if (client.Config != null)
+          row.ClientConfigId = client.Config.ClientConfigId;
+         else
+          row.ClientConfigId = null;*/
+      }
+
+      return row;
+    }
+
+    protected override void UpdateRow(dsHiveServer.ClientRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override dsHiveServer.ClientRow
+      InsertNewRow(ClientInfo client) {
+      dsHiveServer.ClientDataTable data =
+        new dsHiveServer.ClientDataTable();
+
+      dsHiveServer.ClientRow row = data.NewClientRow();
+      row.ResourceId = client.Id;
+      data.AddClientRow(row);
+
+      return row;
+    }
+
+    protected override dsHiveServer.ClientRow
+      InsertNewRowInCache(ClientInfo client) {
+      dsHiveServer.ClientRow row = cache.NewClientRow();
+      row.ResourceId = client.Id;
+      cache.AddClientRow(row);
+
+      return row;
+    }
+
+    protected override void FillCache() {
+      Adapter.FillByActive(cache);
+    }
+
+    protected override void SynchronizeWithDb() {
+      Adapter.Update(cache);
+    }
+
+    protected override bool PutInCache(ClientInfo obj) {
+      return (obj.State != State.offline && obj.State != State.nullState);
+    }
+
+    protected override IEnumerable<dsHiveServer.ClientRow>
+      FindById(long id) {
+      return Adapter.GetDataByResourceId(id);
+    }
+
+    protected override dsHiveServer.ClientRow
+      FindCachedById(long id) {
+      return cache.FindByResourceId(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.ClientRow>
+      FindAll() {
+      return FindMultipleRows(
+        new Selector(Adapter.GetData),
+        new Selector(cache.AsEnumerable<dsHiveServer.ClientRow>));
+    }
+
+    #endregion
+
+    #region IClientAdapter Members
+    public override void Update(ClientInfo client) {
+      if (client != null) {
+        Guid locked = Guid.Empty;
+        if (client.ClientId != Guid.Empty) {
+          LockRow(client.ClientId);
+          locked = client.ClientId;
+        }
+
+        Preprocess(client);
+
+        ResAdapter.Update(client);
+
+        base.Update(client);
+
+        if (locked != Guid.Empty) {
+          UnlockRow(locked);
+        }
+      }
+    }
+
+    public ClientInfo GetById(Guid clientId) {
+      return base.FindSingle(
+        delegate() {
+          return Adapter.GetDataById(clientId);
+        }, 
+        delegate() {
+          return from c in
+                     cache.AsEnumerable<dsHiveServer.ClientRow>()
+                   where !c.IsGUIDNull() && 
+                          c.GUID == clientId
+                   select c; 
+        });
+    }
+
+    public ClientInfo GetByName(string name) {
+      ClientInfo client = new ClientInfo();
+      Resource res =
+        ResAdapter.GetByName(name);
+
+      return GetById(res.Id);
+    }
+
+    public override bool Delete(ClientInfo client) {
+      bool success = false;
+      Guid locked = Guid.Empty;
+      
+      if (client != null) {
+        if (client.ClientId != Guid.Empty) {
+          LockRow(client.ClientId);
+          locked = client.ClientId;
+        }
+
+        Preprocess(client);
+
+        dsHiveServer.ClientRow row =
+          GetRowById(client.Id);
+
+        if (row != null) {
+          //Referential integrity with jobs - they are cached
+          ICollection<Job> jobs =
+            JobAdapter.GetJobsOf(client);
+          foreach (Job job in jobs) {
+            JobAdapter.Delete(job);
+          }
+
+          success = base.Delete(client) && 
+            ResAdapter.Delete(client);
+        }
+      }
+
+      if (locked != Guid.Empty) {
+        UnlockRow(locked);
+      }
+
+      return success;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs	(revision 1270)
@@ -0,0 +1,284 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Data;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class ClientGroupAdapter : 
+    DataAdapterBase<dsHiveServerTableAdapters.ClientGroupTableAdapter, 
+    ClientGroup, 
+    dsHiveServer.ClientGroupRow>, 
+    IClientGroupAdapter {
+    #region Fields
+    private dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter resourceClientGroupAdapter =
+      new dsHiveServerTableAdapters.ClientGroup_ResourceTableAdapter();
+
+    private IResourceAdapter resourceAdapter = null;
+
+    private IResourceAdapter ResAdapter {
+      get {
+        if (resourceAdapter == null)
+          resourceAdapter = ServiceLocator.GetResourceAdapter();
+
+        return resourceAdapter;
+      }
+    }
+
+    private IClientAdapter clientAdapter = null;
+
+    private IClientAdapter ClientAdapter {
+      get {
+        if (clientAdapter == null)
+          clientAdapter = ServiceLocator.GetClientAdapter();
+
+        return clientAdapter;
+      }
+    }
+    #endregion
+
+    #region Overrides
+    protected override ClientGroup ConvertRow(dsHiveServer.ClientGroupRow row,
+      ClientGroup clientGroup) {
+      if (row != null && clientGroup != null) {
+        /*Parent - Permission Owner*/
+        clientGroup.Id = row.ResourceId;
+        ResAdapter.GetById(clientGroup);
+
+        //first check for created references
+        dsHiveServer.ClientGroup_ResourceDataTable clientGroupRows =
+            resourceClientGroupAdapter.GetDataByClientGroupId(clientGroup.Id);
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in
+          clientGroupRows) {
+          Resource resource = null;
+
+          IEnumerable<Resource> resources =
+            from p in
+              clientGroup.Resources
+            where p.Id == resourceClientGroupRow.ResourceId
+            select p;
+          if (resources.Count<Resource>() == 1)
+            resource = resources.First<Resource>();
+
+          if (resource == null) {
+            Resource res =
+              ClientAdapter.GetById(resourceClientGroupRow.ResourceId);
+
+            if (res == null) {
+              //is a client group
+              res =
+                GetById(resourceClientGroupRow.ResourceId);
+            }
+
+            if (res != null)
+              clientGroup.Resources.Add(res);
+          }
+        }
+
+        //secondly check for deleted references
+        ICollection<Resource> deleted =
+          new List<Resource>();
+
+        foreach (Resource resource in clientGroup.Resources) {
+          dsHiveServer.ClientGroup_ResourceDataTable found =
+            resourceClientGroupAdapter.GetDataByClientGroupResourceId(
+            clientGroup.Id,
+            resource.Id);
+
+          if (found.Count != 1) {
+            deleted.Add(resource);
+          }
+        }
+
+        foreach (Resource resource in deleted) {
+          clientGroup.Resources.Remove(resource);
+        }
+
+        return clientGroup;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.ClientGroupRow ConvertObj(ClientGroup clientGroup,
+      dsHiveServer.ClientGroupRow row) {
+      if (clientGroup != null && row != null) {
+        row.ResourceId = clientGroup.Id;
+
+        //update references
+        foreach (Resource resource in clientGroup.Resources) {
+          //first update the member to make sure it exists in the DB
+          if (resource is ClientInfo) {
+            ClientAdapter.Update(resource as ClientInfo);
+          } else if (resource is ClientGroup) {
+            Update(resource as ClientGroup);
+          }
+
+          //secondly check for created references
+          dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow =
+            null;
+          dsHiveServer.ClientGroup_ResourceDataTable found =
+            resourceClientGroupAdapter.GetDataByClientGroupResourceId(
+              clientGroup.Id,
+              resource.Id);
+          if (found.Count == 1)
+            resourceClientGroupRow = found[0];
+
+          if (resourceClientGroupRow == null) {
+            resourceClientGroupRow =
+              found.NewClientGroup_ResourceRow();
+
+            resourceClientGroupRow.ResourceId =
+              resource.Id;
+            resourceClientGroupRow.ClientGroupId =
+              clientGroup.Id;
+
+            found.AddClientGroup_ResourceRow(resourceClientGroupRow);
+
+            resourceClientGroupAdapter.Update(
+              resourceClientGroupRow);
+          }
+        }
+
+        //thirdly check for deleted references
+        dsHiveServer.ClientGroup_ResourceDataTable clientGroupRows =
+          resourceClientGroupAdapter.GetDataByClientGroupId(clientGroup.Id);
+
+        ICollection<dsHiveServer.ClientGroup_ResourceRow> deleted =
+          new List<dsHiveServer.ClientGroup_ResourceRow>();
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in
+          clientGroupRows) {
+          Resource resource = null;
+
+          IEnumerable<Resource> resources =
+            from r in
+              clientGroup.Resources
+            where r.Id == resourceClientGroupRow.ResourceId
+            select r;
+
+          if (resources.Count<Resource>() == 1)
+            resource = resources.First<Resource>();
+
+          if (resource == null) {
+            deleted.Add(resourceClientGroupRow);
+          }
+        }
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow resourceClientGroupRow in deleted) {
+          resourceClientGroupRow.Delete();
+          resourceClientGroupAdapter.Update(resourceClientGroupRow);
+        }
+      }
+
+      return row;
+    }
+
+    protected override dsHiveServer.ClientGroupRow
+      InsertNewRow(ClientGroup group) {
+      dsHiveServer.ClientGroupDataTable data =
+         new dsHiveServer.ClientGroupDataTable();
+
+      dsHiveServer.ClientGroupRow row =
+        data.NewClientGroupRow();
+
+      row.ResourceId = group.Id;
+
+      data.AddClientGroupRow(row);
+      Adapter.Update(row);
+
+      return row;
+    }
+
+    protected override void
+      UpdateRow(dsHiveServer.ClientGroupRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override IEnumerable<dsHiveServer.ClientGroupRow>
+      FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.ClientGroupRow>
+      FindAll() {
+      return Adapter.GetData();
+    }
+    #endregion
+
+    #region IClientGroupAdapter Members
+    public override void Update(ClientGroup group) {
+      if (group != null) {
+        ResAdapter.Update(group);
+
+        base.Update(group);
+      }
+    }
+
+    public ClientGroup GetByName(string name) {
+      ClientGroup group = new ClientGroup();
+      Resource res =
+        ResAdapter.GetByName(name);
+
+      if (res != null) {
+        return GetById(res.Id);
+      }
+
+      return null;
+    }
+
+    public ICollection<ClientGroup> MemberOf(Resource resource) {
+      ICollection<ClientGroup> clientGroups =
+        new List<ClientGroup>();
+
+      if (resource != null) {
+        IEnumerable<dsHiveServer.ClientGroup_ResourceRow> clientGroupRows =
+         resourceClientGroupAdapter.GetDataByResourceId(resource.Id);
+
+        foreach (dsHiveServer.ClientGroup_ResourceRow clientGroupRow in
+          clientGroupRows) {
+          ClientGroup clientGroup =
+            GetById(clientGroupRow.ClientGroupId);
+          clientGroups.Add(clientGroup);
+        }
+      }
+
+      return clientGroups;
+    }
+
+    public override bool Delete(ClientGroup group) {
+      if (group != null) {
+        return base.Delete(group) && 
+          ResAdapter.Delete(group);
+      }
+
+      return false;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/DBSettings.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/DBSettings.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/DBSettings.cs	(revision 1270)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess.Properties {
+
+  internal sealed class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+    private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+    public static Settings Default {
+      get {
+        return defaultInstance;
+      }
+    }
+
+    private static String pw = "hive";
+    private static String un = "hive";
+    private static String address = "10.22.20.84";
+    private static String catalog = "HiveServer"; 
+
+    public static String GetConnString(String adress, String catalog, String un, String pw) {
+      return "Data Source=" + adress + ";Initial Catalog=" + catalog + ";MultipleActiveResultSets=True;" +
+        "Asynchronous Processing=True;Persist Security Info=True;User ID=" + un + ";Password=" + pw;
+    }
+
+    private static string connString =
+      GetConnString(address, catalog, un, pw);
+
+    [global::System.Configuration.ApplicationScopedSettingAttribute()]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+    public string HiveServerConnectionString {
+      get {
+        return connString;
+      }
+
+      private set {
+        connString = value;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/DataAdapterBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/DataAdapterBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/DataAdapterBase.cs	(revision 1270)
@@ -0,0 +1,229 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Data;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  abstract class DataAdapterBase<AdapterT, ObjT, RowT>
+    where AdapterT : new()
+    where RowT : System.Data.DataRow
+    where ObjT : IHiveObject, new() {
+
+    private static Mutex lockersMutex =
+      new Mutex();
+
+    private static IDictionary<object, Mutex> lockers =
+      new Dictionary<object, Mutex>();
+
+    private static IDictionary<object, int> lockCount =
+      new Dictionary<object, int>();
+
+    protected void LockRow(object id) {
+      Mutex rowLock = null;
+
+      /////begin critical section////
+      lockersMutex.WaitOne();
+
+      if (!lockers.ContainsKey(id)) {
+        lockers[id] = new Mutex();
+        lockCount[id] = 0;
+      }
+      rowLock = lockers[id];
+      lockCount[id]++;
+      
+      lockersMutex.ReleaseMutex();
+      /////end critical section////
+
+      rowLock.WaitOne();
+    }
+
+    protected void UnlockRow(object id) {
+      Mutex rowLock = lockers[id];
+      rowLock.ReleaseMutex();
+
+      /////begin critical section////
+      lockersMutex.WaitOne();
+
+      lockCount[id]--;
+      if (lockCount[id] == 0)
+        lockers.Remove(id);
+
+      lockersMutex.ReleaseMutex();
+      /////end critical section////
+    }
+    
+    protected AdapterT Adapter {
+      get {
+        return new AdapterT();
+      }
+    }
+
+    #region Abstract methods
+    protected abstract RowT ConvertObj(ObjT obj, RowT row);
+
+    protected abstract ObjT ConvertRow(RowT row, ObjT obj);
+
+    protected abstract RowT InsertNewRow(ObjT obj);
+
+    protected abstract void UpdateRow(RowT row);
+
+    protected abstract IEnumerable<RowT> FindById(long id);
+
+    protected abstract IEnumerable<RowT> FindAll();
+    #endregion
+
+    protected delegate IEnumerable<RowT> Selector();
+
+    protected ObjT Convert(RowT row, ObjT obj) {
+      try {
+        obj = ConvertRow(row, obj);
+        return obj;
+      }
+      catch (DeletedRowInaccessibleException) {
+        return default(ObjT);
+      }
+      catch (RowNotInTableException) {
+        return default(ObjT);
+      }
+    }
+
+    protected virtual RowT FindSingleRow(Selector selector) {
+      RowT row = default(RowT);
+
+      IEnumerable<RowT> found =
+        selector();
+
+      if (found.Count<RowT>() == 1)
+        row = found.First<RowT>();
+
+      return row;
+    }
+
+    protected virtual ObjT FindSingle(Selector selector) {
+      RowT row = FindSingleRow(selector);
+
+      if (row != null) {
+        ObjT obj = new ObjT();
+        obj = Convert(row, obj);
+
+        return obj;
+      } else {
+        return default(ObjT);
+      }
+    }
+
+    protected virtual ICollection<ObjT> FindMultiple(Selector selector) {
+      IEnumerable<RowT> found =
+        selector();
+
+      IList<ObjT> result =
+        new List<ObjT>();
+
+      foreach (RowT row in found) {
+        ObjT obj = new ObjT();
+        obj = Convert(row, obj);
+        if(obj != null)
+          result.Add(obj);
+      }
+
+      return result;
+    }
+
+    protected virtual RowT GetRowById(long id) {
+      return FindSingleRow(
+        delegate() {
+          return FindById(id);
+        });
+    }
+
+    public virtual void Update(ObjT obj) {
+      if (obj != null) {
+        RowT row = null;
+        long locked = default(long);
+        
+        if (obj.Id != default(long)) {
+           LockRow(obj.Id);
+           locked = obj.Id;
+
+           row = GetRowById(obj.Id);
+        }          
+
+        if (row == null) {
+          row = InsertNewRow(obj);
+          UpdateRow(row);
+
+          obj.Id = (long)row[row.Table.PrimaryKey[0]];
+        }
+
+        if (locked == default(long)) {
+          LockRow(obj.Id);
+          locked = obj.Id;
+        }
+
+        ConvertObj(obj, row);
+        UpdateRow(row);
+
+        UnlockRow(locked);
+      }
+    }
+
+    public virtual ObjT GetById(long id) {
+      return FindSingle(delegate() {
+        return FindById(id);
+      });
+    }
+
+    public virtual ICollection<ObjT> GetAll() {
+      return new List<ObjT>(
+        FindMultiple(
+          new Selector(FindAll)));
+    }
+
+    public virtual bool Delete(ObjT obj) {
+      bool success = false;
+      
+      if (obj != null) {
+        LockRow(obj.Id);
+
+        RowT row =
+          GetRowById(obj.Id);
+
+        if (row != null) {
+          row.Delete();
+          UpdateRow(row);
+
+          success = true;
+        }
+
+        UnlockRow(obj.Id);
+      }
+
+      return success;
+    }
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/HeuristicLab.Hive.Server.ADODataAccess.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/HeuristicLab.Hive.Server.ADODataAccess.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/HeuristicLab.Hive.Server.ADODataAccess.csproj	(revision 1270)
@@ -0,0 +1,145 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{715A9134-B6E4-4CB9-8A5A-E6601497565A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.ADODataAccess</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.ADODataAccess-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CachedDataAdapter.cs" />
+    <Compile Include="ClientAdapter.cs" />
+    <Compile Include="ClientGroupAdapter.cs" />
+    <Compile Include="DataAdapterBase.cs" />
+    <Compile Include="dsHiveServer.cs">
+      <DependentUpon>dsHiveServer.xsd</DependentUpon>
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="dsHiveServer.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>dsHiveServer.xsd</DependentUpon>
+    </Compile>
+    <Compile Include="HiveServerADODataAccessPlugin.cs" />
+    <Compile Include="ICachedDataAdapter.cs" />
+    <Compile Include="JobAdapter.cs" />
+    <Compile Include="JobResultsAdapter.cs" />
+    <Compile Include="PermissionOwnerAdapter.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+      <DependentUpon>Settings.settings</DependentUpon>
+    </Compile>
+    <Compile Include="ResourceAdapter.cs" />
+    <Compile Include="TransactionManager.cs" />
+    <Compile Include="UserAdapter.cs" />
+    <Compile Include="UserGroupAdapter.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config" />
+    <None Include="dsHiveServer.xsc">
+      <DependentUpon>dsHiveServer.xsd</DependentUpon>
+    </None>
+    <None Include="dsHiveServer.xsd">
+      <SubType>Designer</SubType>
+      <Generator>MSDataSetGenerator</Generator>
+      <LastGenOutput>dsHiveServer.Designer.cs</LastGenOutput>
+    </None>
+    <None Include="dsHiveServer.xss">
+      <DependentUpon>dsHiveServer.xsd</DependentUpon>
+    </None>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Server.Core\HeuristicLab.Hive.Server.Core.csproj">
+      <Project>{898B31CF-81DC-453B-AEB3-BDF83197A7EE}</Project>
+      <Name>HeuristicLab.Hive.Server.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/HiveServerADODataAccessPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/HiveServerADODataAccessPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/HiveServerADODataAccessPlugin.cs	(revision 1270)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  [ClassInfo(Name = "HeuristicLab.Hive.Server.ADODataAccess-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Server.ADODataAccess-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Hive.Server.Core-3.2")]
+  public class HiveServerADODataAccessPlugin : PluginBase {
+
+    static HiveServerADODataAccessPlugin() {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ICachedDataAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ICachedDataAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ICachedDataAdapter.cs	(revision 1270)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Runtime.CompilerServices;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  internal interface ICachedDataAdapter {
+    [MethodImpl(MethodImplOptions.Synchronized)]
+    void SyncWithDb();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs	(revision 1270)
@@ -0,0 +1,358 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Linq.Expressions;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class JobAdapter :
+    CachedDataAdapter<dsHiveServerTableAdapters.JobTableAdapter,
+                      Job, 
+                      dsHiveServer.JobRow, 
+                      dsHiveServer.JobDataTable>, 
+    IJobAdapter {
+    #region Fields
+    private IClientAdapter clientAdapter = null;
+
+    private IClientAdapter ClientAdapter {
+      get {
+        if (clientAdapter == null)
+          clientAdapter = ServiceLocator.GetClientAdapter();
+
+        return clientAdapter;
+      }
+    }
+
+    private IUserAdapter userAdapter = null;
+
+    private IUserAdapter UserAdapter {
+      get {
+        if (userAdapter == null) {
+          userAdapter = ServiceLocator.GetUserAdapter();
+        }
+
+        return userAdapter;
+      }
+    }
+
+    private IJobResultsAdapter resultsAdapter = null;
+
+    private IJobResultsAdapter ResultsAdapter {
+      get {
+        if (resultsAdapter == null) {
+          resultsAdapter = ServiceLocator.GetJobResultsAdapter();
+        }
+
+        return resultsAdapter;
+      }
+    }
+    #endregion
+
+    #region Overrides
+    protected override Job ConvertRow(dsHiveServer.JobRow row,
+      Job job) {
+      if (row != null && job != null) {
+        job.Id = row.JobId;
+
+        if (!row.IsParentJobIdNull())
+          job.ParentJob = GetById(row.ParentJobId);
+        else
+          job.ParentJob = null;
+
+        if (!row.IsResourceIdNull())
+          job.Client = ClientAdapter.GetById(row.ResourceId);
+        else
+          job.Client = null;
+
+        if (!row.IsPermissionOwnerIdNull())
+          job.User = UserAdapter.GetById(row.PermissionOwnerId);
+        else
+          job.User = null;
+        
+        if (!row.IsJobStateNull())
+          job.State = (State)Enum.Parse(job.State.GetType(), row.JobState);
+        else
+          job.State = State.nullState;
+
+        if (!row.IsPercentageNull())
+          job.Percentage = row.Percentage;
+        else
+          job.Percentage = 0.0;
+
+        if (!row.IsSerializedJobNull())
+          job.SerializedJob = row.SerializedJob;
+        else
+          job.SerializedJob = null;
+
+        if (!row.IsDateCreatedNull())
+          job.DateCreated = row.DateCreated;
+        else
+          job.DateCreated = DateTime.MinValue;
+
+        if (!row.IsDateCalculatedNull())
+          job.DateCalculated = row.DateCalculated;
+        else
+          job.DateCalculated = DateTime.MinValue;
+
+        if (!row.IsPriorityNull())
+          job.Priority = row.Priority;
+        else
+          job.Priority = default(int);
+
+        return job;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.JobRow ConvertObj(Job job,
+      dsHiveServer.JobRow row) {
+      if (job != null && row != null) {
+        if (job.Client != null) {
+          if (row.IsResourceIdNull() ||
+            row.ResourceId != job.Client.Id) {
+            ClientAdapter.Update(job.Client);
+            row.ResourceId = job.Client.Id;
+          }
+        } else
+          row.SetResourceIdNull();
+
+        if (job.ParentJob != null) {
+          if (row.IsParentJobIdNull() ||
+            row.ParentJobId != job.ParentJob.Id) {
+            Update(job.ParentJob);
+            row.ParentJobId = job.ParentJob.Id;
+          }
+        } else
+          row.SetParentJobIdNull();
+
+        if (job.User != null) {
+          if (row.IsPermissionOwnerIdNull() ||
+           row.PermissionOwnerId != job.User.Id) {
+            UserAdapter.Update(job.User);
+            row.PermissionOwnerId = job.User.Id;
+          }
+        } else
+          row.SetPermissionOwnerIdNull();
+
+        if (job.State != State.nullState)
+          row.JobState = job.State.ToString();
+        else
+          row.SetJobStateNull();
+
+        row.Percentage = job.Percentage;
+
+        row.SerializedJob = job.SerializedJob;
+
+        if (job.DateCreated != DateTime.MinValue)
+          row.DateCreated = job.DateCreated;
+        else
+          row.SetDateCreatedNull();
+
+        if (job.DateCalculated != DateTime.MinValue)
+          row.DateCalculated = job.DateCalculated;
+        else
+          row.SetDateCalculatedNull();
+
+        row.Priority = job.Priority;
+      }
+
+      return row;
+    }
+
+    protected override void UpdateRow(dsHiveServer.JobRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override dsHiveServer.JobRow 
+      InsertNewRow(Job job) {
+      dsHiveServer.JobDataTable data =
+        new dsHiveServer.JobDataTable();
+
+      dsHiveServer.JobRow row = data.NewJobRow();
+      data.AddJobRow(row);
+
+      return row;
+    }
+
+    protected override dsHiveServer.JobRow 
+      InsertNewRowInCache(Job job) {
+      dsHiveServer.JobRow row = cache.NewJobRow();
+      cache.AddJobRow(row);
+
+      return row;
+    }
+
+    protected override void FillCache() {
+      Adapter.FillByActive(cache);
+    }
+
+    protected override void SynchronizeWithDb() { 
+      this.Adapter.Update(cache);
+    }
+
+    protected override bool PutInCache(Job job) {
+      return job != null
+        && (job.State == State.calculating
+            || job.State == State.idle);
+    }
+
+    protected override IEnumerable<dsHiveServer.JobRow>
+      FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override dsHiveServer.JobRow
+      FindCachedById(long id) {
+      return cache.FindByJobId(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.JobRow>
+      FindAll() {
+      return FindMultipleRows(
+        new Selector(Adapter.GetData),
+        new Selector(cache.AsEnumerable<dsHiveServer.JobRow>));
+    }
+
+    #endregion
+
+    #region IJobAdapter Members
+    public ICollection<Job> GetAllSubjobs(Job job) {
+      if (job != null) {
+        return
+          base.FindMultiple(
+            delegate() {
+              return Adapter.GetDataBySubjobs(job.Id);
+            },
+            delegate() {
+              return from j in
+                   cache.AsEnumerable<dsHiveServer.JobRow>()
+                 where  !j.IsParentJobIdNull() && 
+                        j.ParentJobId == job.Id
+                 select j;
+            });
+      }
+
+      return null;
+    }
+
+    public ICollection<Job> GetJobsByState(State state) {
+      return
+         base.FindMultiple(
+           delegate() {
+             return Adapter.GetDataByState(state.ToString());
+           },
+           delegate() {
+             return from job in
+                      cache.AsEnumerable<dsHiveServer.JobRow>()
+                    where !job.IsJobStateNull() &&
+                           job.JobState == state.ToString()
+                    select job;
+           });
+    }
+
+    public ICollection<Job> GetJobsOf(ClientInfo client) {
+      if (client != null) {
+        return
+          base.FindMultiple(
+            delegate() {
+              return Adapter.GetDataByClient(client.Id);
+            },
+            delegate() {
+              return from job in
+                 cache.AsEnumerable<dsHiveServer.JobRow>()
+               where !job.IsResourceIdNull() && 
+                      job.ResourceId == client.Id
+               select job;
+            });
+      }
+
+      return null;
+    }
+
+    public ICollection<Job> GetActiveJobsOf(ClientInfo client) {
+
+      if (client != null) {
+        return
+          base.FindMultiple(
+            delegate() {
+              return Adapter.GetDataByCalculatingClient(client.Id);
+            },
+            delegate() {
+              return from job in
+                       cache.AsEnumerable<dsHiveServer.JobRow>()
+                     where !job.IsResourceIdNull() &&
+                            job.ResourceId == client.Id && 
+                           !job.IsJobStateNull() && 
+                            job.JobState == "calculating"
+                     select job;
+            });
+      }
+
+      return null;
+    }
+
+    public ICollection<Job> GetJobsOf(User user) {
+      if (user != null) {
+        return 
+          base.FindMultiple(
+            delegate() {
+              return Adapter.GetDataByUser(user.Id);
+            },
+            delegate() {
+              return from job in
+                cache.AsEnumerable<dsHiveServer.JobRow>()
+              where !job.IsPermissionOwnerIdNull() &&
+                job.PermissionOwnerId == user.Id
+              select job;
+            });
+      }
+
+      return null;
+    }
+
+    public override bool Delete(Job job) {
+      if (job != null) {
+        dsHiveServer.JobRow row =
+          GetRowById(job.Id);
+
+        if (row != null) {
+          //Referential integrity with job results
+          ICollection<JobResult> results =
+            ResultsAdapter.GetResultsOf(job);
+
+          foreach (JobResult result in results) {
+            ResultsAdapter.Delete(result);
+          }
+
+          return base.Delete(job);
+        }
+      }
+
+      return false;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs	(revision 1270)
@@ -0,0 +1,164 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class JobResultsAdapter: 
+    DataAdapterBase<dsHiveServerTableAdapters.JobResultTableAdapter, 
+                    JobResult, 
+                    dsHiveServer.JobResultRow>,
+    IJobResultsAdapter {
+    #region Fields
+    private IClientAdapter clientAdapter = null;
+
+    private IClientAdapter ClientAdapter {
+      get {
+        if (clientAdapter == null)
+          clientAdapter = ServiceLocator.GetClientAdapter();
+
+        return clientAdapter;
+      }
+    }
+
+    private IJobAdapter jobAdapter = null;
+
+    private IJobAdapter JobAdapter {
+      get {
+        if (jobAdapter == null)
+          jobAdapter = ServiceLocator.GetJobAdapter();
+
+        return jobAdapter;
+      }
+    }
+    #endregion
+
+    #region Overrides
+    protected override dsHiveServer.JobResultRow ConvertObj(JobResult result,
+      dsHiveServer.JobResultRow row) {
+      if (row != null && result != null) {
+        if (result.Job != null)
+          row.JobId = result.Job.Id;
+        else
+          row.SetJobIdNull();
+
+        if (result.Result != null)
+          row.JobResult = result.Result;
+        else
+          row.SetJobResultNull();
+
+        if (result.Client != null)  {
+          ClientInfo client = 
+                 ClientAdapter.GetById(result.Client.ClientId);
+
+          if (client != null)
+            row.ResourceId = client.Id;
+          else
+            row.SetResourceIdNull();
+        }           
+        else
+          row.SetResourceIdNull();
+
+        if (result.Exception != null)
+          row.Message = result.Exception.ToString();
+        else
+          row.SetMessageNull();
+
+        row.Percentage = result.Percentage;
+
+        if (result.DateFinished != DateTime.MinValue)
+          row.DateFinished = result.DateFinished;
+        else
+          row.SetDateFinishedNull();
+
+        return row;
+      } else
+        return null;
+    }
+
+    protected override JobResult ConvertRow(dsHiveServer.JobResultRow row, 
+      JobResult result) {
+      if (row != null && result != null) {
+        result.Id = row.JobResultId;
+
+        if (!row.IsJobIdNull())
+          result.Job = JobAdapter.GetById(row.JobId);
+        else
+          result.Job = null;
+
+        if (!row.IsJobResultNull())
+          result.Result = row.JobResult;
+        else
+          result.Result = null;
+
+        if (!row.IsResourceIdNull())
+          result.Client = ClientAdapter.GetById(row.ResourceId);
+        else
+          result.Client = null;
+
+        if (!row.IsMessageNull())
+          result.Exception = new Exception(row.Message);
+        else
+          result.Exception = null;
+
+        result.Percentage = row.Percentage;
+
+        if (!row.IsDateFinishedNull())
+          result.DateFinished = row.DateFinished;
+        else
+          result.DateFinished = DateTime.MinValue;
+
+        return result;
+      } else
+        return null;
+    }
+
+    protected override void UpdateRow(dsHiveServer.JobResultRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override dsHiveServer.JobResultRow InsertNewRow(JobResult obj) {
+      dsHiveServer.JobResultDataTable data =
+        new dsHiveServer.JobResultDataTable();
+
+      dsHiveServer.JobResultRow row = data.NewJobResultRow();
+      data.AddJobResultRow(row);
+
+      return row;
+    }
+
+    protected override IEnumerable<dsHiveServer.JobResultRow> FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.JobResultRow> FindAll() {
+      return Adapter.GetData();
+    }
+    #endregion
+
+    #region IJobResultsAdapter Members
+    public override void Update(JobResult result) {
+      if (result != null) {
+        ClientAdapter.Update(result.Client);
+        JobAdapter.Update(result.Job);
+
+        base.Update(result);
+      }
+    }
+
+    public ICollection<JobResult> GetResultsOf(Job job) {
+      if (job != null) {
+        return 
+          base.FindMultiple(
+            delegate() {
+              return Adapter.GetDataByJob(job.Id);
+            });
+      }
+
+      return null;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/PermissionOwnerAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/PermissionOwnerAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/PermissionOwnerAdapter.cs	(revision 1270)
@@ -0,0 +1,122 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class PermissionOwnerAdapter: 
+    DataAdapterBase<
+      dsHiveServerTableAdapters.PermissionOwnerTableAdapter, 
+      PermissionOwner, 
+      dsHiveServer.PermissionOwnerRow>, 
+    IPermissionOwnerAdapter {
+    #region Overrides
+    protected override PermissionOwner ConvertRow(dsHiveServer.PermissionOwnerRow row,
+      PermissionOwner permOwner) {
+      if (row != null && permOwner != null) {
+        permOwner.Id = row.PermissionOwnerId;
+
+        if (!row.IsNameNull())
+          permOwner.Name = row.Name;
+        else
+          permOwner.Name = String.Empty;
+
+        return permOwner;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.PermissionOwnerRow ConvertObj(PermissionOwner permOwner,
+      dsHiveServer.PermissionOwnerRow row) {
+      if (row != null && permOwner != null) {
+        row.Name = permOwner.Name;
+
+        return row;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.PermissionOwnerRow
+      InsertNewRow(PermissionOwner permOwner) {
+      dsHiveServer.PermissionOwnerDataTable data =
+        new dsHiveServer.PermissionOwnerDataTable();
+
+      dsHiveServer.PermissionOwnerRow row =
+        data.NewPermissionOwnerRow();
+
+      data.AddPermissionOwnerRow(row);
+
+      return row;
+    }
+
+    protected override void
+      UpdateRow(dsHiveServer.PermissionOwnerRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override IEnumerable<dsHiveServer.PermissionOwnerRow>
+      FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.PermissionOwnerRow>
+      FindAll() {
+      return Adapter.GetData();
+    }
+    #endregion
+
+    #region IPermissionOwner Members
+
+    public bool GetById(PermissionOwner permOwner) {
+      if (permOwner != null) {
+        dsHiveServer.PermissionOwnerRow row = 
+          base.GetRowById(permOwner.Id);
+
+        if(row != null) {
+          Convert(row, permOwner);
+
+          return true;
+        }
+      }
+
+      return false;
+    }
+    
+    public PermissionOwner GetByName(String name) {
+      if (name != null) {
+        return base.FindSingle(
+          delegate() {
+            return Adapter.GetDataByName(name);
+          });
+      }
+
+      return null;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.ADODataAccess")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("F346F716-85AC-4f5c-B109-EC07FD29EEFE")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,37 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.ADODataAccess.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
+        [global::System.Configuration.DefaultSettingValueAttribute("Data Source=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;Use" +
+            "r ID=hive;Password=hive")]
+        public string HiveServerConnectionString {
+            get {
+                return ((string)(this["HiveServerConnectionString"]));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,14 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Hive.Server.ADODataAccess.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="HiveServerConnectionString" Type="(Connection string)" Scope="Application">
+      <DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;ConnectionString&gt;Data Source=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;User ID=hive;Password=hive&lt;/ConnectionString&gt;
+  &lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
+&lt;/SerializableConnectionString&gt;</DesignTimeValue>
+      <Value Profile="(Default)">Data Source=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;User ID=hive;Password=hive</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ResourceAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ResourceAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/ResourceAdapter.cs	(revision 1270)
@@ -0,0 +1,172 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class ResourceAdapter: 
+    CachedDataAdapter<
+      dsHiveServerTableAdapters.ResourceTableAdapter, 
+      Resource, 
+      dsHiveServer.ResourceRow, 
+      dsHiveServer.ResourceDataTable>,  
+    IResourceAdapter {
+    #region Fields
+    private IClientAdapter clientAdapter = null;
+
+    private IClientAdapter ClientAdapter {
+      get {
+        if (clientAdapter == null)
+          clientAdapter = ServiceLocator.GetClientAdapter();
+        
+        return clientAdapter;
+      }
+    }
+    #endregion
+
+    #region Overrides
+    protected override Resource ConvertRow(dsHiveServer.ResourceRow row,
+      Resource resource) {
+      if (row != null && resource != null) {
+        resource.Id = row.ResourceId;
+        if (!row.IsNameNull())
+          resource.Name = row.Name;
+        else
+          resource.Name = String.Empty;
+
+        return resource;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.ResourceRow ConvertObj(Resource resource,
+      dsHiveServer.ResourceRow row) {
+      if (resource != null && row != null) {
+        row.Name = resource.Name;
+
+        return row;
+      } else
+        return null;
+    }
+
+    protected override void UpdateRow(dsHiveServer.ResourceRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override dsHiveServer.ResourceRow
+      InsertNewRow(Resource resource) {
+      dsHiveServer.ResourceDataTable data =
+        new dsHiveServer.ResourceDataTable();
+
+      dsHiveServer.ResourceRow row = data.NewResourceRow();
+      data.AddResourceRow(row);
+
+      return row;
+    }
+
+    protected override dsHiveServer.ResourceRow
+      InsertNewRowInCache(Resource resource) {
+      dsHiveServer.ResourceRow row = cache.NewResourceRow();
+      cache.AddResourceRow(row);
+
+      return row;
+    }
+
+    protected override void FillCache() {
+      Adapter.FillByActive(cache);
+    }
+
+    protected override void SynchronizeWithDb() {
+      Adapter.Update(cache);
+    }
+
+    protected override bool PutInCache(Resource obj) {
+      return (obj is ClientInfo &&
+        (obj as ClientInfo).State != State.offline);
+    }
+
+    protected override IEnumerable<dsHiveServer.ResourceRow>
+      FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override dsHiveServer.ResourceRow
+      FindCachedById(long id) {
+      return cache.FindByResourceId(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.ResourceRow>
+      FindAll() {
+      return FindMultipleRows(
+        new Selector(Adapter.GetData),
+        new Selector(cache.AsEnumerable<dsHiveServer.ResourceRow>));
+    }
+
+    #endregion
+
+    #region IResourceAdapter Members
+    public bool GetById(Resource resource) {
+      if (resource != null) {
+        dsHiveServer.ResourceRow row =
+          GetRowById(resource.Id);
+
+        if (row != null) {
+          Convert(row, resource);
+
+          return true;
+        }
+      }
+
+      return false;
+    }
+
+    public Resource GetByName(string name) {
+      dsHiveServer.ResourceRow row =
+        base.FindSingleRow(
+          delegate() {
+            return Adapter.GetDataByName(name);
+          },
+          delegate() {
+            return from r in
+                     cache.AsEnumerable<dsHiveServer.ResourceRow>()
+                   where !r.IsNameNull() && 
+                          r.Name == name
+                   select r;
+          });
+
+      if (row != null) {
+        Resource res = new Resource();
+        res = Convert(row, res);
+
+        return res;
+      } else {
+        return null;
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/TransactionManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/TransactionManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/TransactionManager.cs	(revision 1270)
@@ -0,0 +1,59 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using System.Timers;
+using HeuristicLab.Hive.Contracts.Interfaces;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class TransactionManager: ITransactionManager {
+    private Timer timer =
+      new Timer();
+
+    void timer_Elapsed(object sender, ElapsedEventArgs e) {
+      UpdateDB();
+    }
+
+    #region ITransactionManager Members
+    public event EventHandler OnUpdate;
+
+    public void EnableAutoUpdate(TimeSpan interval) {
+      timer.Interval = interval.TotalMilliseconds;
+      timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+    }
+
+    public void DisableAutoUpdate() {
+      timer.Stop();
+    }
+
+    public void UpdateDB() {
+      if (OnUpdate != null)
+        OnUpdate(this, null);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/UserAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/UserAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/UserAdapter.cs	(revision 1270)
@@ -0,0 +1,174 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class UserAdapter :
+    DataAdapterBase<
+      dsHiveServerTableAdapters.HiveUserTableAdapter,
+      User,
+      dsHiveServer.HiveUserRow>,
+    IUserAdapter {
+    #region Fields
+    private IPermissionOwnerAdapter permOwnerAdapter = null;
+
+    private IPermissionOwnerAdapter PermOwnerAdapter {
+      get {
+        if (permOwnerAdapter == null)
+          permOwnerAdapter = ServiceLocator.GetPermissionOwnerAdapter();
+
+        return permOwnerAdapter;
+      }
+    }
+
+    private IUserGroupAdapter userGroupAdapter = null;
+
+    private IUserGroupAdapter UserGroupAdapter {
+      get {
+        if (userGroupAdapter == null)
+          userGroupAdapter = ServiceLocator.GetUserGroupAdapter();
+
+        return userGroupAdapter;
+      }
+    }
+
+    private IJobAdapter jobAdapter = null;
+
+    private IJobAdapter JobAdapter {
+      get {
+        if (jobAdapter == null)
+          jobAdapter = ServiceLocator.GetJobAdapter();
+
+        return jobAdapter;
+      }
+    }
+    #endregion
+
+    #region Overrides
+    protected override User ConvertRow(dsHiveServer.HiveUserRow row,
+      User user) {
+      if (row != null && user != null) {
+        /*Parent - PermissionOwner*/
+        user.Id = row.PermissionOwnerId;
+        PermOwnerAdapter.GetById(user);
+
+        /*User*/
+        if (!row.IsPasswordNull())
+          user.Password = row.Password;
+        else
+          user.Password = String.Empty;
+
+        return user;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.HiveUserRow ConvertObj(User user,
+      dsHiveServer.HiveUserRow row) {
+      if (user != null && row != null) {
+        if (user.Password == null)
+          row.SetPasswordNull();
+        else
+          row.Password = user.Password;
+
+        return row;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.HiveUserRow
+      InsertNewRow(User user) {
+      dsHiveServer.HiveUserDataTable data =
+        new dsHiveServer.HiveUserDataTable();
+
+      dsHiveServer.HiveUserRow row =
+        data.NewHiveUserRow();
+
+      row.PermissionOwnerId = user.Id;
+
+      data.AddHiveUserRow(row);
+
+      return row;
+    }
+
+    protected override void
+      UpdateRow(dsHiveServer.HiveUserRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override IEnumerable<dsHiveServer.HiveUserRow>
+      FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.HiveUserRow>
+      FindAll() {
+      return Adapter.GetData();
+    }
+    #endregion
+
+    #region IUserAdapter Members
+
+    public override void Update(User user) {
+      if (user != null) {
+        PermOwnerAdapter.Update(user);
+
+        base.Update(user);
+      }
+    }
+
+    public User GetByName(String name) {
+      if (name != null) {
+        return base.FindSingle(
+          delegate() {
+            return Adapter.GetDataByName(name);
+          });
+      }
+
+      return null;
+    }
+
+    public override bool Delete(User user) {
+      if (user != null) {
+        //Referential integrity with jobs - they are cached
+        ICollection<Job> jobs =
+          JobAdapter.GetJobsOf(user);
+        foreach (Job job in jobs) {
+          JobAdapter.Delete(job);
+        }
+
+        return base.Delete(user) &&
+            PermOwnerAdapter.Delete(user);
+      }
+
+      return false;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs	(revision 1270)
@@ -0,0 +1,284 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Data;
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+  class UserGroupAdapter: 
+    DataAdapterBase<
+      dsHiveServerTableAdapters.UserGroupTableAdapter, 
+      UserGroup, 
+      dsHiveServer.UserGroupRow>,
+    IUserGroupAdapter {
+
+    #region Fields
+    private dsHiveServerTableAdapters.PermissionOwner_UserGroupTableAdapter permOwnerUserGroupAdapter =
+      new dsHiveServerTableAdapters.PermissionOwner_UserGroupTableAdapter();
+
+    private IPermissionOwnerAdapter permOwnerAdapter = null;
+
+    private IPermissionOwnerAdapter PermOwnerAdapter {
+      get {
+        if (permOwnerAdapter == null)
+          permOwnerAdapter = ServiceLocator.GetPermissionOwnerAdapter();
+
+        return permOwnerAdapter;
+      }
+    }
+
+    private IUserAdapter userAdapter = null;
+
+    private IUserAdapter UserAdapter {
+      get {
+        if (userAdapter == null)
+          userAdapter = ServiceLocator.GetUserAdapter();
+
+        return userAdapter;
+      }
+    }
+    #endregion
+
+    #region Overrides
+    protected override UserGroup ConvertRow(dsHiveServer.UserGroupRow row,
+      UserGroup userGroup) {
+      if (row != null && userGroup != null) {
+        /*Parent - Permission Owner*/
+        userGroup.Id = row.PermissionOwnerId;
+        PermOwnerAdapter.GetById(userGroup);
+
+        //first check for created references
+        dsHiveServer.PermissionOwner_UserGroupDataTable userGroupRows =
+          permOwnerUserGroupAdapter.GetDataByUserGroupId(userGroup.Id);
+
+        foreach (dsHiveServer.PermissionOwner_UserGroupRow permOwnerUserGroupRow in
+          userGroupRows) {
+          PermissionOwner permOwner = null;
+          
+          IEnumerable<PermissionOwner> permOwners =
+            from p in
+              userGroup.Members
+            where p.Id == permOwnerUserGroupRow.PermissionOwnerId
+            select p;
+          if (permOwners.Count<PermissionOwner>() == 1)
+            permOwner = permOwners.First<PermissionOwner>();
+
+          if (permOwner == null) {
+            PermissionOwner permissionOwner = 
+              UserAdapter.GetById(permOwnerUserGroupRow.PermissionOwnerId);
+
+            if (permissionOwner == null) {
+              //is a user group
+              permissionOwner =
+                GetById(permOwnerUserGroupRow.PermissionOwnerId);
+            }
+
+            if(permissionOwner != null)
+              userGroup.Members.Add(permissionOwner);
+          }
+        }
+
+        //secondly check for deleted references
+        ICollection<PermissionOwner> deleted = 
+          new List<PermissionOwner>();
+
+        foreach (PermissionOwner permOwner in userGroup.Members) {
+          dsHiveServer.PermissionOwner_UserGroupDataTable found =
+            permOwnerUserGroupAdapter.GetDataByPermownerUsergroupId(
+              permOwner.Id,
+              userGroup.Id);
+          if (found.Count != 1) {
+            deleted.Add(permOwner);
+          }
+        }
+
+        foreach (PermissionOwner permOwner in deleted) {
+          userGroup.Members.Remove(permOwner);
+        }
+
+        return userGroup;
+      } else
+        return null;
+    }
+
+    protected override dsHiveServer.UserGroupRow ConvertObj(UserGroup userGroup,
+      dsHiveServer.UserGroupRow row) {
+      if (userGroup != null && row != null) {
+        row.PermissionOwnerId = userGroup.Id;
+      
+        //update references
+        foreach (PermissionOwner permOwner in userGroup.Members) {          
+          //first update the member to make sure it exists in the DB
+          if (permOwner is User) {
+            UserAdapter.Update(permOwner as User);
+          } else if (permOwner is UserGroup) {
+            Update(permOwner as UserGroup);
+          }
+
+          //secondly check for created references
+          dsHiveServer.PermissionOwner_UserGroupRow permOwnerUserGroupRow =
+            null;
+          dsHiveServer.PermissionOwner_UserGroupDataTable found = 
+            permOwnerUserGroupAdapter.GetDataByPermownerUsergroupId(
+              permOwner.Id,
+              userGroup.Id);
+          if (found.Count == 1)
+            permOwnerUserGroupRow = found[0];
+
+          if (permOwnerUserGroupRow == null) {
+            permOwnerUserGroupRow = 
+              found.NewPermissionOwner_UserGroupRow();
+
+            permOwnerUserGroupRow.PermissionOwnerId =
+              permOwner.Id;
+            permOwnerUserGroupRow.UserGroupId =
+              userGroup.Id;
+
+            found.AddPermissionOwner_UserGroupRow(permOwnerUserGroupRow);
+
+            permOwnerUserGroupAdapter.Update(permOwnerUserGroupRow);
+          }
+        }
+
+        //thirdly check for deleted references
+        dsHiveServer.PermissionOwner_UserGroupDataTable userGroupRows =
+            permOwnerUserGroupAdapter.GetDataByUserGroupId(userGroup.Id);
+
+        ICollection<dsHiveServer.PermissionOwner_UserGroupRow> deleted =
+          new List<dsHiveServer.PermissionOwner_UserGroupRow>();
+
+        foreach (dsHiveServer.PermissionOwner_UserGroupRow permOwnerUserGroupRow in
+          userGroupRows) {
+          PermissionOwner permOwner = null;
+
+          IEnumerable<PermissionOwner> permOwners =
+            from p in
+              userGroup.Members
+            where p.Id == permOwnerUserGroupRow.PermissionOwnerId
+            select p;
+
+          if (permOwners.Count<PermissionOwner>() == 1)
+            permOwner = permOwners.First<PermissionOwner>();
+
+          if (permOwner == null) {
+            deleted.Add(permOwnerUserGroupRow);
+          }
+        }
+
+        foreach (dsHiveServer.PermissionOwner_UserGroupRow 
+          permOwnerUserGroupRow in deleted) {
+          permOwnerUserGroupRow.Delete();
+          permOwnerUserGroupAdapter.Update(permOwnerUserGroupRow);
+        }
+      }
+
+      return row;
+    }
+
+    protected override dsHiveServer.UserGroupRow
+      InsertNewRow(UserGroup group) {
+      dsHiveServer.UserGroupDataTable data =
+        new dsHiveServer.UserGroupDataTable();
+
+      dsHiveServer.UserGroupRow row =
+        data.NewUserGroupRow();
+
+      row.PermissionOwnerId = group.Id;
+
+      data.AddUserGroupRow(row);
+      Adapter.Update(row);
+
+      return row;
+    }
+
+    protected override void
+     UpdateRow(dsHiveServer.UserGroupRow row) {
+      Adapter.Update(row);
+    }
+
+    protected override IEnumerable<dsHiveServer.UserGroupRow>
+      FindById(long id) {
+      return Adapter.GetDataById(id);
+    }
+
+    protected override IEnumerable<dsHiveServer.UserGroupRow>
+      FindAll() {
+      return Adapter.GetData();
+    }
+    #endregion
+
+    #region IUserGroupAdapter Members
+    public override void Update(UserGroup group) {
+      if (group != null) {
+        PermOwnerAdapter.Update(group);
+
+        base.Update(group);
+      }
+    }
+
+    public UserGroup GetByName(String name) {
+      if (name != null) {
+        return base.FindSingle(
+          delegate() {
+            return Adapter.GetDataByName(name);
+          });
+      }
+
+      return null;
+    }
+
+    public ICollection<UserGroup> MemberOf(PermissionOwner permOwner) {
+      ICollection<UserGroup> userGroups =
+        new List<UserGroup>();
+      
+      if (permOwner != null) {
+        dsHiveServer.PermissionOwner_UserGroupDataTable userGroupRows =
+          permOwnerUserGroupAdapter.GetDataByPermissionOwnerId(permOwner.Id);
+
+        foreach (dsHiveServer.PermissionOwner_UserGroupRow userGroupRow in
+          userGroupRows) {
+          UserGroup userGroup = 
+            GetById(userGroupRow.UserGroupId);
+          userGroups.Add(userGroup);
+        }
+      }
+
+      return userGroups;
+    }
+
+    public override bool Delete(UserGroup group) {
+      if (group != null) {
+        return base.Delete(group) && 
+          PermOwnerAdapter.Delete(group);
+      }
+
+      return false;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/app.config	(revision 1270)
@@ -0,0 +1,10 @@
+﻿<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+    </configSections>
+    <connectionStrings>
+        <add name="HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.HiveServerConnectionString"
+            connectionString="Data Source=10.22.20.84;Initial Catalog=HiveServer;Persist Security Info=True;User ID=hive;Password=hive"
+            providerName="System.Data.SqlClient" />
+    </connectionStrings>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.Designer.cs	(revision 1270)
@@ -0,0 +1,10316 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+#pragma warning disable 1591
+
+namespace HeuristicLab.Hive.Server.ADODataAccess {
+    
+    
+    /// <summary>
+    ///Represents a strongly typed in-memory cache of data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.Serializable()]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")]
+    [global::System.Xml.Serialization.XmlRootAttribute("dsHiveServer")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")]
+    public partial class dsHiveServer : global::System.Data.DataSet {
+        
+        private ResourceDataTable tableResource;
+        
+        private ClientDataTable tableClient;
+        
+        private HiveUserDataTable tableHiveUser;
+        
+        private PermissionOwnerDataTable tablePermissionOwner;
+        
+        private UserGroupDataTable tableUserGroup;
+        
+        private PermissionOwner_UserGroupDataTable tablePermissionOwner_UserGroup;
+        
+        private ClientGroupDataTable tableClientGroup;
+        
+        private JobDataTable tableJob;
+        
+        private ClientGroup_ResourceDataTable tableClientGroup_Resource;
+        
+        private JobResultDataTable tableJobResult;
+        
+        private global::System.Data.DataRelation relationClient_is_a_Resource;
+        
+        private global::System.Data.DataRelation relationUser_is_a_PermissionOwner;
+        
+        private global::System.Data.DataRelation relationUserGroup_is_a_PermissionOwner;
+        
+        private global::System.Data.DataRelation relationR_44;
+        
+        private global::System.Data.DataRelation relationR_57;
+        
+        private global::System.Data.DataRelation relationClientGroup_is_a_Resource;
+        
+        private global::System.Data.DataRelation relationR_21;
+        
+        private global::System.Data.DataRelation relationR_35;
+        
+        private global::System.Data.DataRelation relationR_52;
+        
+        private global::System.Data.DataRelation relationR_59;
+        
+        private global::System.Data.DataRelation relationR_14;
+        
+        private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public dsHiveServer() {
+            this.BeginInit();
+            this.InitClass();
+            global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
+            base.Tables.CollectionChanged += schemaChangedHandler;
+            base.Relations.CollectionChanged += schemaChangedHandler;
+            this.EndInit();
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected dsHiveServer(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                base(info, context, false) {
+            if ((this.IsBinarySerialized(info, context) == true)) {
+                this.InitVars(false);
+                global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
+                this.Tables.CollectionChanged += schemaChangedHandler1;
+                this.Relations.CollectionChanged += schemaChangedHandler1;
+                return;
+            }
+            string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string))));
+            if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) {
+                global::System.Data.DataSet ds = new global::System.Data.DataSet();
+                ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema)));
+                if ((ds.Tables["Resource"] != null)) {
+                    base.Tables.Add(new ResourceDataTable(ds.Tables["Resource"]));
+                }
+                if ((ds.Tables["Client"] != null)) {
+                    base.Tables.Add(new ClientDataTable(ds.Tables["Client"]));
+                }
+                if ((ds.Tables["HiveUser"] != null)) {
+                    base.Tables.Add(new HiveUserDataTable(ds.Tables["HiveUser"]));
+                }
+                if ((ds.Tables["PermissionOwner"] != null)) {
+                    base.Tables.Add(new PermissionOwnerDataTable(ds.Tables["PermissionOwner"]));
+                }
+                if ((ds.Tables["UserGroup"] != null)) {
+                    base.Tables.Add(new UserGroupDataTable(ds.Tables["UserGroup"]));
+                }
+                if ((ds.Tables["PermissionOwner_UserGroup"] != null)) {
+                    base.Tables.Add(new PermissionOwner_UserGroupDataTable(ds.Tables["PermissionOwner_UserGroup"]));
+                }
+                if ((ds.Tables["ClientGroup"] != null)) {
+                    base.Tables.Add(new ClientGroupDataTable(ds.Tables["ClientGroup"]));
+                }
+                if ((ds.Tables["Job"] != null)) {
+                    base.Tables.Add(new JobDataTable(ds.Tables["Job"]));
+                }
+                if ((ds.Tables["ClientGroup_Resource"] != null)) {
+                    base.Tables.Add(new ClientGroup_ResourceDataTable(ds.Tables["ClientGroup_Resource"]));
+                }
+                if ((ds.Tables["JobResult"] != null)) {
+                    base.Tables.Add(new JobResultDataTable(ds.Tables["JobResult"]));
+                }
+                this.DataSetName = ds.DataSetName;
+                this.Prefix = ds.Prefix;
+                this.Namespace = ds.Namespace;
+                this.Locale = ds.Locale;
+                this.CaseSensitive = ds.CaseSensitive;
+                this.EnforceConstraints = ds.EnforceConstraints;
+                this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add);
+                this.InitVars();
+            }
+            else {
+                this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema)));
+            }
+            this.GetSerializationData(info, context);
+            global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged);
+            base.Tables.CollectionChanged += schemaChangedHandler;
+            this.Relations.CollectionChanged += schemaChangedHandler;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public ResourceDataTable Resource {
+            get {
+                return this.tableResource;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public ClientDataTable Client {
+            get {
+                return this.tableClient;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public HiveUserDataTable HiveUser {
+            get {
+                return this.tableHiveUser;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public PermissionOwnerDataTable PermissionOwner {
+            get {
+                return this.tablePermissionOwner;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public UserGroupDataTable UserGroup {
+            get {
+                return this.tableUserGroup;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public PermissionOwner_UserGroupDataTable PermissionOwner_UserGroup {
+            get {
+                return this.tablePermissionOwner_UserGroup;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public ClientGroupDataTable ClientGroup {
+            get {
+                return this.tableClientGroup;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public JobDataTable Job {
+            get {
+                return this.tableJob;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public ClientGroup_ResourceDataTable ClientGroup_Resource {
+            get {
+                return this.tableClientGroup_Resource;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)]
+        public JobResultDataTable JobResult {
+            get {
+                return this.tableJobResult;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.BrowsableAttribute(true)]
+        [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)]
+        public override global::System.Data.SchemaSerializationMode SchemaSerializationMode {
+            get {
+                return this._schemaSerializationMode;
+            }
+            set {
+                this._schemaSerializationMode = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)]
+        public new global::System.Data.DataTableCollection Tables {
+            get {
+                return base.Tables;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)]
+        public new global::System.Data.DataRelationCollection Relations {
+            get {
+                return base.Relations;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected override void InitializeDerivedDataSet() {
+            this.BeginInit();
+            this.InitClass();
+            this.EndInit();
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public override global::System.Data.DataSet Clone() {
+            dsHiveServer cln = ((dsHiveServer)(base.Clone()));
+            cln.InitVars();
+            cln.SchemaSerializationMode = this.SchemaSerializationMode;
+            return cln;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected override bool ShouldSerializeTables() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected override bool ShouldSerializeRelations() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) {
+            if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) {
+                this.Reset();
+                global::System.Data.DataSet ds = new global::System.Data.DataSet();
+                ds.ReadXml(reader);
+                if ((ds.Tables["Resource"] != null)) {
+                    base.Tables.Add(new ResourceDataTable(ds.Tables["Resource"]));
+                }
+                if ((ds.Tables["Client"] != null)) {
+                    base.Tables.Add(new ClientDataTable(ds.Tables["Client"]));
+                }
+                if ((ds.Tables["HiveUser"] != null)) {
+                    base.Tables.Add(new HiveUserDataTable(ds.Tables["HiveUser"]));
+                }
+                if ((ds.Tables["PermissionOwner"] != null)) {
+                    base.Tables.Add(new PermissionOwnerDataTable(ds.Tables["PermissionOwner"]));
+                }
+                if ((ds.Tables["UserGroup"] != null)) {
+                    base.Tables.Add(new UserGroupDataTable(ds.Tables["UserGroup"]));
+                }
+                if ((ds.Tables["PermissionOwner_UserGroup"] != null)) {
+                    base.Tables.Add(new PermissionOwner_UserGroupDataTable(ds.Tables["PermissionOwner_UserGroup"]));
+                }
+                if ((ds.Tables["ClientGroup"] != null)) {
+                    base.Tables.Add(new ClientGroupDataTable(ds.Tables["ClientGroup"]));
+                }
+                if ((ds.Tables["Job"] != null)) {
+                    base.Tables.Add(new JobDataTable(ds.Tables["Job"]));
+                }
+                if ((ds.Tables["ClientGroup_Resource"] != null)) {
+                    base.Tables.Add(new ClientGroup_ResourceDataTable(ds.Tables["ClientGroup_Resource"]));
+                }
+                if ((ds.Tables["JobResult"] != null)) {
+                    base.Tables.Add(new JobResultDataTable(ds.Tables["JobResult"]));
+                }
+                this.DataSetName = ds.DataSetName;
+                this.Prefix = ds.Prefix;
+                this.Namespace = ds.Namespace;
+                this.Locale = ds.Locale;
+                this.CaseSensitive = ds.CaseSensitive;
+                this.EnforceConstraints = ds.EnforceConstraints;
+                this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add);
+                this.InitVars();
+            }
+            else {
+                this.ReadXml(reader);
+                this.InitVars();
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() {
+            global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream();
+            this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null));
+            stream.Position = 0;
+            return global::System.Xml.Schema.XmlSchema.Read(new global::System.Xml.XmlTextReader(stream), null);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal void InitVars() {
+            this.InitVars(true);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal void InitVars(bool initTable) {
+            this.tableResource = ((ResourceDataTable)(base.Tables["Resource"]));
+            if ((initTable == true)) {
+                if ((this.tableResource != null)) {
+                    this.tableResource.InitVars();
+                }
+            }
+            this.tableClient = ((ClientDataTable)(base.Tables["Client"]));
+            if ((initTable == true)) {
+                if ((this.tableClient != null)) {
+                    this.tableClient.InitVars();
+                }
+            }
+            this.tableHiveUser = ((HiveUserDataTable)(base.Tables["HiveUser"]));
+            if ((initTable == true)) {
+                if ((this.tableHiveUser != null)) {
+                    this.tableHiveUser.InitVars();
+                }
+            }
+            this.tablePermissionOwner = ((PermissionOwnerDataTable)(base.Tables["PermissionOwner"]));
+            if ((initTable == true)) {
+                if ((this.tablePermissionOwner != null)) {
+                    this.tablePermissionOwner.InitVars();
+                }
+            }
+            this.tableUserGroup = ((UserGroupDataTable)(base.Tables["UserGroup"]));
+            if ((initTable == true)) {
+                if ((this.tableUserGroup != null)) {
+                    this.tableUserGroup.InitVars();
+                }
+            }
+            this.tablePermissionOwner_UserGroup = ((PermissionOwner_UserGroupDataTable)(base.Tables["PermissionOwner_UserGroup"]));
+            if ((initTable == true)) {
+                if ((this.tablePermissionOwner_UserGroup != null)) {
+                    this.tablePermissionOwner_UserGroup.InitVars();
+                }
+            }
+            this.tableClientGroup = ((ClientGroupDataTable)(base.Tables["ClientGroup"]));
+            if ((initTable == true)) {
+                if ((this.tableClientGroup != null)) {
+                    this.tableClientGroup.InitVars();
+                }
+            }
+            this.tableJob = ((JobDataTable)(base.Tables["Job"]));
+            if ((initTable == true)) {
+                if ((this.tableJob != null)) {
+                    this.tableJob.InitVars();
+                }
+            }
+            this.tableClientGroup_Resource = ((ClientGroup_ResourceDataTable)(base.Tables["ClientGroup_Resource"]));
+            if ((initTable == true)) {
+                if ((this.tableClientGroup_Resource != null)) {
+                    this.tableClientGroup_Resource.InitVars();
+                }
+            }
+            this.tableJobResult = ((JobResultDataTable)(base.Tables["JobResult"]));
+            if ((initTable == true)) {
+                if ((this.tableJobResult != null)) {
+                    this.tableJobResult.InitVars();
+                }
+            }
+            this.relationClient_is_a_Resource = this.Relations["Client_is_a_Resource"];
+            this.relationUser_is_a_PermissionOwner = this.Relations["User_is_a_PermissionOwner"];
+            this.relationUserGroup_is_a_PermissionOwner = this.Relations["UserGroup_is_a_PermissionOwner"];
+            this.relationR_44 = this.Relations["R_44"];
+            this.relationR_57 = this.Relations["R_57"];
+            this.relationClientGroup_is_a_Resource = this.Relations["ClientGroup_is_a_Resource"];
+            this.relationR_21 = this.Relations["R_21"];
+            this.relationR_35 = this.Relations["R_35"];
+            this.relationR_52 = this.Relations["R_52"];
+            this.relationR_59 = this.Relations["R_59"];
+            this.relationR_14 = this.Relations["R_14"];
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitClass() {
+            this.DataSetName = "dsHiveServer";
+            this.Prefix = "";
+            this.Namespace = "http://tempuri.org/dsHiveServer.xsd";
+            this.EnforceConstraints = true;
+            this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema;
+            this.tableResource = new ResourceDataTable();
+            base.Tables.Add(this.tableResource);
+            this.tableClient = new ClientDataTable();
+            base.Tables.Add(this.tableClient);
+            this.tableHiveUser = new HiveUserDataTable();
+            base.Tables.Add(this.tableHiveUser);
+            this.tablePermissionOwner = new PermissionOwnerDataTable();
+            base.Tables.Add(this.tablePermissionOwner);
+            this.tableUserGroup = new UserGroupDataTable();
+            base.Tables.Add(this.tableUserGroup);
+            this.tablePermissionOwner_UserGroup = new PermissionOwner_UserGroupDataTable();
+            base.Tables.Add(this.tablePermissionOwner_UserGroup);
+            this.tableClientGroup = new ClientGroupDataTable();
+            base.Tables.Add(this.tableClientGroup);
+            this.tableJob = new JobDataTable();
+            base.Tables.Add(this.tableJob);
+            this.tableClientGroup_Resource = new ClientGroup_ResourceDataTable();
+            base.Tables.Add(this.tableClientGroup_Resource);
+            this.tableJobResult = new JobResultDataTable();
+            base.Tables.Add(this.tableJobResult);
+            this.relationClient_is_a_Resource = new global::System.Data.DataRelation("Client_is_a_Resource", new global::System.Data.DataColumn[] {
+                        this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClient.ResourceIdColumn}, false);
+            this.Relations.Add(this.relationClient_is_a_Resource);
+            this.relationUser_is_a_PermissionOwner = new global::System.Data.DataRelation("User_is_a_PermissionOwner", new global::System.Data.DataColumn[] {
+                        this.tablePermissionOwner.PermissionOwnerIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableHiveUser.PermissionOwnerIdColumn}, false);
+            this.Relations.Add(this.relationUser_is_a_PermissionOwner);
+            this.relationUserGroup_is_a_PermissionOwner = new global::System.Data.DataRelation("UserGroup_is_a_PermissionOwner", new global::System.Data.DataColumn[] {
+                        this.tablePermissionOwner.PermissionOwnerIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableUserGroup.PermissionOwnerIdColumn}, false);
+            this.Relations.Add(this.relationUserGroup_is_a_PermissionOwner);
+            this.relationR_44 = new global::System.Data.DataRelation("R_44", new global::System.Data.DataColumn[] {
+                        this.tablePermissionOwner.PermissionOwnerIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tablePermissionOwner_UserGroup.PermissionOwnerIdColumn}, false);
+            this.Relations.Add(this.relationR_44);
+            this.relationR_57 = new global::System.Data.DataRelation("R_57", new global::System.Data.DataColumn[] {
+                        this.tableUserGroup.PermissionOwnerIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tablePermissionOwner_UserGroup.UserGroupIdColumn}, false);
+            this.Relations.Add(this.relationR_57);
+            this.relationClientGroup_is_a_Resource = new global::System.Data.DataRelation("ClientGroup_is_a_Resource", new global::System.Data.DataColumn[] {
+                        this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClientGroup.ResourceIdColumn}, false);
+            this.Relations.Add(this.relationClientGroup_is_a_Resource);
+            this.relationR_21 = new global::System.Data.DataRelation("R_21", new global::System.Data.DataColumn[] {
+                        this.tableClient.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableJob.ResourceIdColumn}, false);
+            this.Relations.Add(this.relationR_21);
+            this.relationR_35 = new global::System.Data.DataRelation("R_35", new global::System.Data.DataColumn[] {
+                        this.tableHiveUser.PermissionOwnerIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableJob.PermissionOwnerIdColumn}, false);
+            this.Relations.Add(this.relationR_35);
+            this.relationR_52 = new global::System.Data.DataRelation("R_52", new global::System.Data.DataColumn[] {
+                        this.tableClientGroup.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClientGroup_Resource.ClientGroupIdColumn}, false);
+            this.Relations.Add(this.relationR_52);
+            this.relationR_59 = new global::System.Data.DataRelation("R_59", new global::System.Data.DataColumn[] {
+                        this.tableResource.ResourceIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableClientGroup_Resource.ResourceIdColumn}, false);
+            this.Relations.Add(this.relationR_59);
+            this.relationR_14 = new global::System.Data.DataRelation("R_14", new global::System.Data.DataColumn[] {
+                        this.tableJob.JobIdColumn}, new global::System.Data.DataColumn[] {
+                        this.tableJobResult.JobIdColumn}, false);
+            this.Relations.Add(this.relationR_14);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeResource() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeClient() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeHiveUser() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializePermissionOwner() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeUserGroup() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializePermissionOwner_UserGroup() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeClientGroup() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeJob() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeClientGroup_Resource() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private bool ShouldSerializeJobResult() {
+            return false;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) {
+            if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) {
+                this.InitVars();
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+            dsHiveServer ds = new dsHiveServer();
+            global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+            global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+            global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny();
+            any.Namespace = ds.Namespace;
+            sequence.Items.Add(any);
+            type.Particle = sequence;
+            global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+            if (xs.Contains(dsSchema.TargetNamespace)) {
+                global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                try {
+                    global::System.Xml.Schema.XmlSchema schema = null;
+                    dsSchema.Write(s1);
+                    for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                        schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                        s2.SetLength(0);
+                        schema.Write(s2);
+                        if ((s1.Length == s2.Length)) {
+                            s1.Position = 0;
+                            s2.Position = 0;
+                            for (; ((s1.Position != s1.Length) 
+                                        && (s1.ReadByte() == s2.ReadByte())); ) {
+                                ;
+                            }
+                            if ((s1.Position == s1.Length)) {
+                                return type;
+                            }
+                        }
+                    }
+                }
+                finally {
+                    if ((s1 != null)) {
+                        s1.Close();
+                    }
+                    if ((s2 != null)) {
+                        s2.Close();
+                    }
+                }
+            }
+            xs.Add(dsSchema);
+            return type;
+        }
+        
+        public delegate void ResourceRowChangeEventHandler(object sender, ResourceRowChangeEvent e);
+        
+        public delegate void ClientRowChangeEventHandler(object sender, ClientRowChangeEvent e);
+        
+        public delegate void HiveUserRowChangeEventHandler(object sender, HiveUserRowChangeEvent e);
+        
+        public delegate void PermissionOwnerRowChangeEventHandler(object sender, PermissionOwnerRowChangeEvent e);
+        
+        public delegate void UserGroupRowChangeEventHandler(object sender, UserGroupRowChangeEvent e);
+        
+        public delegate void PermissionOwner_UserGroupRowChangeEventHandler(object sender, PermissionOwner_UserGroupRowChangeEvent e);
+        
+        public delegate void ClientGroupRowChangeEventHandler(object sender, ClientGroupRowChangeEvent e);
+        
+        public delegate void JobRowChangeEventHandler(object sender, JobRowChangeEvent e);
+        
+        public delegate void ClientGroup_ResourceRowChangeEventHandler(object sender, ClientGroup_ResourceRowChangeEvent e);
+        
+        public delegate void JobResultRowChangeEventHandler(object sender, JobResultRowChangeEvent e);
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class ResourceDataTable : global::System.Data.TypedTableBase<ResourceRow> {
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            private global::System.Data.DataColumn columnName;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceDataTable() {
+                this.TableName = "Resource";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ResourceDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected ResourceDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn NameColumn {
+                get {
+                    return this.columnName;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow this[int index] {
+                get {
+                    return ((ResourceRow)(this.Rows[index]));
+                }
+            }
+            
+            public event ResourceRowChangeEventHandler ResourceRowChanging;
+            
+            public event ResourceRowChangeEventHandler ResourceRowChanged;
+            
+            public event ResourceRowChangeEventHandler ResourceRowDeleting;
+            
+            public event ResourceRowChangeEventHandler ResourceRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddResourceRow(ResourceRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow AddResourceRow(string Name) {
+                ResourceRow rowResourceRow = ((ResourceRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        Name};
+                rowResourceRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowResourceRow);
+                return rowResourceRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow FindByResourceId(long ResourceId) {
+                return ((ResourceRow)(this.Rows.Find(new object[] {
+                            ResourceId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                ResourceDataTable cln = ((ResourceDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new ResourceDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnResourceId = base.Columns["ResourceId"];
+                this.columnName = base.Columns["Name"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.columnName = new global::System.Data.DataColumn("Name", typeof(string), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnName);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnResourceId}, true));
+                this.columnResourceId.AutoIncrement = true;
+                this.columnResourceId.AutoIncrementSeed = -1;
+                this.columnResourceId.AutoIncrementStep = -1;
+                this.columnResourceId.AllowDBNull = false;
+                this.columnResourceId.ReadOnly = true;
+                this.columnResourceId.Unique = true;
+                this.columnName.MaxLength = 18;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow NewResourceRow() {
+                return ((ResourceRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new ResourceRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(ResourceRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.ResourceRowChanged != null)) {
+                    this.ResourceRowChanged(this, new ResourceRowChangeEvent(((ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.ResourceRowChanging != null)) {
+                    this.ResourceRowChanging(this, new ResourceRowChangeEvent(((ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.ResourceRowDeleted != null)) {
+                    this.ResourceRowDeleted(this, new ResourceRowChangeEvent(((ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.ResourceRowDeleting != null)) {
+                    this.ResourceRowDeleting(this, new ResourceRowChangeEvent(((ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveResourceRow(ResourceRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "ResourceDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class ClientDataTable : global::System.Data.TypedTableBase<ClientRow> {
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            private global::System.Data.DataColumn columnGUID;
+            
+            private global::System.Data.DataColumn columnCPUSpeed;
+            
+            private global::System.Data.DataColumn columnMemory;
+            
+            private global::System.Data.DataColumn columnLogin;
+            
+            private global::System.Data.DataColumn columnStatus;
+            
+            private global::System.Data.DataColumn columnClientConfigId;
+            
+            private global::System.Data.DataColumn columnNumberOfCores;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientDataTable() {
+                this.TableName = "Client";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected ClientDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn GUIDColumn {
+                get {
+                    return this.columnGUID;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn CPUSpeedColumn {
+                get {
+                    return this.columnCPUSpeed;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn MemoryColumn {
+                get {
+                    return this.columnMemory;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn LoginColumn {
+                get {
+                    return this.columnLogin;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn StatusColumn {
+                get {
+                    return this.columnStatus;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ClientConfigIdColumn {
+                get {
+                    return this.columnClientConfigId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn NumberOfCoresColumn {
+                get {
+                    return this.columnNumberOfCores;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow this[int index] {
+                get {
+                    return ((ClientRow)(this.Rows[index]));
+                }
+            }
+            
+            public event ClientRowChangeEventHandler ClientRowChanging;
+            
+            public event ClientRowChangeEventHandler ClientRowChanged;
+            
+            public event ClientRowChangeEventHandler ClientRowDeleting;
+            
+            public event ClientRowChangeEventHandler ClientRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddClientRow(ClientRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow AddClientRow(ResourceRow parentResourceRowByClient_is_a_Resource, System.Guid GUID, int CPUSpeed, int Memory, System.DateTime Login, string Status, long ClientConfigId, int NumberOfCores) {
+                ClientRow rowClientRow = ((ClientRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        GUID,
+                        CPUSpeed,
+                        Memory,
+                        Login,
+                        Status,
+                        ClientConfigId,
+                        NumberOfCores};
+                if ((parentResourceRowByClient_is_a_Resource != null)) {
+                    columnValuesArray[0] = parentResourceRowByClient_is_a_Resource[0];
+                }
+                rowClientRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowClientRow);
+                return rowClientRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow FindByResourceId(long ResourceId) {
+                return ((ClientRow)(this.Rows.Find(new object[] {
+                            ResourceId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                ClientDataTable cln = ((ClientDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new ClientDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnResourceId = base.Columns["ResourceId"];
+                this.columnGUID = base.Columns["GUID"];
+                this.columnCPUSpeed = base.Columns["CPUSpeed"];
+                this.columnMemory = base.Columns["Memory"];
+                this.columnLogin = base.Columns["Login"];
+                this.columnStatus = base.Columns["Status"];
+                this.columnClientConfigId = base.Columns["ClientConfigId"];
+                this.columnNumberOfCores = base.Columns["NumberOfCores"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.columnGUID = new global::System.Data.DataColumn("GUID", typeof(global::System.Guid), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnGUID);
+                this.columnCPUSpeed = new global::System.Data.DataColumn("CPUSpeed", typeof(int), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnCPUSpeed);
+                this.columnMemory = new global::System.Data.DataColumn("Memory", typeof(int), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnMemory);
+                this.columnLogin = new global::System.Data.DataColumn("Login", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnLogin);
+                this.columnStatus = new global::System.Data.DataColumn("Status", typeof(string), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnStatus);
+                this.columnClientConfigId = new global::System.Data.DataColumn("ClientConfigId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnClientConfigId);
+                this.columnNumberOfCores = new global::System.Data.DataColumn("NumberOfCores", typeof(int), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnNumberOfCores);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnResourceId}, true));
+                this.columnResourceId.AllowDBNull = false;
+                this.columnResourceId.Unique = true;
+                this.columnStatus.MaxLength = 18;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow NewClientRow() {
+                return ((ClientRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new ClientRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(ClientRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.ClientRowChanged != null)) {
+                    this.ClientRowChanged(this, new ClientRowChangeEvent(((ClientRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.ClientRowChanging != null)) {
+                    this.ClientRowChanging(this, new ClientRowChangeEvent(((ClientRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.ClientRowDeleted != null)) {
+                    this.ClientRowDeleted(this, new ClientRowChangeEvent(((ClientRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.ClientRowDeleting != null)) {
+                    this.ClientRowDeleting(this, new ClientRowChangeEvent(((ClientRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveClientRow(ClientRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "ClientDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class HiveUserDataTable : global::System.Data.TypedTableBase<HiveUserRow> {
+            
+            private global::System.Data.DataColumn columnPermissionOwnerId;
+            
+            private global::System.Data.DataColumn columnPassword;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserDataTable() {
+                this.TableName = "HiveUser";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal HiveUserDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected HiveUserDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PermissionOwnerIdColumn {
+                get {
+                    return this.columnPermissionOwnerId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PasswordColumn {
+                get {
+                    return this.columnPassword;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow this[int index] {
+                get {
+                    return ((HiveUserRow)(this.Rows[index]));
+                }
+            }
+            
+            public event HiveUserRowChangeEventHandler HiveUserRowChanging;
+            
+            public event HiveUserRowChangeEventHandler HiveUserRowChanged;
+            
+            public event HiveUserRowChangeEventHandler HiveUserRowDeleting;
+            
+            public event HiveUserRowChangeEventHandler HiveUserRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddHiveUserRow(HiveUserRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow AddHiveUserRow(PermissionOwnerRow parentPermissionOwnerRowByUser_is_a_PermissionOwner, string Password) {
+                HiveUserRow rowHiveUserRow = ((HiveUserRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        Password};
+                if ((parentPermissionOwnerRowByUser_is_a_PermissionOwner != null)) {
+                    columnValuesArray[0] = parentPermissionOwnerRowByUser_is_a_PermissionOwner[0];
+                }
+                rowHiveUserRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowHiveUserRow);
+                return rowHiveUserRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow FindByPermissionOwnerId(long PermissionOwnerId) {
+                return ((HiveUserRow)(this.Rows.Find(new object[] {
+                            PermissionOwnerId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                HiveUserDataTable cln = ((HiveUserDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new HiveUserDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnPermissionOwnerId = base.Columns["PermissionOwnerId"];
+                this.columnPassword = base.Columns["Password"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnPermissionOwnerId = new global::System.Data.DataColumn("PermissionOwnerId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPermissionOwnerId);
+                this.columnPassword = new global::System.Data.DataColumn("Password", typeof(string), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPassword);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnPermissionOwnerId}, true));
+                this.columnPermissionOwnerId.AllowDBNull = false;
+                this.columnPermissionOwnerId.Unique = true;
+                this.columnPassword.MaxLength = 18;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow NewHiveUserRow() {
+                return ((HiveUserRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new HiveUserRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(HiveUserRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.HiveUserRowChanged != null)) {
+                    this.HiveUserRowChanged(this, new HiveUserRowChangeEvent(((HiveUserRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.HiveUserRowChanging != null)) {
+                    this.HiveUserRowChanging(this, new HiveUserRowChangeEvent(((HiveUserRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.HiveUserRowDeleted != null)) {
+                    this.HiveUserRowDeleted(this, new HiveUserRowChangeEvent(((HiveUserRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.HiveUserRowDeleting != null)) {
+                    this.HiveUserRowDeleting(this, new HiveUserRowChangeEvent(((HiveUserRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveHiveUserRow(HiveUserRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "HiveUserDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class PermissionOwnerDataTable : global::System.Data.TypedTableBase<PermissionOwnerRow> {
+            
+            private global::System.Data.DataColumn columnPermissionOwnerId;
+            
+            private global::System.Data.DataColumn columnName;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerDataTable() {
+                this.TableName = "PermissionOwner";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal PermissionOwnerDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected PermissionOwnerDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PermissionOwnerIdColumn {
+                get {
+                    return this.columnPermissionOwnerId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn NameColumn {
+                get {
+                    return this.columnName;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow this[int index] {
+                get {
+                    return ((PermissionOwnerRow)(this.Rows[index]));
+                }
+            }
+            
+            public event PermissionOwnerRowChangeEventHandler PermissionOwnerRowChanging;
+            
+            public event PermissionOwnerRowChangeEventHandler PermissionOwnerRowChanged;
+            
+            public event PermissionOwnerRowChangeEventHandler PermissionOwnerRowDeleting;
+            
+            public event PermissionOwnerRowChangeEventHandler PermissionOwnerRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddPermissionOwnerRow(PermissionOwnerRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow AddPermissionOwnerRow(string Name) {
+                PermissionOwnerRow rowPermissionOwnerRow = ((PermissionOwnerRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        Name};
+                rowPermissionOwnerRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowPermissionOwnerRow);
+                return rowPermissionOwnerRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow FindByPermissionOwnerId(long PermissionOwnerId) {
+                return ((PermissionOwnerRow)(this.Rows.Find(new object[] {
+                            PermissionOwnerId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                PermissionOwnerDataTable cln = ((PermissionOwnerDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new PermissionOwnerDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnPermissionOwnerId = base.Columns["PermissionOwnerId"];
+                this.columnName = base.Columns["Name"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnPermissionOwnerId = new global::System.Data.DataColumn("PermissionOwnerId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPermissionOwnerId);
+                this.columnName = new global::System.Data.DataColumn("Name", typeof(string), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnName);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnPermissionOwnerId}, true));
+                this.columnPermissionOwnerId.AutoIncrement = true;
+                this.columnPermissionOwnerId.AutoIncrementSeed = -1;
+                this.columnPermissionOwnerId.AutoIncrementStep = -1;
+                this.columnPermissionOwnerId.AllowDBNull = false;
+                this.columnPermissionOwnerId.ReadOnly = true;
+                this.columnPermissionOwnerId.Unique = true;
+                this.columnName.MaxLength = 18;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow NewPermissionOwnerRow() {
+                return ((PermissionOwnerRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new PermissionOwnerRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(PermissionOwnerRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.PermissionOwnerRowChanged != null)) {
+                    this.PermissionOwnerRowChanged(this, new PermissionOwnerRowChangeEvent(((PermissionOwnerRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.PermissionOwnerRowChanging != null)) {
+                    this.PermissionOwnerRowChanging(this, new PermissionOwnerRowChangeEvent(((PermissionOwnerRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.PermissionOwnerRowDeleted != null)) {
+                    this.PermissionOwnerRowDeleted(this, new PermissionOwnerRowChangeEvent(((PermissionOwnerRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.PermissionOwnerRowDeleting != null)) {
+                    this.PermissionOwnerRowDeleting(this, new PermissionOwnerRowChangeEvent(((PermissionOwnerRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemovePermissionOwnerRow(PermissionOwnerRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "PermissionOwnerDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class UserGroupDataTable : global::System.Data.TypedTableBase<UserGroupRow> {
+            
+            private global::System.Data.DataColumn columnPermissionOwnerId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupDataTable() {
+                this.TableName = "UserGroup";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal UserGroupDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected UserGroupDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PermissionOwnerIdColumn {
+                get {
+                    return this.columnPermissionOwnerId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow this[int index] {
+                get {
+                    return ((UserGroupRow)(this.Rows[index]));
+                }
+            }
+            
+            public event UserGroupRowChangeEventHandler UserGroupRowChanging;
+            
+            public event UserGroupRowChangeEventHandler UserGroupRowChanged;
+            
+            public event UserGroupRowChangeEventHandler UserGroupRowDeleting;
+            
+            public event UserGroupRowChangeEventHandler UserGroupRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddUserGroupRow(UserGroupRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow AddUserGroupRow(PermissionOwnerRow parentPermissionOwnerRowByUserGroup_is_a_PermissionOwner) {
+                UserGroupRow rowUserGroupRow = ((UserGroupRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null};
+                if ((parentPermissionOwnerRowByUserGroup_is_a_PermissionOwner != null)) {
+                    columnValuesArray[0] = parentPermissionOwnerRowByUserGroup_is_a_PermissionOwner[0];
+                }
+                rowUserGroupRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowUserGroupRow);
+                return rowUserGroupRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow FindByPermissionOwnerId(long PermissionOwnerId) {
+                return ((UserGroupRow)(this.Rows.Find(new object[] {
+                            PermissionOwnerId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                UserGroupDataTable cln = ((UserGroupDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new UserGroupDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnPermissionOwnerId = base.Columns["PermissionOwnerId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnPermissionOwnerId = new global::System.Data.DataColumn("PermissionOwnerId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPermissionOwnerId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnPermissionOwnerId}, true));
+                this.columnPermissionOwnerId.AllowDBNull = false;
+                this.columnPermissionOwnerId.Unique = true;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow NewUserGroupRow() {
+                return ((UserGroupRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new UserGroupRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(UserGroupRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.UserGroupRowChanged != null)) {
+                    this.UserGroupRowChanged(this, new UserGroupRowChangeEvent(((UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.UserGroupRowChanging != null)) {
+                    this.UserGroupRowChanging(this, new UserGroupRowChangeEvent(((UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.UserGroupRowDeleted != null)) {
+                    this.UserGroupRowDeleted(this, new UserGroupRowChangeEvent(((UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.UserGroupRowDeleting != null)) {
+                    this.UserGroupRowDeleting(this, new UserGroupRowChangeEvent(((UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveUserGroupRow(UserGroupRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "UserGroupDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class PermissionOwner_UserGroupDataTable : global::System.Data.TypedTableBase<PermissionOwner_UserGroupRow> {
+            
+            private global::System.Data.DataColumn columnPermissionOwnerId;
+            
+            private global::System.Data.DataColumn columnUserGroupId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupDataTable() {
+                this.TableName = "PermissionOwner_UserGroup";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal PermissionOwner_UserGroupDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected PermissionOwner_UserGroupDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PermissionOwnerIdColumn {
+                get {
+                    return this.columnPermissionOwnerId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn UserGroupIdColumn {
+                get {
+                    return this.columnUserGroupId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow this[int index] {
+                get {
+                    return ((PermissionOwner_UserGroupRow)(this.Rows[index]));
+                }
+            }
+            
+            public event PermissionOwner_UserGroupRowChangeEventHandler PermissionOwner_UserGroupRowChanging;
+            
+            public event PermissionOwner_UserGroupRowChangeEventHandler PermissionOwner_UserGroupRowChanged;
+            
+            public event PermissionOwner_UserGroupRowChangeEventHandler PermissionOwner_UserGroupRowDeleting;
+            
+            public event PermissionOwner_UserGroupRowChangeEventHandler PermissionOwner_UserGroupRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddPermissionOwner_UserGroupRow(PermissionOwner_UserGroupRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow AddPermissionOwner_UserGroupRow(PermissionOwnerRow parentPermissionOwnerRowByR_44, UserGroupRow parentUserGroupRowByR_57) {
+                PermissionOwner_UserGroupRow rowPermissionOwner_UserGroupRow = ((PermissionOwner_UserGroupRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        null};
+                if ((parentPermissionOwnerRowByR_44 != null)) {
+                    columnValuesArray[0] = parentPermissionOwnerRowByR_44[0];
+                }
+                if ((parentUserGroupRowByR_57 != null)) {
+                    columnValuesArray[1] = parentUserGroupRowByR_57[0];
+                }
+                rowPermissionOwner_UserGroupRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowPermissionOwner_UserGroupRow);
+                return rowPermissionOwner_UserGroupRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow FindByPermissionOwnerIdUserGroupId(long PermissionOwnerId, long UserGroupId) {
+                return ((PermissionOwner_UserGroupRow)(this.Rows.Find(new object[] {
+                            PermissionOwnerId,
+                            UserGroupId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                PermissionOwner_UserGroupDataTable cln = ((PermissionOwner_UserGroupDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new PermissionOwner_UserGroupDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnPermissionOwnerId = base.Columns["PermissionOwnerId"];
+                this.columnUserGroupId = base.Columns["UserGroupId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnPermissionOwnerId = new global::System.Data.DataColumn("PermissionOwnerId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPermissionOwnerId);
+                this.columnUserGroupId = new global::System.Data.DataColumn("UserGroupId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnUserGroupId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnPermissionOwnerId,
+                                this.columnUserGroupId}, true));
+                this.columnPermissionOwnerId.AllowDBNull = false;
+                this.columnUserGroupId.AllowDBNull = false;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow NewPermissionOwner_UserGroupRow() {
+                return ((PermissionOwner_UserGroupRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new PermissionOwner_UserGroupRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(PermissionOwner_UserGroupRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.PermissionOwner_UserGroupRowChanged != null)) {
+                    this.PermissionOwner_UserGroupRowChanged(this, new PermissionOwner_UserGroupRowChangeEvent(((PermissionOwner_UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.PermissionOwner_UserGroupRowChanging != null)) {
+                    this.PermissionOwner_UserGroupRowChanging(this, new PermissionOwner_UserGroupRowChangeEvent(((PermissionOwner_UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.PermissionOwner_UserGroupRowDeleted != null)) {
+                    this.PermissionOwner_UserGroupRowDeleted(this, new PermissionOwner_UserGroupRowChangeEvent(((PermissionOwner_UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.PermissionOwner_UserGroupRowDeleting != null)) {
+                    this.PermissionOwner_UserGroupRowDeleting(this, new PermissionOwner_UserGroupRowChangeEvent(((PermissionOwner_UserGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemovePermissionOwner_UserGroupRow(PermissionOwner_UserGroupRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "PermissionOwner_UserGroupDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class ClientGroupDataTable : global::System.Data.TypedTableBase<ClientGroupRow> {
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupDataTable() {
+                this.TableName = "ClientGroup";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroupDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected ClientGroupDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow this[int index] {
+                get {
+                    return ((ClientGroupRow)(this.Rows[index]));
+                }
+            }
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowChanging;
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowChanged;
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowDeleting;
+            
+            public event ClientGroupRowChangeEventHandler ClientGroupRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddClientGroupRow(ClientGroupRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow AddClientGroupRow(ResourceRow parentResourceRowByClientGroup_is_a_Resource) {
+                ClientGroupRow rowClientGroupRow = ((ClientGroupRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null};
+                if ((parentResourceRowByClientGroup_is_a_Resource != null)) {
+                    columnValuesArray[0] = parentResourceRowByClientGroup_is_a_Resource[0];
+                }
+                rowClientGroupRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowClientGroupRow);
+                return rowClientGroupRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow FindByResourceId(long ResourceId) {
+                return ((ClientGroupRow)(this.Rows.Find(new object[] {
+                            ResourceId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                ClientGroupDataTable cln = ((ClientGroupDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new ClientGroupDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnResourceId = base.Columns["ResourceId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnResourceId}, true));
+                this.columnResourceId.AllowDBNull = false;
+                this.columnResourceId.Unique = true;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow NewClientGroupRow() {
+                return ((ClientGroupRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new ClientGroupRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(ClientGroupRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.ClientGroupRowChanged != null)) {
+                    this.ClientGroupRowChanged(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.ClientGroupRowChanging != null)) {
+                    this.ClientGroupRowChanging(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.ClientGroupRowDeleted != null)) {
+                    this.ClientGroupRowDeleted(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.ClientGroupRowDeleting != null)) {
+                    this.ClientGroupRowDeleting(this, new ClientGroupRowChangeEvent(((ClientGroupRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveClientGroupRow(ClientGroupRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "ClientGroupDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class JobDataTable : global::System.Data.TypedTableBase<JobRow> {
+            
+            private global::System.Data.DataColumn columnJobId;
+            
+            private global::System.Data.DataColumn columnParentJobId;
+            
+            private global::System.Data.DataColumn columnPermissionOwnerId;
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            private global::System.Data.DataColumn columnJobState;
+            
+            private global::System.Data.DataColumn columnPercentage;
+            
+            private global::System.Data.DataColumn columnSerializedJob;
+            
+            private global::System.Data.DataColumn columnDateCreated;
+            
+            private global::System.Data.DataColumn columnDateCalculated;
+            
+            private global::System.Data.DataColumn columnPriority;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobDataTable() {
+                this.TableName = "Job";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal JobDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected JobDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobIdColumn {
+                get {
+                    return this.columnJobId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ParentJobIdColumn {
+                get {
+                    return this.columnParentJobId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PermissionOwnerIdColumn {
+                get {
+                    return this.columnPermissionOwnerId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobStateColumn {
+                get {
+                    return this.columnJobState;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PercentageColumn {
+                get {
+                    return this.columnPercentage;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn SerializedJobColumn {
+                get {
+                    return this.columnSerializedJob;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn DateCreatedColumn {
+                get {
+                    return this.columnDateCreated;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn DateCalculatedColumn {
+                get {
+                    return this.columnDateCalculated;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PriorityColumn {
+                get {
+                    return this.columnPriority;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow this[int index] {
+                get {
+                    return ((JobRow)(this.Rows[index]));
+                }
+            }
+            
+            public event JobRowChangeEventHandler JobRowChanging;
+            
+            public event JobRowChangeEventHandler JobRowChanged;
+            
+            public event JobRowChangeEventHandler JobRowDeleting;
+            
+            public event JobRowChangeEventHandler JobRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddJobRow(JobRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow AddJobRow(long ParentJobId, HiveUserRow parentHiveUserRowByR_35, ClientRow parentClientRowByR_21, string JobState, double Percentage, byte[] SerializedJob, System.DateTime DateCreated, System.DateTime DateCalculated, int Priority) {
+                JobRow rowJobRow = ((JobRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        ParentJobId,
+                        null,
+                        null,
+                        JobState,
+                        Percentage,
+                        SerializedJob,
+                        DateCreated,
+                        DateCalculated,
+                        Priority};
+                if ((parentHiveUserRowByR_35 != null)) {
+                    columnValuesArray[2] = parentHiveUserRowByR_35[0];
+                }
+                if ((parentClientRowByR_21 != null)) {
+                    columnValuesArray[3] = parentClientRowByR_21[0];
+                }
+                rowJobRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowJobRow);
+                return rowJobRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow FindByJobId(long JobId) {
+                return ((JobRow)(this.Rows.Find(new object[] {
+                            JobId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                JobDataTable cln = ((JobDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new JobDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnJobId = base.Columns["JobId"];
+                this.columnParentJobId = base.Columns["ParentJobId"];
+                this.columnPermissionOwnerId = base.Columns["PermissionOwnerId"];
+                this.columnResourceId = base.Columns["ResourceId"];
+                this.columnJobState = base.Columns["JobState"];
+                this.columnPercentage = base.Columns["Percentage"];
+                this.columnSerializedJob = base.Columns["SerializedJob"];
+                this.columnDateCreated = base.Columns["DateCreated"];
+                this.columnDateCalculated = base.Columns["DateCalculated"];
+                this.columnPriority = base.Columns["Priority"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnJobId = new global::System.Data.DataColumn("JobId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobId);
+                this.columnParentJobId = new global::System.Data.DataColumn("ParentJobId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnParentJobId);
+                this.columnPermissionOwnerId = new global::System.Data.DataColumn("PermissionOwnerId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPermissionOwnerId);
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.columnJobState = new global::System.Data.DataColumn("JobState", typeof(string), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobState);
+                this.columnPercentage = new global::System.Data.DataColumn("Percentage", typeof(double), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPercentage);
+                this.columnSerializedJob = new global::System.Data.DataColumn("SerializedJob", typeof(byte[]), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnSerializedJob);
+                this.columnDateCreated = new global::System.Data.DataColumn("DateCreated", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnDateCreated);
+                this.columnDateCalculated = new global::System.Data.DataColumn("DateCalculated", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnDateCalculated);
+                this.columnPriority = new global::System.Data.DataColumn("Priority", typeof(int), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPriority);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnJobId}, true));
+                this.columnJobId.AutoIncrement = true;
+                this.columnJobId.AutoIncrementSeed = -1;
+                this.columnJobId.AutoIncrementStep = -1;
+                this.columnJobId.AllowDBNull = false;
+                this.columnJobId.ReadOnly = true;
+                this.columnJobId.Unique = true;
+                this.columnJobState.MaxLength = 18;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow NewJobRow() {
+                return ((JobRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new JobRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(JobRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.JobRowChanged != null)) {
+                    this.JobRowChanged(this, new JobRowChangeEvent(((JobRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.JobRowChanging != null)) {
+                    this.JobRowChanging(this, new JobRowChangeEvent(((JobRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.JobRowDeleted != null)) {
+                    this.JobRowDeleted(this, new JobRowChangeEvent(((JobRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.JobRowDeleting != null)) {
+                    this.JobRowDeleting(this, new JobRowChangeEvent(((JobRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveJobRow(JobRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "JobDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class ClientGroup_ResourceDataTable : global::System.Data.TypedTableBase<ClientGroup_ResourceRow> {
+            
+            private global::System.Data.DataColumn columnClientGroupId;
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceDataTable() {
+                this.TableName = "ClientGroup_Resource";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroup_ResourceDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected ClientGroup_ResourceDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ClientGroupIdColumn {
+                get {
+                    return this.columnClientGroupId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow this[int index] {
+                get {
+                    return ((ClientGroup_ResourceRow)(this.Rows[index]));
+                }
+            }
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowChanging;
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowChanged;
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowDeleting;
+            
+            public event ClientGroup_ResourceRowChangeEventHandler ClientGroup_ResourceRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddClientGroup_ResourceRow(ClientGroup_ResourceRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow AddClientGroup_ResourceRow(ClientGroupRow parentClientGroupRowByR_52, ResourceRow parentResourceRowByR_59) {
+                ClientGroup_ResourceRow rowClientGroup_ResourceRow = ((ClientGroup_ResourceRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        null};
+                if ((parentClientGroupRowByR_52 != null)) {
+                    columnValuesArray[0] = parentClientGroupRowByR_52[0];
+                }
+                if ((parentResourceRowByR_59 != null)) {
+                    columnValuesArray[1] = parentResourceRowByR_59[0];
+                }
+                rowClientGroup_ResourceRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowClientGroup_ResourceRow);
+                return rowClientGroup_ResourceRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow FindByClientGroupIdResourceId(long ClientGroupId, long ResourceId) {
+                return ((ClientGroup_ResourceRow)(this.Rows.Find(new object[] {
+                            ClientGroupId,
+                            ResourceId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                ClientGroup_ResourceDataTable cln = ((ClientGroup_ResourceDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new ClientGroup_ResourceDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnClientGroupId = base.Columns["ClientGroupId"];
+                this.columnResourceId = base.Columns["ResourceId"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnClientGroupId = new global::System.Data.DataColumn("ClientGroupId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnClientGroupId);
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnClientGroupId,
+                                this.columnResourceId}, true));
+                this.columnClientGroupId.AllowDBNull = false;
+                this.columnResourceId.AllowDBNull = false;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow NewClientGroup_ResourceRow() {
+                return ((ClientGroup_ResourceRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new ClientGroup_ResourceRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(ClientGroup_ResourceRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.ClientGroup_ResourceRowChanged != null)) {
+                    this.ClientGroup_ResourceRowChanged(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.ClientGroup_ResourceRowChanging != null)) {
+                    this.ClientGroup_ResourceRowChanging(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.ClientGroup_ResourceRowDeleted != null)) {
+                    this.ClientGroup_ResourceRowDeleted(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.ClientGroup_ResourceRowDeleting != null)) {
+                    this.ClientGroup_ResourceRowDeleting(this, new ClientGroup_ResourceRowChangeEvent(((ClientGroup_ResourceRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveClientGroup_ResourceRow(ClientGroup_ResourceRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "ClientGroup_ResourceDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents the strongly named DataTable class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        [global::System.Serializable()]
+        [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")]
+        public partial class JobResultDataTable : global::System.Data.TypedTableBase<JobResultRow> {
+            
+            private global::System.Data.DataColumn columnJobResultId;
+            
+            private global::System.Data.DataColumn columnJobId;
+            
+            private global::System.Data.DataColumn columnJobResult;
+            
+            private global::System.Data.DataColumn columnResourceId;
+            
+            private global::System.Data.DataColumn columnMessage;
+            
+            private global::System.Data.DataColumn columnPercentage;
+            
+            private global::System.Data.DataColumn columnDateFinished;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultDataTable() {
+                this.TableName = "JobResult";
+                this.BeginInit();
+                this.InitClass();
+                this.EndInit();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal JobResultDataTable(global::System.Data.DataTable table) {
+                this.TableName = table.TableName;
+                if ((table.CaseSensitive != table.DataSet.CaseSensitive)) {
+                    this.CaseSensitive = table.CaseSensitive;
+                }
+                if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) {
+                    this.Locale = table.Locale;
+                }
+                if ((table.Namespace != table.DataSet.Namespace)) {
+                    this.Namespace = table.Namespace;
+                }
+                this.Prefix = table.Prefix;
+                this.MinimumCapacity = table.MinimumCapacity;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected JobResultDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : 
+                    base(info, context) {
+                this.InitVars();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobResultIdColumn {
+                get {
+                    return this.columnJobResultId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobIdColumn {
+                get {
+                    return this.columnJobId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn JobResultColumn {
+                get {
+                    return this.columnJobResult;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn ResourceIdColumn {
+                get {
+                    return this.columnResourceId;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn MessageColumn {
+                get {
+                    return this.columnMessage;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn PercentageColumn {
+                get {
+                    return this.columnPercentage;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataColumn DateFinishedColumn {
+                get {
+                    return this.columnDateFinished;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            [global::System.ComponentModel.Browsable(false)]
+            public int Count {
+                get {
+                    return this.Rows.Count;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow this[int index] {
+                get {
+                    return ((JobResultRow)(this.Rows[index]));
+                }
+            }
+            
+            public event JobResultRowChangeEventHandler JobResultRowChanging;
+            
+            public event JobResultRowChangeEventHandler JobResultRowChanged;
+            
+            public event JobResultRowChangeEventHandler JobResultRowDeleting;
+            
+            public event JobResultRowChangeEventHandler JobResultRowDeleted;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void AddJobResultRow(JobResultRow row) {
+                this.Rows.Add(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow AddJobResultRow(JobRow parentJobRowByR_14, byte[] JobResult, long ResourceId, string Message, double Percentage, System.DateTime DateFinished) {
+                JobResultRow rowJobResultRow = ((JobResultRow)(this.NewRow()));
+                object[] columnValuesArray = new object[] {
+                        null,
+                        null,
+                        JobResult,
+                        ResourceId,
+                        Message,
+                        Percentage,
+                        DateFinished};
+                if ((parentJobRowByR_14 != null)) {
+                    columnValuesArray[1] = parentJobRowByR_14[0];
+                }
+                rowJobResultRow.ItemArray = columnValuesArray;
+                this.Rows.Add(rowJobResultRow);
+                return rowJobResultRow;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow FindByJobResultId(long JobResultId) {
+                return ((JobResultRow)(this.Rows.Find(new object[] {
+                            JobResultId})));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public override global::System.Data.DataTable Clone() {
+                JobResultDataTable cln = ((JobResultDataTable)(base.Clone()));
+                cln.InitVars();
+                return cln;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataTable CreateInstance() {
+                return new JobResultDataTable();
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal void InitVars() {
+                this.columnJobResultId = base.Columns["JobResultId"];
+                this.columnJobId = base.Columns["JobId"];
+                this.columnJobResult = base.Columns["JobResult"];
+                this.columnResourceId = base.Columns["ResourceId"];
+                this.columnMessage = base.Columns["Message"];
+                this.columnPercentage = base.Columns["Percentage"];
+                this.columnDateFinished = base.Columns["DateFinished"];
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private void InitClass() {
+                this.columnJobResultId = new global::System.Data.DataColumn("JobResultId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobResultId);
+                this.columnJobId = new global::System.Data.DataColumn("JobId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobId);
+                this.columnJobResult = new global::System.Data.DataColumn("JobResult", typeof(byte[]), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnJobResult);
+                this.columnResourceId = new global::System.Data.DataColumn("ResourceId", typeof(long), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnResourceId);
+                this.columnMessage = new global::System.Data.DataColumn("Message", typeof(string), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnMessage);
+                this.columnPercentage = new global::System.Data.DataColumn("Percentage", typeof(double), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnPercentage);
+                this.columnDateFinished = new global::System.Data.DataColumn("DateFinished", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element);
+                base.Columns.Add(this.columnDateFinished);
+                this.Constraints.Add(new global::System.Data.UniqueConstraint("Constraint1", new global::System.Data.DataColumn[] {
+                                this.columnJobResultId}, true));
+                this.columnJobResultId.AutoIncrement = true;
+                this.columnJobResultId.AutoIncrementSeed = -1;
+                this.columnJobResultId.AutoIncrementStep = -1;
+                this.columnJobResultId.AllowDBNull = false;
+                this.columnJobResultId.ReadOnly = true;
+                this.columnJobResultId.Unique = true;
+                this.columnMessage.MaxLength = 2147483647;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow NewJobResultRow() {
+                return ((JobResultRow)(this.NewRow()));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) {
+                return new JobResultRow(builder);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override global::System.Type GetRowType() {
+                return typeof(JobResultRow);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanged(e);
+                if ((this.JobResultRowChanged != null)) {
+                    this.JobResultRowChanged(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowChanging(e);
+                if ((this.JobResultRowChanging != null)) {
+                    this.JobResultRowChanging(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleted(e);
+                if ((this.JobResultRowDeleted != null)) {
+                    this.JobResultRowDeleted(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) {
+                base.OnRowDeleting(e);
+                if ((this.JobResultRowDeleting != null)) {
+                    this.JobResultRowDeleting(this, new JobResultRowChangeEvent(((JobResultRow)(e.Row)), e.Action));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void RemoveJobResultRow(JobResultRow row) {
+                this.Rows.Remove(row);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) {
+                global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType();
+                global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence();
+                dsHiveServer ds = new dsHiveServer();
+                global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny();
+                any1.Namespace = "http://www.w3.org/2001/XMLSchema";
+                any1.MinOccurs = new decimal(0);
+                any1.MaxOccurs = decimal.MaxValue;
+                any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any1);
+                global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny();
+                any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1";
+                any2.MinOccurs = new decimal(1);
+                any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax;
+                sequence.Items.Add(any2);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute1.Name = "namespace";
+                attribute1.FixedValue = ds.Namespace;
+                type.Attributes.Add(attribute1);
+                global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute();
+                attribute2.Name = "tableTypeName";
+                attribute2.FixedValue = "JobResultDataTable";
+                type.Attributes.Add(attribute2);
+                type.Particle = sequence;
+                global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable();
+                if (xs.Contains(dsSchema.TargetNamespace)) {
+                    global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream();
+                    global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream();
+                    try {
+                        global::System.Xml.Schema.XmlSchema schema = null;
+                        dsSchema.Write(s1);
+                        for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) {
+                            schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current));
+                            s2.SetLength(0);
+                            schema.Write(s2);
+                            if ((s1.Length == s2.Length)) {
+                                s1.Position = 0;
+                                s2.Position = 0;
+                                for (; ((s1.Position != s1.Length) 
+                                            && (s1.ReadByte() == s2.ReadByte())); ) {
+                                    ;
+                                }
+                                if ((s1.Position == s1.Length)) {
+                                    return type;
+                                }
+                            }
+                        }
+                    }
+                    finally {
+                        if ((s1 != null)) {
+                            s1.Close();
+                        }
+                        if ((s2 != null)) {
+                            s2.Close();
+                        }
+                    }
+                }
+                xs.Add(dsSchema);
+                return type;
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class ResourceRow : global::System.Data.DataRow {
+            
+            private ResourceDataTable tableResource;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ResourceRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableResource = ((ResourceDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    return ((long)(this[this.tableResource.ResourceIdColumn]));
+                }
+                set {
+                    this[this.tableResource.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public string Name {
+                get {
+                    try {
+                        return ((string)(this[this.tableResource.NameColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Name\' in table \'Resource\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableResource.NameColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsNameNull() {
+                return this.IsNull(this.tableResource.NameColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetNameNull() {
+                this[this.tableResource.NameColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow[] GetClientRows() {
+                if ((this.Table.ChildRelations["Client_is_a_Resource"] == null)) {
+                    return new ClientRow[0];
+                }
+                else {
+                    return ((ClientRow[])(base.GetChildRows(this.Table.ChildRelations["Client_is_a_Resource"])));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow[] GetClientGroupRows() {
+                if ((this.Table.ChildRelations["ClientGroup_is_a_Resource"] == null)) {
+                    return new ClientGroupRow[0];
+                }
+                else {
+                    return ((ClientGroupRow[])(base.GetChildRows(this.Table.ChildRelations["ClientGroup_is_a_Resource"])));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow[] GetClientGroup_ResourceRows() {
+                if ((this.Table.ChildRelations["R_59"] == null)) {
+                    return new ClientGroup_ResourceRow[0];
+                }
+                else {
+                    return ((ClientGroup_ResourceRow[])(base.GetChildRows(this.Table.ChildRelations["R_59"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class ClientRow : global::System.Data.DataRow {
+            
+            private ClientDataTable tableClient;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableClient = ((ClientDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    return ((long)(this[this.tableClient.ResourceIdColumn]));
+                }
+                set {
+                    this[this.tableClient.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public System.Guid GUID {
+                get {
+                    try {
+                        return ((global::System.Guid)(this[this.tableClient.GUIDColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'GUID\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.GUIDColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public int CPUSpeed {
+                get {
+                    try {
+                        return ((int)(this[this.tableClient.CPUSpeedColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'CPUSpeed\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.CPUSpeedColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public int Memory {
+                get {
+                    try {
+                        return ((int)(this[this.tableClient.MemoryColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Memory\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.MemoryColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public System.DateTime Login {
+                get {
+                    try {
+                        return ((global::System.DateTime)(this[this.tableClient.LoginColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Login\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.LoginColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public string Status {
+                get {
+                    try {
+                        return ((string)(this[this.tableClient.StatusColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Status\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.StatusColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ClientConfigId {
+                get {
+                    try {
+                        return ((long)(this[this.tableClient.ClientConfigIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'ClientConfigId\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.ClientConfigIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public int NumberOfCores {
+                get {
+                    try {
+                        return ((int)(this[this.tableClient.NumberOfCoresColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'NumberOfCores\' in table \'Client\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableClient.NumberOfCoresColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow ResourceRow {
+                get {
+                    return ((ResourceRow)(this.GetParentRow(this.Table.ParentRelations["Client_is_a_Resource"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["Client_is_a_Resource"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsGUIDNull() {
+                return this.IsNull(this.tableClient.GUIDColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetGUIDNull() {
+                this[this.tableClient.GUIDColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsCPUSpeedNull() {
+                return this.IsNull(this.tableClient.CPUSpeedColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetCPUSpeedNull() {
+                this[this.tableClient.CPUSpeedColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsMemoryNull() {
+                return this.IsNull(this.tableClient.MemoryColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetMemoryNull() {
+                this[this.tableClient.MemoryColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsLoginNull() {
+                return this.IsNull(this.tableClient.LoginColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetLoginNull() {
+                this[this.tableClient.LoginColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsStatusNull() {
+                return this.IsNull(this.tableClient.StatusColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetStatusNull() {
+                this[this.tableClient.StatusColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsClientConfigIdNull() {
+                return this.IsNull(this.tableClient.ClientConfigIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetClientConfigIdNull() {
+                this[this.tableClient.ClientConfigIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsNumberOfCoresNull() {
+                return this.IsNull(this.tableClient.NumberOfCoresColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetNumberOfCoresNull() {
+                this[this.tableClient.NumberOfCoresColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow[] GetJobRows() {
+                if ((this.Table.ChildRelations["R_21"] == null)) {
+                    return new JobRow[0];
+                }
+                else {
+                    return ((JobRow[])(base.GetChildRows(this.Table.ChildRelations["R_21"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class HiveUserRow : global::System.Data.DataRow {
+            
+            private HiveUserDataTable tableHiveUser;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal HiveUserRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableHiveUser = ((HiveUserDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long PermissionOwnerId {
+                get {
+                    return ((long)(this[this.tableHiveUser.PermissionOwnerIdColumn]));
+                }
+                set {
+                    this[this.tableHiveUser.PermissionOwnerIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public string Password {
+                get {
+                    try {
+                        return ((string)(this[this.tableHiveUser.PasswordColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Password\' in table \'HiveUser\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableHiveUser.PasswordColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow PermissionOwnerRow {
+                get {
+                    return ((PermissionOwnerRow)(this.GetParentRow(this.Table.ParentRelations["User_is_a_PermissionOwner"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["User_is_a_PermissionOwner"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsPasswordNull() {
+                return this.IsNull(this.tableHiveUser.PasswordColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetPasswordNull() {
+                this[this.tableHiveUser.PasswordColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow[] GetJobRows() {
+                if ((this.Table.ChildRelations["R_35"] == null)) {
+                    return new JobRow[0];
+                }
+                else {
+                    return ((JobRow[])(base.GetChildRows(this.Table.ChildRelations["R_35"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class PermissionOwnerRow : global::System.Data.DataRow {
+            
+            private PermissionOwnerDataTable tablePermissionOwner;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal PermissionOwnerRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tablePermissionOwner = ((PermissionOwnerDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long PermissionOwnerId {
+                get {
+                    return ((long)(this[this.tablePermissionOwner.PermissionOwnerIdColumn]));
+                }
+                set {
+                    this[this.tablePermissionOwner.PermissionOwnerIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public string Name {
+                get {
+                    try {
+                        return ((string)(this[this.tablePermissionOwner.NameColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Name\' in table \'PermissionOwner\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tablePermissionOwner.NameColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsNameNull() {
+                return this.IsNull(this.tablePermissionOwner.NameColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetNameNull() {
+                this[this.tablePermissionOwner.NameColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow[] GetHiveUserRows() {
+                if ((this.Table.ChildRelations["User_is_a_PermissionOwner"] == null)) {
+                    return new HiveUserRow[0];
+                }
+                else {
+                    return ((HiveUserRow[])(base.GetChildRows(this.Table.ChildRelations["User_is_a_PermissionOwner"])));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow[] GetUserGroupRows() {
+                if ((this.Table.ChildRelations["UserGroup_is_a_PermissionOwner"] == null)) {
+                    return new UserGroupRow[0];
+                }
+                else {
+                    return ((UserGroupRow[])(base.GetChildRows(this.Table.ChildRelations["UserGroup_is_a_PermissionOwner"])));
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow[] GetPermissionOwner_UserGroupRows() {
+                if ((this.Table.ChildRelations["R_44"] == null)) {
+                    return new PermissionOwner_UserGroupRow[0];
+                }
+                else {
+                    return ((PermissionOwner_UserGroupRow[])(base.GetChildRows(this.Table.ChildRelations["R_44"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class UserGroupRow : global::System.Data.DataRow {
+            
+            private UserGroupDataTable tableUserGroup;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal UserGroupRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableUserGroup = ((UserGroupDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long PermissionOwnerId {
+                get {
+                    return ((long)(this[this.tableUserGroup.PermissionOwnerIdColumn]));
+                }
+                set {
+                    this[this.tableUserGroup.PermissionOwnerIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow PermissionOwnerRow {
+                get {
+                    return ((PermissionOwnerRow)(this.GetParentRow(this.Table.ParentRelations["UserGroup_is_a_PermissionOwner"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["UserGroup_is_a_PermissionOwner"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow[] GetPermissionOwner_UserGroupRows() {
+                if ((this.Table.ChildRelations["R_57"] == null)) {
+                    return new PermissionOwner_UserGroupRow[0];
+                }
+                else {
+                    return ((PermissionOwner_UserGroupRow[])(base.GetChildRows(this.Table.ChildRelations["R_57"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class PermissionOwner_UserGroupRow : global::System.Data.DataRow {
+            
+            private PermissionOwner_UserGroupDataTable tablePermissionOwner_UserGroup;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal PermissionOwner_UserGroupRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tablePermissionOwner_UserGroup = ((PermissionOwner_UserGroupDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long PermissionOwnerId {
+                get {
+                    return ((long)(this[this.tablePermissionOwner_UserGroup.PermissionOwnerIdColumn]));
+                }
+                set {
+                    this[this.tablePermissionOwner_UserGroup.PermissionOwnerIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long UserGroupId {
+                get {
+                    return ((long)(this[this.tablePermissionOwner_UserGroup.UserGroupIdColumn]));
+                }
+                set {
+                    this[this.tablePermissionOwner_UserGroup.UserGroupIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow PermissionOwnerRow {
+                get {
+                    return ((PermissionOwnerRow)(this.GetParentRow(this.Table.ParentRelations["R_44"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_44"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow UserGroupRow {
+                get {
+                    return ((UserGroupRow)(this.GetParentRow(this.Table.ParentRelations["R_57"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_57"]);
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class ClientGroupRow : global::System.Data.DataRow {
+            
+            private ClientGroupDataTable tableClientGroup;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroupRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableClientGroup = ((ClientGroupDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    return ((long)(this[this.tableClientGroup.ResourceIdColumn]));
+                }
+                set {
+                    this[this.tableClientGroup.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow ResourceRow {
+                get {
+                    return ((ResourceRow)(this.GetParentRow(this.Table.ParentRelations["ClientGroup_is_a_Resource"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["ClientGroup_is_a_Resource"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow[] GetClientGroup_ResourceRows() {
+                if ((this.Table.ChildRelations["R_52"] == null)) {
+                    return new ClientGroup_ResourceRow[0];
+                }
+                else {
+                    return ((ClientGroup_ResourceRow[])(base.GetChildRows(this.Table.ChildRelations["R_52"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class JobRow : global::System.Data.DataRow {
+            
+            private JobDataTable tableJob;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal JobRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableJob = ((JobDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long JobId {
+                get {
+                    return ((long)(this[this.tableJob.JobIdColumn]));
+                }
+                set {
+                    this[this.tableJob.JobIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ParentJobId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJob.ParentJobIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'ParentJobId\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.ParentJobIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long PermissionOwnerId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJob.PermissionOwnerIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'PermissionOwnerId\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.PermissionOwnerIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJob.ResourceIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'ResourceId\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public string JobState {
+                get {
+                    try {
+                        return ((string)(this[this.tableJob.JobStateColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'JobState\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.JobStateColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public double Percentage {
+                get {
+                    try {
+                        return ((double)(this[this.tableJob.PercentageColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Percentage\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.PercentageColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public byte[] SerializedJob {
+                get {
+                    try {
+                        return ((byte[])(this[this.tableJob.SerializedJobColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'SerializedJob\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.SerializedJobColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public System.DateTime DateCreated {
+                get {
+                    try {
+                        return ((global::System.DateTime)(this[this.tableJob.DateCreatedColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'DateCreated\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.DateCreatedColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public System.DateTime DateCalculated {
+                get {
+                    try {
+                        return ((global::System.DateTime)(this[this.tableJob.DateCalculatedColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'DateCalculated\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.DateCalculatedColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public int Priority {
+                get {
+                    try {
+                        return ((int)(this[this.tableJob.PriorityColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Priority\' in table \'Job\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJob.PriorityColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow ClientRow {
+                get {
+                    return ((ClientRow)(this.GetParentRow(this.Table.ParentRelations["R_21"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_21"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow HiveUserRow {
+                get {
+                    return ((HiveUserRow)(this.GetParentRow(this.Table.ParentRelations["R_35"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_35"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsParentJobIdNull() {
+                return this.IsNull(this.tableJob.ParentJobIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetParentJobIdNull() {
+                this[this.tableJob.ParentJobIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsPermissionOwnerIdNull() {
+                return this.IsNull(this.tableJob.PermissionOwnerIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetPermissionOwnerIdNull() {
+                this[this.tableJob.PermissionOwnerIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsResourceIdNull() {
+                return this.IsNull(this.tableJob.ResourceIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetResourceIdNull() {
+                this[this.tableJob.ResourceIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsJobStateNull() {
+                return this.IsNull(this.tableJob.JobStateColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetJobStateNull() {
+                this[this.tableJob.JobStateColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsPercentageNull() {
+                return this.IsNull(this.tableJob.PercentageColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetPercentageNull() {
+                this[this.tableJob.PercentageColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsSerializedJobNull() {
+                return this.IsNull(this.tableJob.SerializedJobColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetSerializedJobNull() {
+                this[this.tableJob.SerializedJobColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsDateCreatedNull() {
+                return this.IsNull(this.tableJob.DateCreatedColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetDateCreatedNull() {
+                this[this.tableJob.DateCreatedColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsDateCalculatedNull() {
+                return this.IsNull(this.tableJob.DateCalculatedColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetDateCalculatedNull() {
+                this[this.tableJob.DateCalculatedColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsPriorityNull() {
+                return this.IsNull(this.tableJob.PriorityColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetPriorityNull() {
+                this[this.tableJob.PriorityColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow[] GetJobResultRows() {
+                if ((this.Table.ChildRelations["R_14"] == null)) {
+                    return new JobResultRow[0];
+                }
+                else {
+                    return ((JobResultRow[])(base.GetChildRows(this.Table.ChildRelations["R_14"])));
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class ClientGroup_ResourceRow : global::System.Data.DataRow {
+            
+            private ClientGroup_ResourceDataTable tableClientGroup_Resource;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal ClientGroup_ResourceRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableClientGroup_Resource = ((ClientGroup_ResourceDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ClientGroupId {
+                get {
+                    return ((long)(this[this.tableClientGroup_Resource.ClientGroupIdColumn]));
+                }
+                set {
+                    this[this.tableClientGroup_Resource.ClientGroupIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    return ((long)(this[this.tableClientGroup_Resource.ResourceIdColumn]));
+                }
+                set {
+                    this[this.tableClientGroup_Resource.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow ClientGroupRow {
+                get {
+                    return ((ClientGroupRow)(this.GetParentRow(this.Table.ParentRelations["R_52"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_52"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow ResourceRow {
+                get {
+                    return ((ResourceRow)(this.GetParentRow(this.Table.ParentRelations["R_59"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_59"]);
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Represents strongly named DataRow class.
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public partial class JobResultRow : global::System.Data.DataRow {
+            
+            private JobResultDataTable tableJobResult;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal JobResultRow(global::System.Data.DataRowBuilder rb) : 
+                    base(rb) {
+                this.tableJobResult = ((JobResultDataTable)(this.Table));
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long JobResultId {
+                get {
+                    return ((long)(this[this.tableJobResult.JobResultIdColumn]));
+                }
+                set {
+                    this[this.tableJobResult.JobResultIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long JobId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJobResult.JobIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'JobId\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.JobIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public byte[] JobResult {
+                get {
+                    try {
+                        return ((byte[])(this[this.tableJobResult.JobResultColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'JobResult\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.JobResultColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public long ResourceId {
+                get {
+                    try {
+                        return ((long)(this[this.tableJobResult.ResourceIdColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'ResourceId\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.ResourceIdColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public string Message {
+                get {
+                    try {
+                        return ((string)(this[this.tableJobResult.MessageColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Message\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.MessageColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public double Percentage {
+                get {
+                    try {
+                        return ((double)(this[this.tableJobResult.PercentageColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'Percentage\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.PercentageColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public System.DateTime DateFinished {
+                get {
+                    try {
+                        return ((global::System.DateTime)(this[this.tableJobResult.DateFinishedColumn]));
+                    }
+                    catch (global::System.InvalidCastException e) {
+                        throw new global::System.Data.StrongTypingException("The value for column \'DateFinished\' in table \'JobResult\' is DBNull.", e);
+                    }
+                }
+                set {
+                    this[this.tableJobResult.DateFinishedColumn] = value;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow JobRow {
+                get {
+                    return ((JobRow)(this.GetParentRow(this.Table.ParentRelations["R_14"])));
+                }
+                set {
+                    this.SetParentRow(value, this.Table.ParentRelations["R_14"]);
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsJobIdNull() {
+                return this.IsNull(this.tableJobResult.JobIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetJobIdNull() {
+                this[this.tableJobResult.JobIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsJobResultNull() {
+                return this.IsNull(this.tableJobResult.JobResultColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetJobResultNull() {
+                this[this.tableJobResult.JobResultColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsResourceIdNull() {
+                return this.IsNull(this.tableJobResult.ResourceIdColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetResourceIdNull() {
+                this[this.tableJobResult.ResourceIdColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsMessageNull() {
+                return this.IsNull(this.tableJobResult.MessageColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetMessageNull() {
+                this[this.tableJobResult.MessageColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsPercentageNull() {
+                return this.IsNull(this.tableJobResult.PercentageColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetPercentageNull() {
+                this[this.tableJobResult.PercentageColumn] = global::System.Convert.DBNull;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public bool IsDateFinishedNull() {
+                return this.IsNull(this.tableJobResult.DateFinishedColumn);
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public void SetDateFinishedNull() {
+                this[this.tableJobResult.DateFinishedColumn] = global::System.Convert.DBNull;
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class ResourceRowChangeEvent : global::System.EventArgs {
+            
+            private ResourceRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRowChangeEvent(ResourceRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ResourceRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class ClientRowChangeEvent : global::System.EventArgs {
+            
+            private ClientRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRowChangeEvent(ClientRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class HiveUserRowChangeEvent : global::System.EventArgs {
+            
+            private HiveUserRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRowChangeEvent(HiveUserRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public HiveUserRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class PermissionOwnerRowChangeEvent : global::System.EventArgs {
+            
+            private PermissionOwnerRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRowChangeEvent(PermissionOwnerRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwnerRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class UserGroupRowChangeEvent : global::System.EventArgs {
+            
+            private UserGroupRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRowChangeEvent(UserGroupRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public UserGroupRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class PermissionOwner_UserGroupRowChangeEvent : global::System.EventArgs {
+            
+            private PermissionOwner_UserGroupRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRowChangeEvent(PermissionOwner_UserGroupRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public PermissionOwner_UserGroupRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class ClientGroupRowChangeEvent : global::System.EventArgs {
+            
+            private ClientGroupRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRowChangeEvent(ClientGroupRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroupRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class JobRowChangeEvent : global::System.EventArgs {
+            
+            private JobRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRowChangeEvent(JobRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class ClientGroup_ResourceRowChangeEvent : global::System.EventArgs {
+            
+            private ClientGroup_ResourceRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRowChangeEvent(ClientGroup_ResourceRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public ClientGroup_ResourceRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+        
+        /// <summary>
+        ///Row event argument class
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public class JobResultRowChangeEvent : global::System.EventArgs {
+            
+            private JobResultRow eventRow;
+            
+            private global::System.Data.DataRowAction eventAction;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRowChangeEvent(JobResultRow row, global::System.Data.DataRowAction action) {
+                this.eventRow = row;
+                this.eventAction = action;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public JobResultRow Row {
+                get {
+                    return this.eventRow;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public global::System.Data.DataRowAction Action {
+                get {
+                    return this.eventAction;
+                }
+            }
+        }
+    }
+}
+namespace HeuristicLab.Hive.Server.ADODataAccess.dsHiveServerTableAdapters {
+    
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class ResourceTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public ResourceTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "Resource";
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            tableMapping.ColumnMappings.Add("Name", "Name");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Resource] WHERE (([ResourceId] = @Original_ResourceId) AND ((@" +
+                "IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Name", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Resource] ([Name]) VALUES (@Name);\r\nSELECT ResourceId, Name FR" +
+                "OM Resource WHERE (ResourceId = SCOPE_IDENTITY())";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Resource] SET [Name] = @Name WHERE (([ResourceId] = @Original_Resou" +
+                "rceId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)))" +
+                ";\r\nSELECT ResourceId, Name FROM Resource WHERE (ResourceId = @ResourceId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Name", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[4];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT ResourceId, Name FROM dbo.Resource";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT Resource.* FROM \r\n  Resource INNER JOIN Client ON Resource.ResourceId = Cl" +
+                "ient.ResourceId\r\n  WHERE Client.Status <> \'offline\'";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT * FROM dbo.Resource WHERE ResourceId = @ID";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ID", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[3] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[3].Connection = this.Connection;
+            this._commandCollection[3].CommandText = "SELECT * FROM dbo.Resource WHERE Name = @Name";
+            this._commandCollection[3].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[3].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 18, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.ResourceDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.ResourceDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.ResourceDataTable dataTable = new dsHiveServer.ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByActive(dsHiveServer.ResourceDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ResourceDataTable GetDataByActive() {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            dsHiveServer.ResourceDataTable dataTable = new dsHiveServer.ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.ResourceDataTable dataTable, long ID) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ID));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ResourceDataTable GetDataById(long ID) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ID));
+            dsHiveServer.ResourceDataTable dataTable = new dsHiveServer.ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByName(dsHiveServer.ResourceDataTable dataTable, string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ResourceDataTable GetDataByName(string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            dsHiveServer.ResourceDataTable dataTable = new dsHiveServer.ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.ResourceDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "Resource");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_ResourceId, string Original_Name) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_ResourceId));
+            if ((Original_Name == null)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((string)(Original_Name));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(string Name) {
+            if ((Name == null)) {
+                this.Adapter.InsertCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[0].Value = ((string)(Name));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(string Name, long Original_ResourceId, string Original_Name, long ResourceId) {
+            if ((Name == null)) {
+                this.Adapter.UpdateCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[0].Value = ((string)(Name));
+            }
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(Original_ResourceId));
+            if ((Original_Name == null)) {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((string)(Original_Name));
+            }
+            this.Adapter.UpdateCommand.Parameters[4].Value = ((long)(ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(string Name, long Original_ResourceId, string Original_Name) {
+            return this.Update(Name, Original_ResourceId, Original_Name, Original_ResourceId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class ClientTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public ClientTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "Client";
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            tableMapping.ColumnMappings.Add("GUID", "GUID");
+            tableMapping.ColumnMappings.Add("CPUSpeed", "CPUSpeed");
+            tableMapping.ColumnMappings.Add("Memory", "Memory");
+            tableMapping.ColumnMappings.Add("Login", "Login");
+            tableMapping.ColumnMappings.Add("Status", "Status");
+            tableMapping.ColumnMappings.Add("ClientConfigId", "ClientConfigId");
+            tableMapping.ColumnMappings.Add("NumberOfCores", "NumberOfCores");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = @"DELETE FROM [dbo].[Client] WHERE (([ResourceId] = @Original_ResourceId) AND ((@IsNull_GUID = 1 AND [GUID] IS NULL) OR ([GUID] = @Original_GUID)) AND ((@IsNull_CPUSpeed = 1 AND [CPUSpeed] IS NULL) OR ([CPUSpeed] = @Original_CPUSpeed)) AND ((@IsNull_Memory = 1 AND [Memory] IS NULL) OR ([Memory] = @Original_Memory)) AND ((@IsNull_Login = 1 AND [Login] IS NULL) OR ([Login] = @Original_Login)) AND ((@IsNull_Status = 1 AND [Status] IS NULL) OR ([Status] = @Original_Status)) AND ((@IsNull_ClientConfigId = 1 AND [ClientConfigId] IS NULL) OR ([ClientConfigId] = @Original_ClientConfigId)) AND ((@IsNull_NumberOfCores = 1 AND [NumberOfCores] IS NULL) OR ([NumberOfCores] = @Original_NumberOfCores)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_GUID", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_GUID", global::System.Data.SqlDbType.UniqueIdentifier, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_CPUSpeed", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "CPUSpeed", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_CPUSpeed", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "CPUSpeed", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Memory", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Memory", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Memory", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Memory", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Login", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Login", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Login", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Login", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Status", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Status", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Status", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Status", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ClientConfigId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientConfigId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ClientConfigId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientConfigId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_NumberOfCores", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "NumberOfCores", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_NumberOfCores", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "NumberOfCores", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = @"INSERT INTO [dbo].[Client] ([ResourceId], [GUID], [CPUSpeed], [Memory], [Login], [Status], [ClientConfigId], [NumberOfCores]) VALUES (@ResourceId, @GUID, @CPUSpeed, @Memory, @Login, @Status, @ClientConfigId, @NumberOfCores);
+SELECT ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberOfCores FROM Client WHERE (ResourceId = @ResourceId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@GUID", global::System.Data.SqlDbType.UniqueIdentifier, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CPUSpeed", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "CPUSpeed", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Memory", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Memory", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Login", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Login", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Status", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Status", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientConfigId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientConfigId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@NumberOfCores", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "NumberOfCores", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[Client] SET [ResourceId] = @ResourceId, [GUID] = @GUID, [CPUSpeed] = @CPUSpeed, [Memory] = @Memory, [Login] = @Login, [Status] = @Status, [ClientConfigId] = @ClientConfigId, [NumberOfCores] = @NumberOfCores WHERE (([ResourceId] = @Original_ResourceId) AND ((@IsNull_GUID = 1 AND [GUID] IS NULL) OR ([GUID] = @Original_GUID)) AND ((@IsNull_CPUSpeed = 1 AND [CPUSpeed] IS NULL) OR ([CPUSpeed] = @Original_CPUSpeed)) AND ((@IsNull_Memory = 1 AND [Memory] IS NULL) OR ([Memory] = @Original_Memory)) AND ((@IsNull_Login = 1 AND [Login] IS NULL) OR ([Login] = @Original_Login)) AND ((@IsNull_Status = 1 AND [Status] IS NULL) OR ([Status] = @Original_Status)) AND ((@IsNull_ClientConfigId = 1 AND [ClientConfigId] IS NULL) OR ([ClientConfigId] = @Original_ClientConfigId)) AND ((@IsNull_NumberOfCores = 1 AND [NumberOfCores] IS NULL) OR ([NumberOfCores] = @Original_NumberOfCores)));
+SELECT ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberOfCores FROM Client WHERE (ResourceId = @ResourceId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@GUID", global::System.Data.SqlDbType.UniqueIdentifier, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@CPUSpeed", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "CPUSpeed", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Memory", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Memory", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Login", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Login", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Status", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Status", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientConfigId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientConfigId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@NumberOfCores", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "NumberOfCores", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_GUID", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_GUID", global::System.Data.SqlDbType.UniqueIdentifier, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_CPUSpeed", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "CPUSpeed", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_CPUSpeed", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "CPUSpeed", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Memory", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Memory", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Memory", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Memory", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Login", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Login", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Login", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Login", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Status", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Status", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Status", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Status", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ClientConfigId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientConfigId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ClientConfigId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientConfigId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_NumberOfCores", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "NumberOfCores", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_NumberOfCores", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "NumberOfCores", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[4];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberO" +
+                "fCores FROM dbo.Client";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.Client WHERE Status <> \'offline\'";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT * FROM dbo.Client WHERE GUID = @ID";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ID", global::System.Data.SqlDbType.UniqueIdentifier, 16, global::System.Data.ParameterDirection.Input, 0, 0, "GUID", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[3] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[3].Connection = this.Connection;
+            this._commandCollection[3].CommandText = "SELECT * FROM dbo.Client WHERE ResourceId = @Id";
+            this._commandCollection[3].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[3].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.ClientDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.ClientDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.ClientDataTable dataTable = new dsHiveServer.ClientDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByActive(dsHiveServer.ClientDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientDataTable GetDataByActive() {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            dsHiveServer.ClientDataTable dataTable = new dsHiveServer.ClientDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.ClientDataTable dataTable, global::System.Nullable<global::System.Guid> ID) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((ID.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((System.Guid)(ID.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientDataTable GetDataById(global::System.Nullable<global::System.Guid> ID) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((ID.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((System.Guid)(ID.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            dsHiveServer.ClientDataTable dataTable = new dsHiveServer.ClientDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByResourceId(dsHiveServer.ClientDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientDataTable GetDataByResourceId(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.ClientDataTable dataTable = new dsHiveServer.ClientDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.ClientDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "Client");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_ResourceId, global::System.Nullable<global::System.Guid> Original_GUID, global::System.Nullable<int> Original_CPUSpeed, global::System.Nullable<int> Original_Memory, global::System.Nullable<global::System.DateTime> Original_Login, string Original_Status, global::System.Nullable<long> Original_ClientConfigId, global::System.Nullable<int> Original_NumberOfCores) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_ResourceId));
+            if ((Original_GUID.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((System.Guid)(Original_GUID.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Original_CPUSpeed.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[4].Value = ((int)(Original_CPUSpeed.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Memory.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[6].Value = ((int)(Original_Memory.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Login.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[7].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[8].Value = ((System.DateTime)(Original_Login.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[7].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[8].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Status == null)) {
+                this.Adapter.DeleteCommand.Parameters[9].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[10].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[9].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[10].Value = ((string)(Original_Status));
+            }
+            if ((Original_ClientConfigId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[11].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[12].Value = ((long)(Original_ClientConfigId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[11].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[12].Value = global::System.DBNull.Value;
+            }
+            if ((Original_NumberOfCores.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[13].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[14].Value = ((int)(Original_NumberOfCores.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[13].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[14].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long ResourceId, global::System.Nullable<global::System.Guid> GUID, global::System.Nullable<int> CPUSpeed, global::System.Nullable<int> Memory, global::System.Nullable<global::System.DateTime> Login, string Status, global::System.Nullable<long> ClientConfigId, global::System.Nullable<int> NumberOfCores) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(ResourceId));
+            if ((GUID.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[1].Value = ((System.Guid)(GUID.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            if ((CPUSpeed.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[2].Value = ((int)(CPUSpeed.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Memory.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[3].Value = ((int)(Memory.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            if ((Login.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[4].Value = ((System.DateTime)(Login.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            if ((Status == null)) {
+                this.Adapter.InsertCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[5].Value = ((string)(Status));
+            }
+            if ((ClientConfigId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[6].Value = ((long)(ClientConfigId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((NumberOfCores.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[7].Value = ((int)(NumberOfCores.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[7].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(
+                    long ResourceId, 
+                    global::System.Nullable<global::System.Guid> GUID, 
+                    global::System.Nullable<int> CPUSpeed, 
+                    global::System.Nullable<int> Memory, 
+                    global::System.Nullable<global::System.DateTime> Login, 
+                    string Status, 
+                    global::System.Nullable<long> ClientConfigId, 
+                    global::System.Nullable<int> NumberOfCores, 
+                    long Original_ResourceId, 
+                    global::System.Nullable<global::System.Guid> Original_GUID, 
+                    global::System.Nullable<int> Original_CPUSpeed, 
+                    global::System.Nullable<int> Original_Memory, 
+                    global::System.Nullable<global::System.DateTime> Original_Login, 
+                    string Original_Status, 
+                    global::System.Nullable<long> Original_ClientConfigId, 
+                    global::System.Nullable<int> Original_NumberOfCores) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(ResourceId));
+            if ((GUID.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[1].Value = ((System.Guid)(GUID.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            if ((CPUSpeed.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((int)(CPUSpeed.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Memory.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((int)(Memory.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            if ((Login.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[4].Value = ((System.DateTime)(Login.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            if ((Status == null)) {
+                this.Adapter.UpdateCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[5].Value = ((string)(Status));
+            }
+            if ((ClientConfigId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[6].Value = ((long)(ClientConfigId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((NumberOfCores.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[7].Value = ((int)(NumberOfCores.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[7].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[8].Value = ((long)(Original_ResourceId));
+            if ((Original_GUID.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[9].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[10].Value = ((System.Guid)(Original_GUID.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[9].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[10].Value = global::System.DBNull.Value;
+            }
+            if ((Original_CPUSpeed.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[11].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[12].Value = ((int)(Original_CPUSpeed.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[11].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[12].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Memory.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[13].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[14].Value = ((int)(Original_Memory.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[13].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[14].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Login.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[15].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[16].Value = ((System.DateTime)(Original_Login.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[15].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[16].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Status == null)) {
+                this.Adapter.UpdateCommand.Parameters[17].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[18].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[17].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[18].Value = ((string)(Original_Status));
+            }
+            if ((Original_ClientConfigId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[19].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[20].Value = ((long)(Original_ClientConfigId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[19].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[20].Value = global::System.DBNull.Value;
+            }
+            if ((Original_NumberOfCores.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[21].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[22].Value = ((int)(Original_NumberOfCores.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[21].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[22].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(global::System.Nullable<global::System.Guid> GUID, global::System.Nullable<int> CPUSpeed, global::System.Nullable<int> Memory, global::System.Nullable<global::System.DateTime> Login, string Status, global::System.Nullable<long> ClientConfigId, global::System.Nullable<int> NumberOfCores, long Original_ResourceId, global::System.Nullable<global::System.Guid> Original_GUID, global::System.Nullable<int> Original_CPUSpeed, global::System.Nullable<int> Original_Memory, global::System.Nullable<global::System.DateTime> Original_Login, string Original_Status, global::System.Nullable<long> Original_ClientConfigId, global::System.Nullable<int> Original_NumberOfCores) {
+            return this.Update(Original_ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberOfCores, Original_ResourceId, Original_GUID, Original_CPUSpeed, Original_Memory, Original_Login, Original_Status, Original_ClientConfigId, Original_NumberOfCores);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class HiveUserTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public HiveUserTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "HiveUser";
+            tableMapping.ColumnMappings.Add("PermissionOwnerId", "PermissionOwnerId");
+            tableMapping.ColumnMappings.Add("Password", "Password");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[HiveUser] WHERE (([PermissionOwnerId] = @Original_PermissionOw" +
+                "nerId) AND ((@IsNull_Password = 1 AND [Password] IS NULL) OR ([Password] = @Orig" +
+                "inal_Password)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Password", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Password", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Password", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Password", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[HiveUser] ([PermissionOwnerId], [Password]) VALUES (@Permissio" +
+                "nOwnerId, @Password);\r\nSELECT PermissionOwnerId, Password FROM HiveUser WHERE (P" +
+                "ermissionOwnerId = @PermissionOwnerId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Password", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Password", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[HiveUser] SET [PermissionOwnerId] = @PermissionOwnerId, [Password] = @Password WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ((@IsNull_Password = 1 AND [Password] IS NULL) OR ([Password] = @Original_Password)));
+SELECT PermissionOwnerId, Password FROM HiveUser WHERE (PermissionOwnerId = @PermissionOwnerId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Password", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Password", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Password", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Password", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Password", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Password", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[3];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT PermissionOwnerId, Password FROM dbo.HiveUser";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.HiveUser WHERE PermissionOwnerId = @Id";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT     HiveUser.PermissionOwnerId, HiveUser.Password\r\nFROM         HiveUser I" +
+                "NNER JOIN\r\n                      PermissionOwner ON HiveUser.PermissionOwnerId =" +
+                " PermissionOwner.PermissionOwnerId\r\nWHERE     (PermissionOwner.Name = @Name)";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 18, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.HiveUserDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.HiveUserDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.HiveUserDataTable dataTable = new dsHiveServer.HiveUserDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.HiveUserDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.HiveUserDataTable GetDataById(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.HiveUserDataTable dataTable = new dsHiveServer.HiveUserDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByName(dsHiveServer.HiveUserDataTable dataTable, string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.HiveUserDataTable GetDataByName(string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            dsHiveServer.HiveUserDataTable dataTable = new dsHiveServer.HiveUserDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.HiveUserDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "HiveUser");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_PermissionOwnerId, string Original_Password) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_PermissionOwnerId));
+            if ((Original_Password == null)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((string)(Original_Password));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long PermissionOwnerId, string Password) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            if ((Password == null)) {
+                this.Adapter.InsertCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[1].Value = ((string)(Password));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long PermissionOwnerId, string Password, long Original_PermissionOwnerId, string Original_Password) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            if ((Password == null)) {
+                this.Adapter.UpdateCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[1].Value = ((string)(Password));
+            }
+            this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(Original_PermissionOwnerId));
+            if ((Original_Password == null)) {
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[4].Value = ((string)(Original_Password));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(string Password, long Original_PermissionOwnerId, string Original_Password) {
+            return this.Update(Original_PermissionOwnerId, Password, Original_PermissionOwnerId, Original_Password);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class PermissionOwnerTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public PermissionOwnerTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "PermissionOwner";
+            tableMapping.ColumnMappings.Add("PermissionOwnerId", "PermissionOwnerId");
+            tableMapping.ColumnMappings.Add("Name", "Name");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[PermissionOwner] WHERE (([PermissionOwnerId] = @Original_Permi" +
+                "ssionOwnerId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_" +
+                "Name)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Name", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[PermissionOwner] ([Name]) VALUES (@Name);\r\nSELECT PermissionOw" +
+                "nerId, Name FROM PermissionOwner WHERE (PermissionOwnerId = SCOPE_IDENTITY())";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[PermissionOwner] SET [Name] = @Name WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)));
+SELECT PermissionOwnerId, Name FROM PermissionOwner WHERE (PermissionOwnerId = @PermissionOwnerId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Name", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Name", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[3];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT PermissionOwnerId, Name FROM dbo.PermissionOwner";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.PermissionOwner WHERE PermissionOwnerId = @Id";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT * FROM dbo.PermissionOwner WHERE Name = @Name";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 18, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.PermissionOwnerDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.PermissionOwnerDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.PermissionOwnerDataTable dataTable = new dsHiveServer.PermissionOwnerDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.PermissionOwnerDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.PermissionOwnerDataTable GetDataById(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.PermissionOwnerDataTable dataTable = new dsHiveServer.PermissionOwnerDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByName(dsHiveServer.PermissionOwnerDataTable dataTable, string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.PermissionOwnerDataTable GetDataByName(string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            dsHiveServer.PermissionOwnerDataTable dataTable = new dsHiveServer.PermissionOwnerDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.PermissionOwnerDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "PermissionOwner");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_PermissionOwnerId, string Original_Name) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_PermissionOwnerId));
+            if ((Original_Name == null)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((string)(Original_Name));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(string Name) {
+            if ((Name == null)) {
+                this.Adapter.InsertCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[0].Value = ((string)(Name));
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(string Name, long Original_PermissionOwnerId, string Original_Name, long PermissionOwnerId) {
+            if ((Name == null)) {
+                this.Adapter.UpdateCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[0].Value = ((string)(Name));
+            }
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(Original_PermissionOwnerId));
+            if ((Original_Name == null)) {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((string)(Original_Name));
+            }
+            this.Adapter.UpdateCommand.Parameters[4].Value = ((long)(PermissionOwnerId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(string Name, long Original_PermissionOwnerId, string Original_Name) {
+            return this.Update(Name, Original_PermissionOwnerId, Original_Name, Original_PermissionOwnerId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class UserGroupTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public UserGroupTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "UserGroup";
+            tableMapping.ColumnMappings.Add("PermissionOwnerId", "PermissionOwnerId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[UserGroup] WHERE (([PermissionOwnerId] = @Original_PermissionO" +
+                "wnerId))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[UserGroup] ([PermissionOwnerId]) VALUES (@PermissionOwnerId);\r" +
+                "\nSELECT PermissionOwnerId FROM UserGroup WHERE (PermissionOwnerId = @PermissionO" +
+                "wnerId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[UserGroup] SET [PermissionOwnerId] = @PermissionOwnerId WHERE (([Pe" +
+                "rmissionOwnerId] = @Original_PermissionOwnerId));\r\nSELECT PermissionOwnerId FROM" +
+                " UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[3];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT PermissionOwnerId FROM dbo.UserGroup";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.UserGroup WHERE PermissionOwnerId  = @Id";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT     UserGroup.*\r\nFROM         UserGroup INNER JOIN\r\n                   Per" +
+                "missionOwner ON UserGroup.PermissionOwnerId = PermissionOwner.PermissionOwnerId\r" +
+                "\nWHERE     (PermissionOwner.Name = @Name)";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Name", global::System.Data.SqlDbType.VarChar, 18, global::System.Data.ParameterDirection.Input, 0, 0, "Name", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.UserGroupDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.UserGroupDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.UserGroupDataTable dataTable = new dsHiveServer.UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.UserGroupDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.UserGroupDataTable GetDataById(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.UserGroupDataTable dataTable = new dsHiveServer.UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByName(dsHiveServer.UserGroupDataTable dataTable, string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.UserGroupDataTable GetDataByName(string Name) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((Name == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(Name));
+            }
+            dsHiveServer.UserGroupDataTable dataTable = new dsHiveServer.UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.UserGroupDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "UserGroup");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_PermissionOwnerId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_PermissionOwnerId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long PermissionOwnerId) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long PermissionOwnerId, long Original_PermissionOwnerId) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(Original_PermissionOwnerId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long Original_PermissionOwnerId) {
+            return this.Update(Original_PermissionOwnerId, Original_PermissionOwnerId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class PermissionOwner_UserGroupTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public PermissionOwner_UserGroupTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "PermissionOwner_UserGroup";
+            tableMapping.ColumnMappings.Add("PermissionOwnerId", "PermissionOwnerId");
+            tableMapping.ColumnMappings.Add("UserGroupId", "UserGroupId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[PermissionOwner_UserGroup] WHERE (([PermissionOwnerId] = @Orig" +
+                "inal_PermissionOwnerId) AND ([UserGroupId] = @Original_UserGroupId))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_UserGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "UserGroupId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = @"INSERT INTO [dbo].[PermissionOwner_UserGroup] ([PermissionOwnerId], [UserGroupId]) VALUES (@PermissionOwnerId, @UserGroupId);
+SELECT PermissionOwnerId, UserGroupId FROM PermissionOwner_UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId) AND (UserGroupId = @UserGroupId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@UserGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "UserGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[PermissionOwner_UserGroup] SET [PermissionOwnerId] = @PermissionOwnerId, [UserGroupId] = @UserGroupId WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ([UserGroupId] = @Original_UserGroupId));
+SELECT PermissionOwnerId, UserGroupId FROM PermissionOwner_UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId) AND (UserGroupId = @UserGroupId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@UserGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "UserGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_UserGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "UserGroupId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[4];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT PermissionOwnerId, UserGroupId FROM dbo.PermissionOwner_UserGroup";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.PermissionOwner_UserGroup WHERE PermissionOwnerId = @Id";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT * FROM dbo.PermissionOwner_UserGroup WHERE PermissionOwnerId = @Permission" +
+                "OwnerId AND UserGroupId = @UserGroupId";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@UserGroupId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "UserGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[3] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[3].Connection = this.Connection;
+            this._commandCollection[3].CommandText = "SELECT * FROM dbo.PermissionOwner_UserGroup WHERE UserGroupId = @UserGroupId";
+            this._commandCollection[3].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[3].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@UserGroupId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "UserGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.PermissionOwner_UserGroupDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.PermissionOwner_UserGroupDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.PermissionOwner_UserGroupDataTable dataTable = new dsHiveServer.PermissionOwner_UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByPermissionOwnerId(dsHiveServer.PermissionOwner_UserGroupDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.PermissionOwner_UserGroupDataTable GetDataByPermissionOwnerId(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.PermissionOwner_UserGroupDataTable dataTable = new dsHiveServer.PermissionOwner_UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByPermownerUsergroupId(dsHiveServer.PermissionOwner_UserGroupDataTable dataTable, long PermissionOwnerId, long UserGroupId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            this.Adapter.SelectCommand.Parameters[1].Value = ((long)(UserGroupId));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.PermissionOwner_UserGroupDataTable GetDataByPermownerUsergroupId(long PermissionOwnerId, long UserGroupId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            this.Adapter.SelectCommand.Parameters[1].Value = ((long)(UserGroupId));
+            dsHiveServer.PermissionOwner_UserGroupDataTable dataTable = new dsHiveServer.PermissionOwner_UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByUserGroupId(dsHiveServer.PermissionOwner_UserGroupDataTable dataTable, long UserGroupId) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(UserGroupId));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.PermissionOwner_UserGroupDataTable GetDataByUserGroupId(long UserGroupId) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(UserGroupId));
+            dsHiveServer.PermissionOwner_UserGroupDataTable dataTable = new dsHiveServer.PermissionOwner_UserGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.PermissionOwner_UserGroupDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "PermissionOwner_UserGroup");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_PermissionOwnerId, long Original_UserGroupId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_PermissionOwnerId));
+            this.Adapter.DeleteCommand.Parameters[1].Value = ((long)(Original_UserGroupId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long PermissionOwnerId, long UserGroupId) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            this.Adapter.InsertCommand.Parameters[1].Value = ((long)(UserGroupId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long PermissionOwnerId, long UserGroupId, long Original_PermissionOwnerId, long Original_UserGroupId) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(PermissionOwnerId));
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(UserGroupId));
+            this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(Original_PermissionOwnerId));
+            this.Adapter.UpdateCommand.Parameters[3].Value = ((long)(Original_UserGroupId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long Original_PermissionOwnerId, long Original_UserGroupId) {
+            return this.Update(Original_PermissionOwnerId, Original_UserGroupId, Original_PermissionOwnerId, Original_UserGroupId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class ClientGroupTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public ClientGroupTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "ClientGroup";
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[ClientGroup] WHERE (([ResourceId] = @Original_ResourceId))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[ClientGroup] ([ResourceId]) VALUES (@ResourceId);\r\nSELECT Reso" +
+                "urceId FROM ClientGroup WHERE (ResourceId = @ResourceId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[ClientGroup] SET [ResourceId] = @ResourceId WHERE (([ResourceId] = " +
+                "@Original_ResourceId));\r\nSELECT ResourceId FROM ClientGroup WHERE (ResourceId = " +
+                "@ResourceId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[2];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT ResourceId FROM dbo.ClientGroup";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.ClientGroup WHERE ResourceId = @Id";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.ClientGroupDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.ClientGroupDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.ClientGroupDataTable dataTable = new dsHiveServer.ClientGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.ClientGroupDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientGroupDataTable GetDataById(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.ClientGroupDataTable dataTable = new dsHiveServer.ClientGroupDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.ClientGroupDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "ClientGroup");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_ResourceId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long ResourceId) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long ResourceId, long Original_ResourceId) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(ResourceId));
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long Original_ResourceId) {
+            return this.Update(Original_ResourceId, Original_ResourceId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class JobTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public JobTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "Job";
+            tableMapping.ColumnMappings.Add("JobId", "JobId");
+            tableMapping.ColumnMappings.Add("ParentJobId", "ParentJobId");
+            tableMapping.ColumnMappings.Add("PermissionOwnerId", "PermissionOwnerId");
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            tableMapping.ColumnMappings.Add("JobState", "JobState");
+            tableMapping.ColumnMappings.Add("Percentage", "Percentage");
+            tableMapping.ColumnMappings.Add("SerializedJob", "SerializedJob");
+            tableMapping.ColumnMappings.Add("DateCreated", "DateCreated");
+            tableMapping.ColumnMappings.Add("DateCalculated", "DateCalculated");
+            tableMapping.ColumnMappings.Add("Priority", "Priority");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = @"DELETE FROM [Job] WHERE (([JobId] = @Original_JobId) AND ((@IsNull_ParentJobId = 1 AND [ParentJobId] IS NULL) OR ([ParentJobId] = @Original_ParentJobId)) AND ((@IsNull_JobState = 1 AND [JobState] IS NULL) OR ([JobState] = @Original_JobState)) AND ((@IsNull_PermissionOwnerId = 1 AND [PermissionOwnerId] IS NULL) OR ([PermissionOwnerId] = @Original_PermissionOwnerId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateCreated = 1 AND [DateCreated] IS NULL) OR ([DateCreated] = @Original_DateCreated)) AND ((@IsNull_DateCalculated = 1 AND [DateCalculated] IS NULL) OR ([DateCalculated] = @Original_DateCalculated)) AND ((@IsNull_Priority = 1 AND [Priority] IS NULL) OR ([Priority] = @Original_Priority)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ParentJobId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ParentJobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobState", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobState", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_PermissionOwnerId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ResourceId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Percentage", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_DateCreated", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCreated", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_DateCreated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCreated", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_DateCalculated", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCalculated", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_DateCalculated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCalculated", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Priority", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Priority", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Priority", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Priority", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = @"INSERT INTO [Job] ([ParentJobId], [JobState], [PermissionOwnerId], [ResourceId], [SerializedJob], [Percentage], [DateCreated], [DateCalculated], [Priority]) VALUES (@ParentJobId, @JobState, @PermissionOwnerId, @ResourceId, @SerializedJob, @Percentage, @DateCreated, @DateCalculated, @Priority);
+SELECT JobId, ParentJobId, JobState, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority FROM Job WHERE (JobId = SCOPE_IDENTITY())";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ParentJobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobState", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@SerializedJob", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "SerializedJob", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@DateCreated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCreated", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@DateCalculated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCalculated", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Priority", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Priority", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [Job] SET [ParentJobId] = @ParentJobId, [JobState] = @JobState, [PermissionOwnerId] = @PermissionOwnerId, [ResourceId] = @ResourceId, [SerializedJob] = @SerializedJob, [Percentage] = @Percentage, [DateCreated] = @DateCreated, [DateCalculated] = @DateCalculated, [Priority] = @Priority WHERE (([JobId] = @Original_JobId) AND ((@IsNull_ParentJobId = 1 AND [ParentJobId] IS NULL) OR ([ParentJobId] = @Original_ParentJobId)) AND ((@IsNull_JobState = 1 AND [JobState] IS NULL) OR ([JobState] = @Original_JobState)) AND ((@IsNull_PermissionOwnerId = 1 AND [PermissionOwnerId] IS NULL) OR ([PermissionOwnerId] = @Original_PermissionOwnerId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateCreated = 1 AND [DateCreated] IS NULL) OR ([DateCreated] = @Original_DateCreated)) AND ((@IsNull_DateCalculated = 1 AND [DateCalculated] IS NULL) OR ([DateCalculated] = @Original_DateCalculated)) AND ((@IsNull_Priority = 1 AND [Priority] IS NULL) OR ([Priority] = @Original_Priority)));
+SELECT JobId, ParentJobId, JobState, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority FROM Job WHERE (JobId = @JobId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ParentJobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobState", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@SerializedJob", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "SerializedJob", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@DateCreated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCreated", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@DateCalculated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCalculated", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Priority", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Priority", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ParentJobId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ParentJobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobState", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobState", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_PermissionOwnerId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ResourceId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Percentage", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_DateCreated", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCreated", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_DateCreated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCreated", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_DateCalculated", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCalculated", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_DateCalculated", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateCalculated", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Priority", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Priority", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Priority", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Priority", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[8];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT     JobId, ParentJobId, JobState, PermissionOwnerId, ResourceId, Serialize" +
+                "dJob, Percentage, DateCreated, DateCalculated, Priority\r\nFROM         Job";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, Per" +
+                "missionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (JobState = \'" +
+                "calculating\') OR (JobState = \'idle\')";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT     JobId, JobState, ParentJobId, PermissionOwnerId, ResourceId, Serialize" +
+                "dJob, Percentage, DateCreated, DateCalculated, Priority\r\nFROM         Job\r\nWHERE" +
+                "     (JobState = \'calculating\') AND (ResourceId = @ResourceId)";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[3] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[3].Connection = this.Connection;
+            this._commandCollection[3].CommandText = "SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, Per" +
+                "missionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (ResourceId =" +
+                " @ResourceId)";
+            this._commandCollection[3].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[3].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[4] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[4].Connection = this.Connection;
+            this._commandCollection[4].CommandText = "SELECT     DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage," +
+                " PermissionOwnerId, Priority, ResourceId, SerializedJob\r\nFROM         Job\r\nWHERE" +
+                "     (JobId = @Id)";
+            this._commandCollection[4].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[4].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[5] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[5].Connection = this.Connection;
+            this._commandCollection[5].CommandText = "SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, Per" +
+                "missionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (JobState = @" +
+                "State)";
+            this._commandCollection[5].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[5].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@State", global::System.Data.SqlDbType.VarChar, 18, global::System.Data.ParameterDirection.Input, 0, 0, "JobState", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[6] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[6].Connection = this.Connection;
+            this._commandCollection[6].CommandText = "SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, Per" +
+                "missionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (ParentJobId " +
+                "= @Id)";
+            this._commandCollection[6].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[6].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ParentJobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[7] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[7].Connection = this.Connection;
+            this._commandCollection[7].CommandText = "SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, Per" +
+                "missionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (PermissionOw" +
+                "nerId = @PermissionOwnerId)";
+            this._commandCollection[7].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[7].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@PermissionOwnerId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "PermissionOwnerId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.JobDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.JobDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByActive(dsHiveServer.JobDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataByActive() {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByCalculatingClient(dsHiveServer.JobDataTable dataTable, global::System.Nullable<long> ResourceId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataByCalculatingClient(global::System.Nullable<long> ResourceId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByClient(dsHiveServer.JobDataTable dataTable, global::System.Nullable<long> ResourceId) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataByClient(global::System.Nullable<long> ResourceId) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.JobDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[4];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataById(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[4];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByState(dsHiveServer.JobDataTable dataTable, string State) {
+            this.Adapter.SelectCommand = this.CommandCollection[5];
+            if ((State == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(State));
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataByState(string State) {
+            this.Adapter.SelectCommand = this.CommandCollection[5];
+            if ((State == null)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((string)(State));
+            }
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillBySubjobs(dsHiveServer.JobDataTable dataTable, global::System.Nullable<long> Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[6];
+            if ((Id.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataBySubjobs(global::System.Nullable<long> Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[6];
+            if ((Id.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByUser(dsHiveServer.JobDataTable dataTable, global::System.Nullable<long> PermissionOwnerId) {
+            this.Adapter.SelectCommand = this.CommandCollection[7];
+            if ((PermissionOwnerId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(PermissionOwnerId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobDataTable GetDataByUser(global::System.Nullable<long> PermissionOwnerId) {
+            this.Adapter.SelectCommand = this.CommandCollection[7];
+            if ((PermissionOwnerId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(PermissionOwnerId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            dsHiveServer.JobDataTable dataTable = new dsHiveServer.JobDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.JobDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "Job");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_JobId, global::System.Nullable<long> Original_ParentJobId, string Original_JobState, global::System.Nullable<long> Original_PermissionOwnerId, global::System.Nullable<long> Original_ResourceId, global::System.Nullable<double> Original_Percentage, global::System.Nullable<global::System.DateTime> Original_DateCreated, global::System.Nullable<global::System.DateTime> Original_DateCalculated, global::System.Nullable<int> Original_Priority) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_JobId));
+            if ((Original_ParentJobId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((long)(Original_ParentJobId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Original_JobState == null)) {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[4].Value = ((string)(Original_JobState));
+            }
+            if ((Original_PermissionOwnerId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[6].Value = ((long)(Original_PermissionOwnerId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((Original_ResourceId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[7].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[8].Value = ((long)(Original_ResourceId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[7].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[8].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Percentage.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[9].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[10].Value = ((double)(Original_Percentage.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[9].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[10].Value = global::System.DBNull.Value;
+            }
+            if ((Original_DateCreated.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[11].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[12].Value = ((System.DateTime)(Original_DateCreated.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[11].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[12].Value = global::System.DBNull.Value;
+            }
+            if ((Original_DateCalculated.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[13].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[14].Value = ((System.DateTime)(Original_DateCalculated.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[13].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[14].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Priority.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[15].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[16].Value = ((int)(Original_Priority.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[15].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[16].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(global::System.Nullable<long> ParentJobId, string JobState, global::System.Nullable<long> PermissionOwnerId, global::System.Nullable<long> ResourceId, byte[] SerializedJob, global::System.Nullable<double> Percentage, global::System.Nullable<global::System.DateTime> DateCreated, global::System.Nullable<global::System.DateTime> DateCalculated, global::System.Nullable<int> Priority) {
+            if ((ParentJobId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[0].Value = ((long)(ParentJobId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((JobState == null)) {
+                this.Adapter.InsertCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[1].Value = ((string)(JobState));
+            }
+            if ((PermissionOwnerId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[2].Value = ((long)(PermissionOwnerId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[3].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            if ((SerializedJob == null)) {
+                this.Adapter.InsertCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[4].Value = ((byte[])(SerializedJob));
+            }
+            if ((Percentage.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[5].Value = ((double)(Percentage.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            if ((DateCreated.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[6].Value = ((System.DateTime)(DateCreated.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((DateCalculated.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[7].Value = ((System.DateTime)(DateCalculated.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[7].Value = global::System.DBNull.Value;
+            }
+            if ((Priority.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[8].Value = ((int)(Priority.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[8].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(
+                    global::System.Nullable<long> ParentJobId, 
+                    string JobState, 
+                    global::System.Nullable<long> PermissionOwnerId, 
+                    global::System.Nullable<long> ResourceId, 
+                    byte[] SerializedJob, 
+                    global::System.Nullable<double> Percentage, 
+                    global::System.Nullable<global::System.DateTime> DateCreated, 
+                    global::System.Nullable<global::System.DateTime> DateCalculated, 
+                    global::System.Nullable<int> Priority, 
+                    long Original_JobId, 
+                    global::System.Nullable<long> Original_ParentJobId, 
+                    string Original_JobState, 
+                    global::System.Nullable<long> Original_PermissionOwnerId, 
+                    global::System.Nullable<long> Original_ResourceId, 
+                    global::System.Nullable<double> Original_Percentage, 
+                    global::System.Nullable<global::System.DateTime> Original_DateCreated, 
+                    global::System.Nullable<global::System.DateTime> Original_DateCalculated, 
+                    global::System.Nullable<int> Original_Priority, 
+                    long JobId) {
+            if ((ParentJobId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(ParentJobId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((JobState == null)) {
+                this.Adapter.UpdateCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[1].Value = ((string)(JobState));
+            }
+            if ((PermissionOwnerId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(PermissionOwnerId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            if ((SerializedJob == null)) {
+                this.Adapter.UpdateCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[4].Value = ((byte[])(SerializedJob));
+            }
+            if ((Percentage.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[5].Value = ((double)(Percentage.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            if ((DateCreated.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[6].Value = ((System.DateTime)(DateCreated.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((DateCalculated.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[7].Value = ((System.DateTime)(DateCalculated.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[7].Value = global::System.DBNull.Value;
+            }
+            if ((Priority.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[8].Value = ((int)(Priority.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[8].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[9].Value = ((long)(Original_JobId));
+            if ((Original_ParentJobId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[10].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[11].Value = ((long)(Original_ParentJobId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[10].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[11].Value = global::System.DBNull.Value;
+            }
+            if ((Original_JobState == null)) {
+                this.Adapter.UpdateCommand.Parameters[12].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[13].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[12].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[13].Value = ((string)(Original_JobState));
+            }
+            if ((Original_PermissionOwnerId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[14].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[15].Value = ((long)(Original_PermissionOwnerId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[14].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[15].Value = global::System.DBNull.Value;
+            }
+            if ((Original_ResourceId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[16].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[17].Value = ((long)(Original_ResourceId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[16].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[17].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Percentage.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[18].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[19].Value = ((double)(Original_Percentage.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[18].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[19].Value = global::System.DBNull.Value;
+            }
+            if ((Original_DateCreated.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[20].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[21].Value = ((System.DateTime)(Original_DateCreated.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[20].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[21].Value = global::System.DBNull.Value;
+            }
+            if ((Original_DateCalculated.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[22].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[23].Value = ((System.DateTime)(Original_DateCalculated.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[22].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[23].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Priority.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[24].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[25].Value = ((int)(Original_Priority.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[24].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[25].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[26].Value = ((long)(JobId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(
+                    global::System.Nullable<long> ParentJobId, 
+                    string JobState, 
+                    global::System.Nullable<long> PermissionOwnerId, 
+                    global::System.Nullable<long> ResourceId, 
+                    byte[] SerializedJob, 
+                    global::System.Nullable<double> Percentage, 
+                    global::System.Nullable<global::System.DateTime> DateCreated, 
+                    global::System.Nullable<global::System.DateTime> DateCalculated, 
+                    global::System.Nullable<int> Priority, 
+                    long Original_JobId, 
+                    global::System.Nullable<long> Original_ParentJobId, 
+                    string Original_JobState, 
+                    global::System.Nullable<long> Original_PermissionOwnerId, 
+                    global::System.Nullable<long> Original_ResourceId, 
+                    global::System.Nullable<double> Original_Percentage, 
+                    global::System.Nullable<global::System.DateTime> Original_DateCreated, 
+                    global::System.Nullable<global::System.DateTime> Original_DateCalculated, 
+                    global::System.Nullable<int> Original_Priority) {
+            return this.Update(ParentJobId, JobState, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority, Original_JobId, Original_ParentJobId, Original_JobState, Original_PermissionOwnerId, Original_ResourceId, Original_Percentage, Original_DateCreated, Original_DateCalculated, Original_Priority, Original_JobId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class ClientGroup_ResourceTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public ClientGroup_ResourceTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "ClientGroup_Resource";
+            tableMapping.ColumnMappings.Add("ClientGroupId", "ClientGroupId");
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[ClientGroup_Resource] WHERE (([ClientGroupId] = @Original_Clie" +
+                "ntGroupId) AND ([ResourceId] = @Original_ResourceId))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ClientGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[ClientGroup_Resource] ([ClientGroupId], [ResourceId]) VALUES (" +
+                "@ClientGroupId, @ResourceId);\r\nSELECT ClientGroupId, ResourceId FROM ClientGroup" +
+                "_Resource WHERE (ClientGroupId = @ClientGroupId) AND (ResourceId = @ResourceId)";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [dbo].[ClientGroup_Resource] SET [ClientGroupId] = @ClientGroupId, [ResourceId] = @ResourceId WHERE (([ClientGroupId] = @Original_ClientGroupId) AND ([ResourceId] = @Original_ResourceId));
+SELECT ClientGroupId, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupId = @ClientGroupId) AND (ResourceId = @ResourceId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ClientGroupId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[4];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT ClientGroupId, ResourceId FROM dbo.ClientGroup_Resource";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT * FROM dbo.ClientGroup_Resource WHERE ClientGroupId = @Id";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT * FROM dbo.ClientGroup_Resource WHERE ClientGroupId = @ClientGroupId AND  " +
+                "ResourceId = @ResourceId";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ClientGroupId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ClientGroupId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[3] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[3].Connection = this.Connection;
+            this._commandCollection[3].CommandText = "SELECT * FROM dbo.ClientGroup_Resource WHERE ResourceId = @Id";
+            this._commandCollection[3].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[3].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.ClientGroup_ResourceDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.ClientGroup_ResourceDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.ClientGroup_ResourceDataTable dataTable = new dsHiveServer.ClientGroup_ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByClientGroupId(dsHiveServer.ClientGroup_ResourceDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientGroup_ResourceDataTable GetDataByClientGroupId(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.ClientGroup_ResourceDataTable dataTable = new dsHiveServer.ClientGroup_ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByClientGroupResourceId(dsHiveServer.ClientGroup_ResourceDataTable dataTable, long ClientGroupId, long ResourceId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ClientGroupId));
+            this.Adapter.SelectCommand.Parameters[1].Value = ((long)(ResourceId));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientGroup_ResourceDataTable GetDataByClientGroupResourceId(long ClientGroupId, long ResourceId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(ClientGroupId));
+            this.Adapter.SelectCommand.Parameters[1].Value = ((long)(ResourceId));
+            dsHiveServer.ClientGroup_ResourceDataTable dataTable = new dsHiveServer.ClientGroup_ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByResourceId(dsHiveServer.ClientGroup_ResourceDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.ClientGroup_ResourceDataTable GetDataByResourceId(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[3];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.ClientGroup_ResourceDataTable dataTable = new dsHiveServer.ClientGroup_ResourceDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.ClientGroup_ResourceDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "ClientGroup_Resource");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_ClientGroupId, long Original_ResourceId) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_ClientGroupId));
+            this.Adapter.DeleteCommand.Parameters[1].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(long ClientGroupId, long ResourceId) {
+            this.Adapter.InsertCommand.Parameters[0].Value = ((long)(ClientGroupId));
+            this.Adapter.InsertCommand.Parameters[1].Value = ((long)(ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long ClientGroupId, long ResourceId, long Original_ClientGroupId, long Original_ResourceId) {
+            this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(ClientGroupId));
+            this.Adapter.UpdateCommand.Parameters[1].Value = ((long)(ResourceId));
+            this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(Original_ClientGroupId));
+            this.Adapter.UpdateCommand.Parameters[3].Value = ((long)(Original_ResourceId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(long Original_ClientGroupId, long Original_ResourceId) {
+            return this.Update(Original_ClientGroupId, Original_ResourceId, Original_ClientGroupId, Original_ResourceId);
+        }
+    }
+    
+    /// <summary>
+    ///Represents the connection and commands used to retrieve and save data.
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DataObjectAttribute(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterDesigner, Microsoft.VSDesigner" +
+        ", Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+    public partial class JobResultTableAdapter : global::System.ComponentModel.Component {
+        
+        private global::System.Data.SqlClient.SqlDataAdapter _adapter;
+        
+        private global::System.Data.SqlClient.SqlConnection _connection;
+        
+        private global::System.Data.SqlClient.SqlTransaction _transaction;
+        
+        private global::System.Data.SqlClient.SqlCommand[] _commandCollection;
+        
+        private bool _clearBeforeFill;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public JobResultTableAdapter() {
+            this.ClearBeforeFill = true;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected internal global::System.Data.SqlClient.SqlDataAdapter Adapter {
+            get {
+                if ((this._adapter == null)) {
+                    this.InitAdapter();
+                }
+                return this._adapter;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlConnection Connection {
+            get {
+                if ((this._connection == null)) {
+                    this.InitConnection();
+                }
+                return this._connection;
+            }
+            set {
+                this._connection = value;
+                if ((this.Adapter.InsertCommand != null)) {
+                    this.Adapter.InsertCommand.Connection = value;
+                }
+                if ((this.Adapter.DeleteCommand != null)) {
+                    this.Adapter.DeleteCommand.Connection = value;
+                }
+                if ((this.Adapter.UpdateCommand != null)) {
+                    this.Adapter.UpdateCommand.Connection = value;
+                }
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    if ((this.CommandCollection[i] != null)) {
+                        ((global::System.Data.SqlClient.SqlCommand)(this.CommandCollection[i])).Connection = value;
+                    }
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        internal global::System.Data.SqlClient.SqlTransaction Transaction {
+            get {
+                return this._transaction;
+            }
+            set {
+                this._transaction = value;
+                for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) {
+                    this.CommandCollection[i].Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.DeleteCommand != null))) {
+                    this.Adapter.DeleteCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.InsertCommand != null))) {
+                    this.Adapter.InsertCommand.Transaction = this._transaction;
+                }
+                if (((this.Adapter != null) 
+                            && (this.Adapter.UpdateCommand != null))) {
+                    this.Adapter.UpdateCommand.Transaction = this._transaction;
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected global::System.Data.SqlClient.SqlCommand[] CommandCollection {
+            get {
+                if ((this._commandCollection == null)) {
+                    this.InitCommandCollection();
+                }
+                return this._commandCollection;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool ClearBeforeFill {
+            get {
+                return this._clearBeforeFill;
+            }
+            set {
+                this._clearBeforeFill = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitAdapter() {
+            this._adapter = new global::System.Data.SqlClient.SqlDataAdapter();
+            global::System.Data.Common.DataTableMapping tableMapping = new global::System.Data.Common.DataTableMapping();
+            tableMapping.SourceTable = "Table";
+            tableMapping.DataSetTable = "JobResult";
+            tableMapping.ColumnMappings.Add("JobResultId", "JobResultId");
+            tableMapping.ColumnMappings.Add("JobId", "JobId");
+            tableMapping.ColumnMappings.Add("JobResult", "JobResult");
+            tableMapping.ColumnMappings.Add("ResourceId", "ResourceId");
+            tableMapping.ColumnMappings.Add("Message", "Message");
+            tableMapping.ColumnMappings.Add("Percentage", "Percentage");
+            tableMapping.ColumnMappings.Add("DateFinished", "DateFinished");
+            this._adapter.TableMappings.Add(tableMapping);
+            this._adapter.DeleteCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.DeleteCommand.Connection = this.Connection;
+            this._adapter.DeleteCommand.CommandText = @"DELETE FROM [JobResult] WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateFinished = 1 AND [DateFinished] IS NULL) OR ([DateFinished] = @Original_DateFinished)))";
+            this._adapter.DeleteCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobResultId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ResourceId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Percentage", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_DateFinished", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateFinished", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_DateFinished", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateFinished", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.InsertCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.InsertCommand.Connection = this.Connection;
+            this._adapter.InsertCommand.CommandText = @"INSERT INTO [JobResult] ([JobId], [JobResult], [ResourceId], [Message], [Percentage], [DateFinished]) VALUES (@JobId, @JobResult, @ResourceId, @Message, @Percentage, @DateFinished);
+SELECT JobResultId, JobId, JobResult, ResourceId, Message, Percentage, DateFinished FROM JobResult WHERE (JobResultId = SCOPE_IDENTITY())";
+            this._adapter.InsertCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobResult", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Message", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Message", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.InsertCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@DateFinished", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateFinished", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand = new global::System.Data.SqlClient.SqlCommand();
+            this._adapter.UpdateCommand.Connection = this.Connection;
+            this._adapter.UpdateCommand.CommandText = @"UPDATE [JobResult] SET [JobId] = @JobId, [JobResult] = @JobResult, [ResourceId] = @ResourceId, [Message] = @Message, [Percentage] = @Percentage, [DateFinished] = @DateFinished WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateFinished = 1 AND [DateFinished] IS NULL) OR ([DateFinished] = @Original_DateFinished)));
+SELECT JobResultId, JobId, JobResult, ResourceId, Message, Percentage, DateFinished FROM JobResult WHERE (JobResultId = @JobResultId)";
+            this._adapter.UpdateCommand.CommandType = global::System.Data.CommandType.Text;
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobResult", global::System.Data.SqlDbType.VarBinary, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResult", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Message", global::System.Data.SqlDbType.VarChar, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Message", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@DateFinished", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateFinished", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobResultId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_JobId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_JobId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_ResourceId", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_ResourceId", global::System.Data.SqlDbType.BigInt, 0, global::System.Data.ParameterDirection.Input, 0, 0, "ResourceId", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_Percentage", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_Percentage", global::System.Data.SqlDbType.Float, 0, global::System.Data.ParameterDirection.Input, 0, 0, "Percentage", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@IsNull_DateFinished", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateFinished", global::System.Data.DataRowVersion.Original, true, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_DateFinished", global::System.Data.SqlDbType.DateTime, 0, global::System.Data.ParameterDirection.Input, 0, 0, "DateFinished", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));
+            this._adapter.UpdateCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobResultId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitConnection() {
+            this._connection = new global::System.Data.SqlClient.SqlConnection();
+            this._connection.ConnectionString = global::HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.Default.HiveServerConnectionString;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private void InitCommandCollection() {
+            this._commandCollection = new global::System.Data.SqlClient.SqlCommand[3];
+            this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[0].Connection = this.Connection;
+            this._commandCollection[0].CommandText = "SELECT     JobResultId, JobId, JobResult, ResourceId, Message, Percentage, DateFi" +
+                "nished\r\nFROM         JobResult";
+            this._commandCollection[0].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[1].Connection = this.Connection;
+            this._commandCollection[1].CommandText = "SELECT     JobId, JobResult, JobResultId, Message, ResourceId, Percentage, DateFi" +
+                "nished\r\nFROM         JobResult\r\nWHERE     (JobResultId = @Id)";
+            this._commandCollection[1].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[1].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Id", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "JobResultId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+            this._commandCollection[2] = new global::System.Data.SqlClient.SqlCommand();
+            this._commandCollection[2].Connection = this.Connection;
+            this._commandCollection[2].CommandText = "SELECT     JobId, JobResult, JobResultId, Message, ResourceId, Percentage, DateFi" +
+                "nished\r\nFROM         JobResult\r\nWHERE     (JobId = @JobId)";
+            this._commandCollection[2].CommandType = global::System.Data.CommandType.Text;
+            this._commandCollection[2].Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@JobId", global::System.Data.SqlDbType.BigInt, 8, global::System.Data.ParameterDirection.Input, 0, 0, "JobId", global::System.Data.DataRowVersion.Current, false, null, "", "", ""));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, true)]
+        public virtual int Fill(dsHiveServer.JobResultDataTable dataTable) {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, true)]
+        public virtual dsHiveServer.JobResultDataTable GetData() {
+            this.Adapter.SelectCommand = this.CommandCollection[0];
+            dsHiveServer.JobResultDataTable dataTable = new dsHiveServer.JobResultDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillById(dsHiveServer.JobResultDataTable dataTable, long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobResultDataTable GetDataById(long Id) {
+            this.Adapter.SelectCommand = this.CommandCollection[1];
+            this.Adapter.SelectCommand.Parameters[0].Value = ((long)(Id));
+            dsHiveServer.JobResultDataTable dataTable = new dsHiveServer.JobResultDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Fill, false)]
+        public virtual int FillByJob(dsHiveServer.JobResultDataTable dataTable, global::System.Nullable<long> JobId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((JobId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(JobId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((this.ClearBeforeFill == true)) {
+                dataTable.Clear();
+            }
+            int returnValue = this.Adapter.Fill(dataTable);
+            return returnValue;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Select, false)]
+        public virtual dsHiveServer.JobResultDataTable GetDataByJob(global::System.Nullable<long> JobId) {
+            this.Adapter.SelectCommand = this.CommandCollection[2];
+            if ((JobId.HasValue == true)) {
+                this.Adapter.SelectCommand.Parameters[0].Value = ((long)(JobId.Value));
+            }
+            else {
+                this.Adapter.SelectCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            dsHiveServer.JobResultDataTable dataTable = new dsHiveServer.JobResultDataTable();
+            this.Adapter.Fill(dataTable);
+            return dataTable;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer.JobResultDataTable dataTable) {
+            return this.Adapter.Update(dataTable);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(dsHiveServer dataSet) {
+            return this.Adapter.Update(dataSet, "JobResult");
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow dataRow) {
+            return this.Adapter.Update(new global::System.Data.DataRow[] {
+                        dataRow});
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        public virtual int Update(global::System.Data.DataRow[] dataRows) {
+            return this.Adapter.Update(dataRows);
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Delete, true)]
+        public virtual int Delete(long Original_JobResultId, global::System.Nullable<long> Original_JobId, global::System.Nullable<long> Original_ResourceId, global::System.Nullable<double> Original_Percentage, global::System.Nullable<global::System.DateTime> Original_DateFinished) {
+            this.Adapter.DeleteCommand.Parameters[0].Value = ((long)(Original_JobResultId));
+            if ((Original_JobId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[2].Value = ((long)(Original_JobId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[1].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Original_ResourceId.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[4].Value = ((long)(Original_ResourceId.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[3].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Percentage.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[6].Value = ((double)(Original_Percentage.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[5].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[6].Value = global::System.DBNull.Value;
+            }
+            if ((Original_DateFinished.HasValue == true)) {
+                this.Adapter.DeleteCommand.Parameters[7].Value = ((object)(0));
+                this.Adapter.DeleteCommand.Parameters[8].Value = ((System.DateTime)(Original_DateFinished.Value));
+            }
+            else {
+                this.Adapter.DeleteCommand.Parameters[7].Value = ((object)(1));
+                this.Adapter.DeleteCommand.Parameters[8].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.DeleteCommand.Connection.State;
+            if (((this.Adapter.DeleteCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.DeleteCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.DeleteCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.DeleteCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Insert, true)]
+        public virtual int Insert(global::System.Nullable<long> JobId, byte[] JobResult, global::System.Nullable<long> ResourceId, string Message, global::System.Nullable<double> Percentage, global::System.Nullable<global::System.DateTime> DateFinished) {
+            if ((JobId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[0].Value = ((long)(JobId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((JobResult == null)) {
+                this.Adapter.InsertCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[1].Value = ((byte[])(JobResult));
+            }
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[2].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Message == null)) {
+                this.Adapter.InsertCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[3].Value = ((string)(Message));
+            }
+            if ((Percentage.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[4].Value = ((double)(Percentage.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            if ((DateFinished.HasValue == true)) {
+                this.Adapter.InsertCommand.Parameters[5].Value = ((System.DateTime)(DateFinished.Value));
+            }
+            else {
+                this.Adapter.InsertCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
+            if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.InsertCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.InsertCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(global::System.Nullable<long> JobId, byte[] JobResult, global::System.Nullable<long> ResourceId, string Message, global::System.Nullable<double> Percentage, global::System.Nullable<global::System.DateTime> DateFinished, long Original_JobResultId, global::System.Nullable<long> Original_JobId, global::System.Nullable<long> Original_ResourceId, global::System.Nullable<double> Original_Percentage, global::System.Nullable<global::System.DateTime> Original_DateFinished, long JobResultId) {
+            if ((JobId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[0].Value = ((long)(JobId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[0].Value = global::System.DBNull.Value;
+            }
+            if ((JobResult == null)) {
+                this.Adapter.UpdateCommand.Parameters[1].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[1].Value = ((byte[])(JobResult));
+            }
+            if ((ResourceId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[2].Value = ((long)(ResourceId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[2].Value = global::System.DBNull.Value;
+            }
+            if ((Message == null)) {
+                this.Adapter.UpdateCommand.Parameters[3].Value = global::System.DBNull.Value;
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[3].Value = ((string)(Message));
+            }
+            if ((Percentage.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[4].Value = ((double)(Percentage.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[4].Value = global::System.DBNull.Value;
+            }
+            if ((DateFinished.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[5].Value = ((System.DateTime)(DateFinished.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[5].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[6].Value = ((long)(Original_JobResultId));
+            if ((Original_JobId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[7].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[8].Value = ((long)(Original_JobId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[7].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[8].Value = global::System.DBNull.Value;
+            }
+            if ((Original_ResourceId.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[9].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[10].Value = ((long)(Original_ResourceId.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[9].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[10].Value = global::System.DBNull.Value;
+            }
+            if ((Original_Percentage.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[11].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[12].Value = ((double)(Original_Percentage.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[11].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[12].Value = global::System.DBNull.Value;
+            }
+            if ((Original_DateFinished.HasValue == true)) {
+                this.Adapter.UpdateCommand.Parameters[13].Value = ((object)(0));
+                this.Adapter.UpdateCommand.Parameters[14].Value = ((System.DateTime)(Original_DateFinished.Value));
+            }
+            else {
+                this.Adapter.UpdateCommand.Parameters[13].Value = ((object)(1));
+                this.Adapter.UpdateCommand.Parameters[14].Value = global::System.DBNull.Value;
+            }
+            this.Adapter.UpdateCommand.Parameters[15].Value = ((long)(JobResultId));
+            global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
+            if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open) 
+                        != global::System.Data.ConnectionState.Open)) {
+                this.Adapter.UpdateCommand.Connection.Open();
+            }
+            try {
+                int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
+                return returnValue;
+            }
+            finally {
+                if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
+                    this.Adapter.UpdateCommand.Connection.Close();
+                }
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
+        [global::System.ComponentModel.DataObjectMethodAttribute(global::System.ComponentModel.DataObjectMethodType.Update, true)]
+        public virtual int Update(global::System.Nullable<long> JobId, byte[] JobResult, global::System.Nullable<long> ResourceId, string Message, global::System.Nullable<double> Percentage, global::System.Nullable<global::System.DateTime> DateFinished, long Original_JobResultId, global::System.Nullable<long> Original_JobId, global::System.Nullable<long> Original_ResourceId, global::System.Nullable<double> Original_Percentage, global::System.Nullable<global::System.DateTime> Original_DateFinished) {
+            return this.Update(JobId, JobResult, ResourceId, Message, Percentage, DateFinished, Original_JobResultId, Original_JobId, Original_ResourceId, Original_Percentage, Original_DateFinished, Original_JobResultId);
+        }
+    }
+    
+    /// <summary>
+    ///TableAdapterManager is used to coordinate TableAdapters in the dataset to enable Hierarchical Update scenarios
+    ///</summary>
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+    [global::System.ComponentModel.DesignerCategoryAttribute("code")]
+    [global::System.ComponentModel.ToolboxItem(true)]
+    [global::System.ComponentModel.DesignerAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerDesigner, Microsoft.VSD" +
+        "esigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
+    [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapterManager")]
+    public partial class TableAdapterManager : global::System.ComponentModel.Component {
+        
+        private UpdateOrderOption _updateOrder;
+        
+        private ResourceTableAdapter _resourceTableAdapter;
+        
+        private ClientTableAdapter _clientTableAdapter;
+        
+        private HiveUserTableAdapter _hiveUserTableAdapter;
+        
+        private PermissionOwnerTableAdapter _permissionOwnerTableAdapter;
+        
+        private UserGroupTableAdapter _userGroupTableAdapter;
+        
+        private PermissionOwner_UserGroupTableAdapter _permissionOwner_UserGroupTableAdapter;
+        
+        private ClientGroupTableAdapter _clientGroupTableAdapter;
+        
+        private JobTableAdapter _jobTableAdapter;
+        
+        private ClientGroup_ResourceTableAdapter _clientGroup_ResourceTableAdapter;
+        
+        private JobResultTableAdapter _jobResultTableAdapter;
+        
+        private bool _backupDataSetBeforeUpdate;
+        
+        private global::System.Data.IDbConnection _connection;
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public UpdateOrderOption UpdateOrder {
+            get {
+                return this._updateOrder;
+            }
+            set {
+                this._updateOrder = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public ResourceTableAdapter ResourceTableAdapter {
+            get {
+                return this._resourceTableAdapter;
+            }
+            set {
+                this._resourceTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public ClientTableAdapter ClientTableAdapter {
+            get {
+                return this._clientTableAdapter;
+            }
+            set {
+                this._clientTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public HiveUserTableAdapter HiveUserTableAdapter {
+            get {
+                return this._hiveUserTableAdapter;
+            }
+            set {
+                this._hiveUserTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public PermissionOwnerTableAdapter PermissionOwnerTableAdapter {
+            get {
+                return this._permissionOwnerTableAdapter;
+            }
+            set {
+                this._permissionOwnerTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public UserGroupTableAdapter UserGroupTableAdapter {
+            get {
+                return this._userGroupTableAdapter;
+            }
+            set {
+                this._userGroupTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public PermissionOwner_UserGroupTableAdapter PermissionOwner_UserGroupTableAdapter {
+            get {
+                return this._permissionOwner_UserGroupTableAdapter;
+            }
+            set {
+                this._permissionOwner_UserGroupTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public ClientGroupTableAdapter ClientGroupTableAdapter {
+            get {
+                return this._clientGroupTableAdapter;
+            }
+            set {
+                this._clientGroupTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public JobTableAdapter JobTableAdapter {
+            get {
+                return this._jobTableAdapter;
+            }
+            set {
+                this._jobTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public ClientGroup_ResourceTableAdapter ClientGroup_ResourceTableAdapter {
+            get {
+                return this._clientGroup_ResourceTableAdapter;
+            }
+            set {
+                this._clientGroup_ResourceTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.EditorAttribute("Microsoft.VSDesigner.DataSource.Design.TableAdapterManagerPropertyEditor, Microso" +
+            "ft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" +
+            "", "System.Drawing.Design.UITypeEditor")]
+        public JobResultTableAdapter JobResultTableAdapter {
+            get {
+                return this._jobResultTableAdapter;
+            }
+            set {
+                this._jobResultTableAdapter = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public bool BackupDataSetBeforeUpdate {
+            get {
+                return this._backupDataSetBeforeUpdate;
+            }
+            set {
+                this._backupDataSetBeforeUpdate = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        public global::System.Data.IDbConnection Connection {
+            get {
+                if ((this._connection != null)) {
+                    return this._connection;
+                }
+                if (((this._resourceTableAdapter != null) 
+                            && (this._resourceTableAdapter.Connection != null))) {
+                    return this._resourceTableAdapter.Connection;
+                }
+                if (((this._clientTableAdapter != null) 
+                            && (this._clientTableAdapter.Connection != null))) {
+                    return this._clientTableAdapter.Connection;
+                }
+                if (((this._hiveUserTableAdapter != null) 
+                            && (this._hiveUserTableAdapter.Connection != null))) {
+                    return this._hiveUserTableAdapter.Connection;
+                }
+                if (((this._permissionOwnerTableAdapter != null) 
+                            && (this._permissionOwnerTableAdapter.Connection != null))) {
+                    return this._permissionOwnerTableAdapter.Connection;
+                }
+                if (((this._userGroupTableAdapter != null) 
+                            && (this._userGroupTableAdapter.Connection != null))) {
+                    return this._userGroupTableAdapter.Connection;
+                }
+                if (((this._permissionOwner_UserGroupTableAdapter != null) 
+                            && (this._permissionOwner_UserGroupTableAdapter.Connection != null))) {
+                    return this._permissionOwner_UserGroupTableAdapter.Connection;
+                }
+                if (((this._clientGroupTableAdapter != null) 
+                            && (this._clientGroupTableAdapter.Connection != null))) {
+                    return this._clientGroupTableAdapter.Connection;
+                }
+                if (((this._jobTableAdapter != null) 
+                            && (this._jobTableAdapter.Connection != null))) {
+                    return this._jobTableAdapter.Connection;
+                }
+                if (((this._clientGroup_ResourceTableAdapter != null) 
+                            && (this._clientGroup_ResourceTableAdapter.Connection != null))) {
+                    return this._clientGroup_ResourceTableAdapter.Connection;
+                }
+                if (((this._jobResultTableAdapter != null) 
+                            && (this._jobResultTableAdapter.Connection != null))) {
+                    return this._jobResultTableAdapter.Connection;
+                }
+                return null;
+            }
+            set {
+                this._connection = value;
+            }
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.ComponentModel.Browsable(false)]
+        public int TableAdapterInstanceCount {
+            get {
+                int count = 0;
+                if ((this._resourceTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._clientTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._hiveUserTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._permissionOwnerTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._userGroupTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._clientGroupTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._jobTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._clientGroup_ResourceTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                if ((this._jobResultTableAdapter != null)) {
+                    count = (count + 1);
+                }
+                return count;
+            }
+        }
+        
+        /// <summary>
+        ///Update rows in top-down order.
+        ///</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private int UpdateUpdatedRows(dsHiveServer dataSet, global::System.Collections.Generic.List<global::System.Data.DataRow> allChangedRows, global::System.Collections.Generic.List<global::System.Data.DataRow> allAddedRows) {
+            int result = 0;
+            if ((this._permissionOwnerTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.PermissionOwner.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._permissionOwnerTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._resourceTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._resourceTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._clientGroupTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._jobTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._jobTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._userGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._userGroupTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._jobResultTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.JobResult.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._jobResultTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] updatedRows = dataSet.PermissionOwner_UserGroup.Select(null, null, global::System.Data.DataViewRowState.ModifiedCurrent);
+                updatedRows = this.GetRealUpdatedRows(updatedRows, allAddedRows);
+                if (((updatedRows != null) 
+                            && (0 < updatedRows.Length))) {
+                    result = (result + this._permissionOwner_UserGroupTableAdapter.Update(updatedRows));
+                    allChangedRows.AddRange(updatedRows);
+                }
+            }
+            return result;
+        }
+        
+        /// <summary>
+        ///Insert rows in top-down order.
+        ///</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private int UpdateInsertedRows(dsHiveServer dataSet, global::System.Collections.Generic.List<global::System.Data.DataRow> allAddedRows) {
+            int result = 0;
+            if ((this._permissionOwnerTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.PermissionOwner.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._permissionOwnerTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._resourceTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._resourceTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._clientGroupTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._jobTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._jobTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._userGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._userGroupTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._jobResultTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.JobResult.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._jobResultTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] addedRows = dataSet.PermissionOwner_UserGroup.Select(null, null, global::System.Data.DataViewRowState.Added);
+                if (((addedRows != null) 
+                            && (0 < addedRows.Length))) {
+                    result = (result + this._permissionOwner_UserGroupTableAdapter.Update(addedRows));
+                    allAddedRows.AddRange(addedRows);
+                }
+            }
+            return result;
+        }
+        
+        /// <summary>
+        ///Delete rows in bottom-up order.
+        ///</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private int UpdateDeletedRows(dsHiveServer dataSet, global::System.Collections.Generic.List<global::System.Data.DataRow> allChangedRows) {
+            int result = 0;
+            if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.PermissionOwner_UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._permissionOwner_UserGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._clientGroup_ResourceTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup_Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientGroup_ResourceTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._jobResultTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.JobResult.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._jobResultTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._userGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.UserGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._userGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._jobTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.Job.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._jobTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._clientGroupTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.ClientGroup.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientGroupTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._clientTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.Client.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._clientTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._hiveUserTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.HiveUser.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._hiveUserTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._resourceTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.Resource.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._resourceTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            if ((this._permissionOwnerTableAdapter != null)) {
+                global::System.Data.DataRow[] deletedRows = dataSet.PermissionOwner.Select(null, null, global::System.Data.DataViewRowState.Deleted);
+                if (((deletedRows != null) 
+                            && (0 < deletedRows.Length))) {
+                    result = (result + this._permissionOwnerTableAdapter.Update(deletedRows));
+                    allChangedRows.AddRange(deletedRows);
+                }
+            }
+            return result;
+        }
+        
+        /// <summary>
+        ///Remove inserted rows that become updated rows after calling TableAdapter.Update(inserted rows) first
+        ///</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        private global::System.Data.DataRow[] GetRealUpdatedRows(global::System.Data.DataRow[] updatedRows, global::System.Collections.Generic.List<global::System.Data.DataRow> allAddedRows) {
+            if (((updatedRows == null) 
+                        || (updatedRows.Length < 1))) {
+                return updatedRows;
+            }
+            if (((allAddedRows == null) 
+                        || (allAddedRows.Count < 1))) {
+                return updatedRows;
+            }
+            global::System.Collections.Generic.List<global::System.Data.DataRow> realUpdatedRows = new global::System.Collections.Generic.List<global::System.Data.DataRow>();
+            for (int i = 0; (i < updatedRows.Length); i = (i + 1)) {
+                global::System.Data.DataRow row = updatedRows[i];
+                if ((allAddedRows.Contains(row) == false)) {
+                    realUpdatedRows.Add(row);
+                }
+            }
+            return realUpdatedRows.ToArray();
+        }
+        
+        /// <summary>
+        ///Update all changes to the dataset.
+        ///</summary>
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        public virtual int UpdateAll(dsHiveServer dataSet) {
+            if ((dataSet == null)) {
+                throw new global::System.ArgumentNullException("dataSet");
+            }
+            if ((dataSet.HasChanges() == false)) {
+                return 0;
+            }
+            if (((this._resourceTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._resourceTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._clientTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._clientTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._hiveUserTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._hiveUserTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._permissionOwnerTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._permissionOwnerTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._userGroupTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._userGroupTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._permissionOwner_UserGroupTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._permissionOwner_UserGroupTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._clientGroupTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._clientGroupTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._jobTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._jobTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._clientGroup_ResourceTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._clientGroup_ResourceTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            if (((this._jobResultTableAdapter != null) 
+                        && (this.MatchTableAdapterConnection(this._jobResultTableAdapter.Connection) == false))) {
+                throw new global::System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s" +
+                        "tring.");
+            }
+            global::System.Data.IDbConnection workConnection = this.Connection;
+            if ((workConnection == null)) {
+                throw new global::System.ApplicationException("TableAdapterManager contains no connection information. Set each TableAdapterMana" +
+                        "ger TableAdapter property to a valid TableAdapter instance.");
+            }
+            bool workConnOpened = false;
+            if (((workConnection.State & global::System.Data.ConnectionState.Broken) 
+                        == global::System.Data.ConnectionState.Broken)) {
+                workConnection.Close();
+            }
+            if ((workConnection.State == global::System.Data.ConnectionState.Closed)) {
+                workConnection.Open();
+                workConnOpened = true;
+            }
+            global::System.Data.IDbTransaction workTransaction = workConnection.BeginTransaction();
+            if ((workTransaction == null)) {
+                throw new global::System.ApplicationException("The transaction cannot begin. The current data connection does not support transa" +
+                        "ctions or the current state is not allowing the transaction to begin.");
+            }
+            global::System.Collections.Generic.List<global::System.Data.DataRow> allChangedRows = new global::System.Collections.Generic.List<global::System.Data.DataRow>();
+            global::System.Collections.Generic.List<global::System.Data.DataRow> allAddedRows = new global::System.Collections.Generic.List<global::System.Data.DataRow>();
+            global::System.Collections.Generic.List<global::System.Data.Common.DataAdapter> adaptersWithAcceptChangesDuringUpdate = new global::System.Collections.Generic.List<global::System.Data.Common.DataAdapter>();
+            global::System.Collections.Generic.Dictionary<object, global::System.Data.IDbConnection> revertConnections = new global::System.Collections.Generic.Dictionary<object, global::System.Data.IDbConnection>();
+            int result = 0;
+            global::System.Data.DataSet backupDataSet = null;
+            if (this.BackupDataSetBeforeUpdate) {
+                backupDataSet = new global::System.Data.DataSet();
+                backupDataSet.Merge(dataSet);
+            }
+            try {
+                // ---- Prepare for update -----------
+                //
+                if ((this._resourceTableAdapter != null)) {
+                    revertConnections.Add(this._resourceTableAdapter, this._resourceTableAdapter.Connection);
+                    this._resourceTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._resourceTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._resourceTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._resourceTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._resourceTableAdapter.Adapter);
+                    }
+                }
+                if ((this._clientTableAdapter != null)) {
+                    revertConnections.Add(this._clientTableAdapter, this._clientTableAdapter.Connection);
+                    this._clientTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._clientTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._clientTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._clientTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._clientTableAdapter.Adapter);
+                    }
+                }
+                if ((this._hiveUserTableAdapter != null)) {
+                    revertConnections.Add(this._hiveUserTableAdapter, this._hiveUserTableAdapter.Connection);
+                    this._hiveUserTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._hiveUserTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._hiveUserTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._hiveUserTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._hiveUserTableAdapter.Adapter);
+                    }
+                }
+                if ((this._permissionOwnerTableAdapter != null)) {
+                    revertConnections.Add(this._permissionOwnerTableAdapter, this._permissionOwnerTableAdapter.Connection);
+                    this._permissionOwnerTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._permissionOwnerTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._permissionOwnerTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._permissionOwnerTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._permissionOwnerTableAdapter.Adapter);
+                    }
+                }
+                if ((this._userGroupTableAdapter != null)) {
+                    revertConnections.Add(this._userGroupTableAdapter, this._userGroupTableAdapter.Connection);
+                    this._userGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._userGroupTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._userGroupTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._userGroupTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._userGroupTableAdapter.Adapter);
+                    }
+                }
+                if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                    revertConnections.Add(this._permissionOwner_UserGroupTableAdapter, this._permissionOwner_UserGroupTableAdapter.Connection);
+                    this._permissionOwner_UserGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._permissionOwner_UserGroupTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._permissionOwner_UserGroupTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._permissionOwner_UserGroupTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._permissionOwner_UserGroupTableAdapter.Adapter);
+                    }
+                }
+                if ((this._clientGroupTableAdapter != null)) {
+                    revertConnections.Add(this._clientGroupTableAdapter, this._clientGroupTableAdapter.Connection);
+                    this._clientGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._clientGroupTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._clientGroupTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._clientGroupTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._clientGroupTableAdapter.Adapter);
+                    }
+                }
+                if ((this._jobTableAdapter != null)) {
+                    revertConnections.Add(this._jobTableAdapter, this._jobTableAdapter.Connection);
+                    this._jobTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._jobTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._jobTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._jobTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._jobTableAdapter.Adapter);
+                    }
+                }
+                if ((this._clientGroup_ResourceTableAdapter != null)) {
+                    revertConnections.Add(this._clientGroup_ResourceTableAdapter, this._clientGroup_ResourceTableAdapter.Connection);
+                    this._clientGroup_ResourceTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._clientGroup_ResourceTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._clientGroup_ResourceTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._clientGroup_ResourceTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._clientGroup_ResourceTableAdapter.Adapter);
+                    }
+                }
+                if ((this._jobResultTableAdapter != null)) {
+                    revertConnections.Add(this._jobResultTableAdapter, this._jobResultTableAdapter.Connection);
+                    this._jobResultTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(workConnection));
+                    this._jobResultTableAdapter.Transaction = ((global::System.Data.SqlClient.SqlTransaction)(workTransaction));
+                    if (this._jobResultTableAdapter.Adapter.AcceptChangesDuringUpdate) {
+                        this._jobResultTableAdapter.Adapter.AcceptChangesDuringUpdate = false;
+                        adaptersWithAcceptChangesDuringUpdate.Add(this._jobResultTableAdapter.Adapter);
+                    }
+                }
+                // 
+                //---- Perform updates -----------
+                //
+                if ((this.UpdateOrder == UpdateOrderOption.UpdateInsertDelete)) {
+                    result = (result + this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows));
+                    result = (result + this.UpdateInsertedRows(dataSet, allAddedRows));
+                }
+                else {
+                    result = (result + this.UpdateInsertedRows(dataSet, allAddedRows));
+                    result = (result + this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows));
+                }
+                result = (result + this.UpdateDeletedRows(dataSet, allChangedRows));
+                // 
+                //---- Commit updates -----------
+                //
+                workTransaction.Commit();
+                if ((0 < allAddedRows.Count)) {
+                    global::System.Data.DataRow[] rows = new System.Data.DataRow[allAddedRows.Count];
+                    allAddedRows.CopyTo(rows);
+                    for (int i = 0; (i < rows.Length); i = (i + 1)) {
+                        global::System.Data.DataRow row = rows[i];
+                        row.AcceptChanges();
+                    }
+                }
+                if ((0 < allChangedRows.Count)) {
+                    global::System.Data.DataRow[] rows = new System.Data.DataRow[allChangedRows.Count];
+                    allChangedRows.CopyTo(rows);
+                    for (int i = 0; (i < rows.Length); i = (i + 1)) {
+                        global::System.Data.DataRow row = rows[i];
+                        row.AcceptChanges();
+                    }
+                }
+            }
+            catch (global::System.Exception ex) {
+                workTransaction.Rollback();
+                // ---- Restore the dataset -----------
+                if (this.BackupDataSetBeforeUpdate) {
+                    global::System.Diagnostics.Debug.Assert((backupDataSet != null));
+                    dataSet.Clear();
+                    dataSet.Merge(backupDataSet);
+                }
+                else {
+                    if ((0 < allAddedRows.Count)) {
+                        global::System.Data.DataRow[] rows = new System.Data.DataRow[allAddedRows.Count];
+                        allAddedRows.CopyTo(rows);
+                        for (int i = 0; (i < rows.Length); i = (i + 1)) {
+                            global::System.Data.DataRow row = rows[i];
+                            row.AcceptChanges();
+                            row.SetAdded();
+                        }
+                    }
+                }
+                throw ex;
+            }
+            finally {
+                if (workConnOpened) {
+                    workConnection.Close();
+                }
+                if ((this._resourceTableAdapter != null)) {
+                    this._resourceTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._resourceTableAdapter]));
+                    this._resourceTableAdapter.Transaction = null;
+                }
+                if ((this._clientTableAdapter != null)) {
+                    this._clientTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._clientTableAdapter]));
+                    this._clientTableAdapter.Transaction = null;
+                }
+                if ((this._hiveUserTableAdapter != null)) {
+                    this._hiveUserTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._hiveUserTableAdapter]));
+                    this._hiveUserTableAdapter.Transaction = null;
+                }
+                if ((this._permissionOwnerTableAdapter != null)) {
+                    this._permissionOwnerTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._permissionOwnerTableAdapter]));
+                    this._permissionOwnerTableAdapter.Transaction = null;
+                }
+                if ((this._userGroupTableAdapter != null)) {
+                    this._userGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._userGroupTableAdapter]));
+                    this._userGroupTableAdapter.Transaction = null;
+                }
+                if ((this._permissionOwner_UserGroupTableAdapter != null)) {
+                    this._permissionOwner_UserGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._permissionOwner_UserGroupTableAdapter]));
+                    this._permissionOwner_UserGroupTableAdapter.Transaction = null;
+                }
+                if ((this._clientGroupTableAdapter != null)) {
+                    this._clientGroupTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._clientGroupTableAdapter]));
+                    this._clientGroupTableAdapter.Transaction = null;
+                }
+                if ((this._jobTableAdapter != null)) {
+                    this._jobTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._jobTableAdapter]));
+                    this._jobTableAdapter.Transaction = null;
+                }
+                if ((this._clientGroup_ResourceTableAdapter != null)) {
+                    this._clientGroup_ResourceTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._clientGroup_ResourceTableAdapter]));
+                    this._clientGroup_ResourceTableAdapter.Transaction = null;
+                }
+                if ((this._jobResultTableAdapter != null)) {
+                    this._jobResultTableAdapter.Connection = ((global::System.Data.SqlClient.SqlConnection)(revertConnections[this._jobResultTableAdapter]));
+                    this._jobResultTableAdapter.Transaction = null;
+                }
+                if ((0 < adaptersWithAcceptChangesDuringUpdate.Count)) {
+                    global::System.Data.Common.DataAdapter[] adapters = new System.Data.Common.DataAdapter[adaptersWithAcceptChangesDuringUpdate.Count];
+                    adaptersWithAcceptChangesDuringUpdate.CopyTo(adapters);
+                    for (int i = 0; (i < adapters.Length); i = (i + 1)) {
+                        global::System.Data.Common.DataAdapter adapter = adapters[i];
+                        adapter.AcceptChangesDuringUpdate = true;
+                    }
+                }
+            }
+            return result;
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected virtual void SortSelfReferenceRows(global::System.Data.DataRow[] rows, global::System.Data.DataRelation relation, bool childFirst) {
+            global::System.Array.Sort<global::System.Data.DataRow>(rows, new SelfReferenceComparer(relation, childFirst));
+        }
+        
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        protected virtual bool MatchTableAdapterConnection(global::System.Data.IDbConnection inputConnection) {
+            if ((this._connection != null)) {
+                return true;
+            }
+            if (((this.Connection == null) 
+                        || (inputConnection == null))) {
+                return true;
+            }
+            if (string.Equals(this.Connection.ConnectionString, inputConnection.ConnectionString, global::System.StringComparison.Ordinal)) {
+                return true;
+            }
+            return false;
+        }
+        
+        /// <summary>
+        ///Update Order Option
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        public enum UpdateOrderOption {
+            
+            InsertUpdateDelete = 0,
+            
+            UpdateInsertDelete = 1,
+        }
+        
+        /// <summary>
+        ///Used to sort self-referenced table's rows
+        ///</summary>
+        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")]
+        private class SelfReferenceComparer : object, global::System.Collections.Generic.IComparer<global::System.Data.DataRow> {
+            
+            private global::System.Data.DataRelation _relation;
+            
+            private int _childFirst;
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            internal SelfReferenceComparer(global::System.Data.DataRelation relation, bool childFirst) {
+                this._relation = relation;
+                if (childFirst) {
+                    this._childFirst = -1;
+                }
+                else {
+                    this._childFirst = 1;
+                }
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            private bool IsChildAndParent(global::System.Data.DataRow child, global::System.Data.DataRow parent) {
+                global::System.Diagnostics.Debug.Assert((child != null));
+                global::System.Diagnostics.Debug.Assert((parent != null));
+                global::System.Data.DataRow newParent = child.GetParentRow(this._relation, global::System.Data.DataRowVersion.Default);
+                for (
+                ; ((newParent != null) 
+                            && ((object.ReferenceEquals(newParent, child) == false) 
+                            && (object.ReferenceEquals(newParent, parent) == false))); 
+                ) {
+                    newParent = newParent.GetParentRow(this._relation, global::System.Data.DataRowVersion.Default);
+                }
+                if ((newParent == null)) {
+                    for (newParent = child.GetParentRow(this._relation, global::System.Data.DataRowVersion.Original); ((newParent != null) 
+                                && ((object.ReferenceEquals(newParent, child) == false) 
+                                && (object.ReferenceEquals(newParent, parent) == false))); 
+                    ) {
+                        newParent = newParent.GetParentRow(this._relation, global::System.Data.DataRowVersion.Original);
+                    }
+                }
+                if (object.ReferenceEquals(newParent, parent)) {
+                    return true;
+                }
+                return false;
+            }
+            
+            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+            public int Compare(global::System.Data.DataRow row1, global::System.Data.DataRow row2) {
+                if (object.ReferenceEquals(row1, row2)) {
+                    return 0;
+                }
+                if ((row1 == null)) {
+                    return -1;
+                }
+                if ((row2 == null)) {
+                    return 1;
+                }
+
+                // Is row1 the child or grandchild of row2
+                if (this.IsChildAndParent(row1, row2)) {
+                    return this._childFirst;
+                }
+
+                // Is row2 the child or grandchild of row1
+                if (this.IsChildAndParent(row2, row1)) {
+                    return (-1 * this._childFirst);
+                }
+                return 0;
+            }
+        }
+    }
+}
+
+#pragma warning restore 1591
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.cs	(revision 1270)
@@ -0,0 +1,15 @@
+﻿namespace HeuristicLab.Hive.Server.ADODataAccess {
+    
+    
+    public partial class dsHiveServer {
+      partial class ClientGroup_ResourceDataTable {
+      }
+    }
+}
+
+namespace HeuristicLab.Hive.Server.ADODataAccess.dsHiveServerTableAdapters {
+    
+    
+    public partial class ClientTableAdapter {
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsc
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsc	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsc	(revision 1270)
@@ -0,0 +1,9 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--<autogenerated>
+     This code was generated by a tool.
+     Changes to this file may cause incorrect behavior and will be lost if
+     the code is regenerated.
+</autogenerated>-->
+<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TableUISettings />
+</DataSetUISetting>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xsd	(revision 1270)
@@ -0,0 +1,1114 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<xs:schema id="dsHiveServer" targetNamespace="http://tempuri.org/dsHiveServer.xsd" xmlns:mstns="http://tempuri.org/dsHiveServer.xsd" xmlns="http://tempuri.org/dsHiveServer.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
+  <xs:annotation>
+    <xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
+      <DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+        <Connections>
+          <Connection AppSettingsObjectName="Settings" AppSettingsPropertyName="HiveServerConnectionString" ConnectionStringObject="" IsAppSettingsProperty="true" Modifier="Assembly" Name="HiveServerConnectionString (Settings)" ParameterPrefix="@" PropertyReference="ApplicationSettings.HeuristicLab.Hive.Server.ADODataAccess.Properties.Settings.GlobalReference.Default.HiveServerConnectionString" Provider="System.Data.SqlClient" />
+        </Connections>
+        <Tables>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="ResourceTableAdapter" GeneratorDataComponentClassName="ResourceTableAdapter" Name="Resource" UserDataComponentName="ResourceTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[Resource] WHERE (([ResourceId] = @Original_ResourceId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Name" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[Resource] ([Name]) VALUES (@Name);
+SELECT ResourceId, Name FROM Resource WHERE (ResourceId = SCOPE_IDENTITY())</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT ResourceId, Name FROM dbo.Resource</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[Resource] SET [Name] = @Name WHERE (([ResourceId] = @Original_ResourceId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)));
+SELECT ResourceId, Name FROM Resource WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Name" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="ResourceId" ColumnName="ResourceId" DataSourceName="" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+              <Mapping SourceColumn="Name" DataSetColumn="Name" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByActive" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByActive" GeneratorSourceName="FillByActive" GetMethodModifier="Public" GetMethodName="GetDataByActive" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByActive" UserSourceName="FillByActive">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT Resource.* FROM 
+  Resource INNER JOIN Client ON Resource.ResourceId = Client.ResourceId
+  WHERE Client.Status &lt;&gt; 'offline'</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.Resource WHERE ResourceId = @ID</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="ID" ColumnName="ResourceId" DataSourceName="HiveServer.dbo.Resource" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@ID" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByName" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByName" GeneratorSourceName="FillByName" GetMethodModifier="Public" GetMethodName="GetDataByName" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByName" UserSourceName="FillByName">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.Resource WHERE Name = @Name</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="Name" ColumnName="Name" DataSourceName="HiveServer.dbo.Resource" DataTypeServer="varchar(18)" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="18" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="ClientTableAdapter" GeneratorDataComponentClassName="ClientTableAdapter" Name="Client" UserDataComponentName="ClientTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Client" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[Client] WHERE (([ResourceId] = @Original_ResourceId) AND ((@IsNull_GUID = 1 AND [GUID] IS NULL) OR ([GUID] = @Original_GUID)) AND ((@IsNull_CPUSpeed = 1 AND [CPUSpeed] IS NULL) OR ([CPUSpeed] = @Original_CPUSpeed)) AND ((@IsNull_Memory = 1 AND [Memory] IS NULL) OR ([Memory] = @Original_Memory)) AND ((@IsNull_Login = 1 AND [Login] IS NULL) OR ([Login] = @Original_Login)) AND ((@IsNull_Status = 1 AND [Status] IS NULL) OR ([Status] = @Original_Status)) AND ((@IsNull_ClientConfigId = 1 AND [ClientConfigId] IS NULL) OR ([ClientConfigId] = @Original_ClientConfigId)) AND ((@IsNull_NumberOfCores = 1 AND [NumberOfCores] IS NULL) OR ([NumberOfCores] = @Original_NumberOfCores)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_GUID" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="GUID" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Guid" Direction="Input" ParameterName="@Original_GUID" Precision="0" ProviderType="UniqueIdentifier" Scale="0" Size="0" SourceColumn="GUID" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_CPUSpeed" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="CPUSpeed" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_CPUSpeed" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="CPUSpeed" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Memory" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Memory" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_Memory" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Memory" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Login" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Login" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_Login" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="Login" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Status" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Status" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Status" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Status" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ClientConfigId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ClientConfigId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ClientConfigId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientConfigId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_NumberOfCores" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="NumberOfCores" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_NumberOfCores" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="NumberOfCores" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[Client] ([ResourceId], [GUID], [CPUSpeed], [Memory], [Login], [Status], [ClientConfigId], [NumberOfCores]) VALUES (@ResourceId, @GUID, @CPUSpeed, @Memory, @Login, @Status, @ClientConfigId, @NumberOfCores);
+SELECT ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberOfCores FROM Client WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Guid" Direction="Input" ParameterName="@GUID" Precision="0" ProviderType="UniqueIdentifier" Scale="0" Size="0" SourceColumn="GUID" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@CPUSpeed" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="CPUSpeed" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Memory" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Memory" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Login" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="Login" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Status" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Status" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ClientConfigId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientConfigId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@NumberOfCores" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="NumberOfCores" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberOfCores FROM dbo.Client</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[Client] SET [ResourceId] = @ResourceId, [GUID] = @GUID, [CPUSpeed] = @CPUSpeed, [Memory] = @Memory, [Login] = @Login, [Status] = @Status, [ClientConfigId] = @ClientConfigId, [NumberOfCores] = @NumberOfCores WHERE (([ResourceId] = @Original_ResourceId) AND ((@IsNull_GUID = 1 AND [GUID] IS NULL) OR ([GUID] = @Original_GUID)) AND ((@IsNull_CPUSpeed = 1 AND [CPUSpeed] IS NULL) OR ([CPUSpeed] = @Original_CPUSpeed)) AND ((@IsNull_Memory = 1 AND [Memory] IS NULL) OR ([Memory] = @Original_Memory)) AND ((@IsNull_Login = 1 AND [Login] IS NULL) OR ([Login] = @Original_Login)) AND ((@IsNull_Status = 1 AND [Status] IS NULL) OR ([Status] = @Original_Status)) AND ((@IsNull_ClientConfigId = 1 AND [ClientConfigId] IS NULL) OR ([ClientConfigId] = @Original_ClientConfigId)) AND ((@IsNull_NumberOfCores = 1 AND [NumberOfCores] IS NULL) OR ([NumberOfCores] = @Original_NumberOfCores)));
+SELECT ResourceId, GUID, CPUSpeed, Memory, Login, Status, ClientConfigId, NumberOfCores FROM Client WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Guid" Direction="Input" ParameterName="@GUID" Precision="0" ProviderType="UniqueIdentifier" Scale="0" Size="0" SourceColumn="GUID" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@CPUSpeed" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="CPUSpeed" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Memory" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Memory" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Login" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="Login" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Status" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Status" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ClientConfigId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientConfigId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@NumberOfCores" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="NumberOfCores" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_GUID" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="GUID" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Guid" Direction="Input" ParameterName="@Original_GUID" Precision="0" ProviderType="UniqueIdentifier" Scale="0" Size="0" SourceColumn="GUID" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_CPUSpeed" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="CPUSpeed" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_CPUSpeed" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="CPUSpeed" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Memory" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Memory" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_Memory" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Memory" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Login" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Login" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_Login" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="Login" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Status" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Status" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Status" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Status" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ClientConfigId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ClientConfigId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ClientConfigId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientConfigId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_NumberOfCores" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="NumberOfCores" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_NumberOfCores" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="NumberOfCores" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+              <Mapping SourceColumn="GUID" DataSetColumn="GUID" />
+              <Mapping SourceColumn="CPUSpeed" DataSetColumn="CPUSpeed" />
+              <Mapping SourceColumn="Memory" DataSetColumn="Memory" />
+              <Mapping SourceColumn="Login" DataSetColumn="Login" />
+              <Mapping SourceColumn="Status" DataSetColumn="Status" />
+              <Mapping SourceColumn="ClientConfigId" DataSetColumn="ClientConfigId" />
+              <Mapping SourceColumn="NumberOfCores" DataSetColumn="NumberOfCores" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Client" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByActive" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByActive" GeneratorSourceName="FillByActive" GetMethodModifier="Public" GetMethodName="GetDataByActive" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByActive" UserSourceName="FillByActive">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.Client WHERE Status &lt;&gt; 'offline'</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Client" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.Client WHERE GUID = @ID</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="ID" ColumnName="GUID" DataSourceName="HiveServer.dbo.Client" DataTypeServer="uniqueidentifier" DbType="Guid" Direction="Input" ParameterName="@ID" Precision="0" ProviderType="UniqueIdentifier" Scale="0" Size="16" SourceColumn="GUID" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.Client" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByResourceId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByResourceId" GeneratorSourceName="FillByResourceId" GetMethodModifier="Public" GetMethodName="GetDataByResourceId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByResourceId" UserSourceName="FillByResourceId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.Client WHERE ResourceId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="ResourceId" DataSourceName="HiveServer.dbo.Client" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="HiveUserTableAdapter" GeneratorDataComponentClassName="HiveUserTableAdapter" Name="HiveUser" UserDataComponentName="HiveUserTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.HiveUser" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[HiveUser] WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ((@IsNull_Password = 1 AND [Password] IS NULL) OR ([Password] = @Original_Password)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Password" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Password" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Password" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Password" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[HiveUser] ([PermissionOwnerId], [Password]) VALUES (@PermissionOwnerId, @Password);
+SELECT PermissionOwnerId, Password FROM HiveUser WHERE (PermissionOwnerId = @PermissionOwnerId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Password" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Password" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT PermissionOwnerId, Password FROM dbo.HiveUser</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[HiveUser] SET [PermissionOwnerId] = @PermissionOwnerId, [Password] = @Password WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ((@IsNull_Password = 1 AND [Password] IS NULL) OR ([Password] = @Original_Password)));
+SELECT PermissionOwnerId, Password FROM HiveUser WHERE (PermissionOwnerId = @PermissionOwnerId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Password" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Password" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Password" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Password" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Password" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Password" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="PermissionOwnerId" DataSetColumn="PermissionOwnerId" />
+              <Mapping SourceColumn="Password" DataSetColumn="Password" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.HiveUser" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.HiveUser WHERE PermissionOwnerId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="PermissionOwnerId" DataSourceName="HiveServer.dbo.HiveUser" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.HiveUser" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByName" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByName" GeneratorSourceName="FillByName" GetMethodModifier="Public" GetMethodName="GetDataByName" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByName" UserSourceName="FillByName">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     HiveUser.PermissionOwnerId, HiveUser.Password
+FROM         HiveUser INNER JOIN
+                      PermissionOwner ON HiveUser.PermissionOwnerId = PermissionOwner.PermissionOwnerId
+WHERE     (PermissionOwner.Name = @Name)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="Name" ColumnName="Name" DataSourceName="HiveServer.dbo.PermissionOwner" DataTypeServer="varchar(18)" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="18" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="PermissionOwnerTableAdapter" GeneratorDataComponentClassName="PermissionOwnerTableAdapter" Name="PermissionOwner" UserDataComponentName="PermissionOwnerTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[PermissionOwner] WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Name" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[PermissionOwner] ([Name]) VALUES (@Name);
+SELECT PermissionOwnerId, Name FROM PermissionOwner WHERE (PermissionOwnerId = SCOPE_IDENTITY())</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT PermissionOwnerId, Name FROM dbo.PermissionOwner</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[PermissionOwner] SET [Name] = @Name WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ((@IsNull_Name = 1 AND [Name] IS NULL) OR ([Name] = @Original_Name)));
+SELECT PermissionOwnerId, Name FROM PermissionOwner WHERE (PermissionOwnerId = @PermissionOwnerId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Name" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_Name" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="PermissionOwnerId" ColumnName="PermissionOwnerId" DataSourceName="" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="PermissionOwnerId" DataSetColumn="PermissionOwnerId" />
+              <Mapping SourceColumn="Name" DataSetColumn="Name" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.PermissionOwner WHERE PermissionOwnerId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="PermissionOwnerId" DataSourceName="HiveServer.dbo.PermissionOwner" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByName" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByName" GeneratorSourceName="FillByName" GetMethodModifier="Public" GetMethodName="GetDataByName" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByName" UserSourceName="FillByName">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.PermissionOwner WHERE Name = @Name</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="Name" ColumnName="Name" DataSourceName="HiveServer.dbo.PermissionOwner" DataTypeServer="varchar(18)" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="18" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="UserGroupTableAdapter" GeneratorDataComponentClassName="UserGroupTableAdapter" Name="UserGroup" UserDataComponentName="UserGroupTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[UserGroup] WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[UserGroup] ([PermissionOwnerId]) VALUES (@PermissionOwnerId);
+SELECT PermissionOwnerId FROM UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT PermissionOwnerId FROM dbo.UserGroup</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[UserGroup] SET [PermissionOwnerId] = @PermissionOwnerId WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId));
+SELECT PermissionOwnerId FROM UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="PermissionOwnerId" DataSetColumn="PermissionOwnerId" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.UserGroup WHERE PermissionOwnerId  = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="PermissionOwnerId" DataSourceName="HiveServer.dbo.UserGroup" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByName" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByName" GeneratorSourceName="FillByName" GetMethodModifier="Public" GetMethodName="GetDataByName" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByName" UserSourceName="FillByName">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     UserGroup.*
+FROM         UserGroup INNER JOIN
+                   PermissionOwner ON UserGroup.PermissionOwnerId = PermissionOwner.PermissionOwnerId
+WHERE     (PermissionOwner.Name = @Name)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="Name" ColumnName="Name" DataSourceName="HiveServer.dbo.PermissionOwner" DataTypeServer="varchar(18)" DbType="AnsiString" Direction="Input" ParameterName="@Name" Precision="0" ProviderType="VarChar" Scale="0" Size="18" SourceColumn="Name" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="PermissionOwner_UserGroupTableAdapter" GeneratorDataComponentClassName="PermissionOwner_UserGroupTableAdapter" Name="PermissionOwner_UserGroup" UserDataComponentName="PermissionOwner_UserGroupTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner_UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[PermissionOwner_UserGroup] WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ([UserGroupId] = @Original_UserGroupId))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_UserGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="UserGroupId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[PermissionOwner_UserGroup] ([PermissionOwnerId], [UserGroupId]) VALUES (@PermissionOwnerId, @UserGroupId);
+SELECT PermissionOwnerId, UserGroupId FROM PermissionOwner_UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId) AND (UserGroupId = @UserGroupId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@UserGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="UserGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT PermissionOwnerId, UserGroupId FROM dbo.PermissionOwner_UserGroup</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[PermissionOwner_UserGroup] SET [PermissionOwnerId] = @PermissionOwnerId, [UserGroupId] = @UserGroupId WHERE (([PermissionOwnerId] = @Original_PermissionOwnerId) AND ([UserGroupId] = @Original_UserGroupId));
+SELECT PermissionOwnerId, UserGroupId FROM PermissionOwner_UserGroup WHERE (PermissionOwnerId = @PermissionOwnerId) AND (UserGroupId = @UserGroupId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@UserGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="UserGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_UserGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="UserGroupId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="PermissionOwnerId" DataSetColumn="PermissionOwnerId" />
+              <Mapping SourceColumn="UserGroupId" DataSetColumn="UserGroupId" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner_UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByPermissionOwnerId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByPermissionOwnerId" GeneratorSourceName="FillByPermissionOwnerId" GetMethodModifier="Public" GetMethodName="GetDataByPermissionOwnerId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByPermissionOwnerId" UserSourceName="FillByPermissionOwnerId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.PermissionOwner_UserGroup WHERE PermissionOwnerId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="PermissionOwnerId" DataSourceName="HiveServer.dbo.PermissionOwner_UserGroup" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner_UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByPermownerUsergroupId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByPermownerUsergroupId" GeneratorSourceName="FillByPermownerUsergroupId" GetMethodModifier="Public" GetMethodName="GetDataByPermownerUsergroupId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByPermownerUsergroupId" UserSourceName="FillByPermownerUsergroupId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.PermissionOwner_UserGroup WHERE PermissionOwnerId = @PermissionOwnerId AND UserGroupId = @UserGroupId</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="PermissionOwnerId" ColumnName="PermissionOwnerId" DataSourceName="HiveServer.dbo.PermissionOwner_UserGroup" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="UserGroupId" ColumnName="UserGroupId" DataSourceName="HiveServer.dbo.PermissionOwner_UserGroup" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@UserGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="UserGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.PermissionOwner_UserGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByUserGroupId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByUserGroupId" GeneratorSourceName="FillByUserGroupId" GetMethodModifier="Public" GetMethodName="GetDataByUserGroupId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByUserGroupId" UserSourceName="FillByUserGroupId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.PermissionOwner_UserGroup WHERE UserGroupId = @UserGroupId</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="UserGroupId" ColumnName="UserGroupId" DataSourceName="HiveServer.dbo.PermissionOwner_UserGroup" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@UserGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="UserGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="ClientGroupTableAdapter" GeneratorDataComponentClassName="ClientGroupTableAdapter" Name="ClientGroup" UserDataComponentName="ClientGroupTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[ClientGroup] WHERE (([ResourceId] = @Original_ResourceId))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[ClientGroup] ([ResourceId]) VALUES (@ResourceId);
+SELECT ResourceId FROM ClientGroup WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT ResourceId FROM dbo.ClientGroup</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[ClientGroup] SET [ResourceId] = @ResourceId WHERE (([ResourceId] = @Original_ResourceId));
+SELECT ResourceId FROM ClientGroup WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.ClientGroup WHERE ResourceId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="ResourceId" DataSourceName="HiveServer.dbo.ClientGroup" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="JobTableAdapter" GeneratorDataComponentClassName="JobTableAdapter" Name="Job" UserDataComponentName="JobTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [Job] WHERE (([JobId] = @Original_JobId) AND ((@IsNull_ParentJobId = 1 AND [ParentJobId] IS NULL) OR ([ParentJobId] = @Original_ParentJobId)) AND ((@IsNull_JobState = 1 AND [JobState] IS NULL) OR ([JobState] = @Original_JobState)) AND ((@IsNull_PermissionOwnerId = 1 AND [PermissionOwnerId] IS NULL) OR ([PermissionOwnerId] = @Original_PermissionOwnerId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateCreated = 1 AND [DateCreated] IS NULL) OR ([DateCreated] = @Original_DateCreated)) AND ((@IsNull_DateCalculated = 1 AND [DateCalculated] IS NULL) OR ([DateCalculated] = @Original_DateCalculated)) AND ((@IsNull_Priority = 1 AND [Priority] IS NULL) OR ([Priority] = @Original_Priority)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ParentJobId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ParentJobId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ParentJobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ParentJobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobState" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobState" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_JobState" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="JobState" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_PermissionOwnerId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ResourceId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Percentage" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Original_Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_DateCreated" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="DateCreated" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_DateCreated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCreated" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_DateCalculated" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="DateCalculated" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_DateCalculated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCalculated" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Priority" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Priority" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_Priority" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Priority" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [Job] ([ParentJobId], [JobState], [PermissionOwnerId], [ResourceId], [SerializedJob], [Percentage], [DateCreated], [DateCalculated], [Priority]) VALUES (@ParentJobId, @JobState, @PermissionOwnerId, @ResourceId, @SerializedJob, @Percentage, @DateCreated, @DateCalculated, @Priority);
+SELECT JobId, ParentJobId, JobState, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority FROM Job WHERE (JobId = SCOPE_IDENTITY())</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ParentJobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ParentJobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@JobState" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="JobState" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@SerializedJob" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="SerializedJob" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DateCreated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCreated" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DateCalculated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCalculated" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Priority" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Priority" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     JobId, ParentJobId, JobState, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority
+FROM         Job</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [Job] SET [ParentJobId] = @ParentJobId, [JobState] = @JobState, [PermissionOwnerId] = @PermissionOwnerId, [ResourceId] = @ResourceId, [SerializedJob] = @SerializedJob, [Percentage] = @Percentage, [DateCreated] = @DateCreated, [DateCalculated] = @DateCalculated, [Priority] = @Priority WHERE (([JobId] = @Original_JobId) AND ((@IsNull_ParentJobId = 1 AND [ParentJobId] IS NULL) OR ([ParentJobId] = @Original_ParentJobId)) AND ((@IsNull_JobState = 1 AND [JobState] IS NULL) OR ([JobState] = @Original_JobState)) AND ((@IsNull_PermissionOwnerId = 1 AND [PermissionOwnerId] IS NULL) OR ([PermissionOwnerId] = @Original_PermissionOwnerId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateCreated = 1 AND [DateCreated] IS NULL) OR ([DateCreated] = @Original_DateCreated)) AND ((@IsNull_DateCalculated = 1 AND [DateCalculated] IS NULL) OR ([DateCalculated] = @Original_DateCalculated)) AND ((@IsNull_Priority = 1 AND [Priority] IS NULL) OR ([Priority] = @Original_Priority)));
+SELECT JobId, ParentJobId, JobState, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority FROM Job WHERE (JobId = @JobId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ParentJobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ParentJobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@JobState" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="JobState" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@SerializedJob" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="SerializedJob" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DateCreated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCreated" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DateCalculated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCalculated" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Priority" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Priority" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ParentJobId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ParentJobId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ParentJobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ParentJobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobState" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobState" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Original_JobState" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="JobState" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_PermissionOwnerId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ResourceId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Percentage" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Original_Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_DateCreated" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="DateCreated" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_DateCreated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCreated" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_DateCalculated" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="DateCalculated" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_DateCalculated" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateCalculated" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Priority" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Priority" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Original_Priority" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Priority" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="JobId" ColumnName="JobId" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="JobId" DataSetColumn="JobId" />
+              <Mapping SourceColumn="ParentJobId" DataSetColumn="ParentJobId" />
+              <Mapping SourceColumn="PermissionOwnerId" DataSetColumn="PermissionOwnerId" />
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+              <Mapping SourceColumn="JobState" DataSetColumn="JobState" />
+              <Mapping SourceColumn="Percentage" DataSetColumn="Percentage" />
+              <Mapping SourceColumn="SerializedJob" DataSetColumn="SerializedJob" />
+              <Mapping SourceColumn="DateCreated" DataSetColumn="DateCreated" />
+              <Mapping SourceColumn="DateCalculated" DataSetColumn="DateCalculated" />
+              <Mapping SourceColumn="Priority" DataSetColumn="Priority" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByActive" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByActive" GeneratorSourceName="FillByActive" GetMethodModifier="Public" GetMethodName="GetDataByActive" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByActive" UserSourceName="FillByActive">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, PermissionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (JobState = 'calculating') OR (JobState = 'idle')</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByCalculatingClient" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByCalculatingClient" GeneratorSourceName="FillByCalculatingClient" GetMethodModifier="Public" GetMethodName="GetDataByCalculatingClient" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByCalculatingClient" UserSourceName="FillByCalculatingClient">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     JobId, JobState, ParentJobId, PermissionOwnerId, ResourceId, SerializedJob, Percentage, DateCreated, DateCalculated, Priority
+FROM         Job
+WHERE     (JobState = 'calculating') AND (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="ResourceId" ColumnName="ResourceId" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByClient" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByClient" GeneratorSourceName="FillByClient" GetMethodModifier="Public" GetMethodName="GetDataByClient" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByClient" UserSourceName="FillByClient">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, PermissionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="ResourceId" ColumnName="ResourceId" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, PermissionOwnerId, Priority, ResourceId, SerializedJob
+FROM         Job
+WHERE     (JobId = @Id)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="JobId" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByState" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByState" GeneratorSourceName="FillByState" GetMethodModifier="Public" GetMethodName="GetDataByState" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByState" UserSourceName="FillByState">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, PermissionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (JobState = @State)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="State" ColumnName="JobState" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="varchar(18)" DbType="AnsiString" Direction="Input" ParameterName="@State" Precision="0" ProviderType="VarChar" Scale="0" Size="18" SourceColumn="JobState" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillBySubjobs" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataBySubjobs" GeneratorSourceName="FillBySubjobs" GetMethodModifier="Public" GetMethodName="GetDataBySubjobs" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataBySubjobs" UserSourceName="FillBySubjobs">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, PermissionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (ParentJobId = @Id)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="Id" ColumnName="ParentJobId" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ParentJobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.Job" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByUser" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByUser" GeneratorSourceName="FillByUser" GetMethodModifier="Public" GetMethodName="GetDataByUser" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByUser" UserSourceName="FillByUser">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT DateCalculated, DateCreated, JobId, JobState, ParentJobId, Percentage, PermissionOwnerId, Priority, ResourceId, SerializedJob FROM Job WHERE (PermissionOwnerId = @PermissionOwnerId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="PermissionOwnerId" ColumnName="PermissionOwnerId" DataSourceName="HiveServerDBTesting.dbo.Job" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@PermissionOwnerId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="PermissionOwnerId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="ClientGroup_ResourceTableAdapter" GeneratorDataComponentClassName="ClientGroup_ResourceTableAdapter" Name="ClientGroup_Resource" UserDataComponentName="ClientGroup_ResourceTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup_Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [dbo].[ClientGroup_Resource] WHERE (([ClientGroupId] = @Original_ClientGroupId) AND ([ResourceId] = @Original_ResourceId))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ClientGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [dbo].[ClientGroup_Resource] ([ClientGroupId], [ResourceId]) VALUES (@ClientGroupId, @ResourceId);
+SELECT ClientGroupId, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupId = @ClientGroupId) AND (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ClientGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>SELECT ClientGroupId, ResourceId FROM dbo.ClientGroup_Resource</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [dbo].[ClientGroup_Resource] SET [ClientGroupId] = @ClientGroupId, [ResourceId] = @ResourceId WHERE (([ClientGroupId] = @Original_ClientGroupId) AND ([ResourceId] = @Original_ResourceId));
+SELECT ClientGroupId, ResourceId FROM ClientGroup_Resource WHERE (ClientGroupId = @ClientGroupId) AND (ResourceId = @ResourceId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ClientGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ClientGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ClientGroupId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="ClientGroupId" DataSetColumn="ClientGroupId" />
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup_Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByClientGroupId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByClientGroupId" GeneratorSourceName="FillByClientGroupId" GetMethodModifier="Public" GetMethodName="GetDataByClientGroupId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByClientGroupId" UserSourceName="FillByClientGroupId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.ClientGroup_Resource WHERE ClientGroupId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="ClientGroupId" DataSourceName="HiveServer.dbo.ClientGroup_Resource" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ClientGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup_Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByClientGroupResourceId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByClientGroupResourceId" GeneratorSourceName="FillByClientGroupResourceId" GetMethodModifier="Public" GetMethodName="GetDataByClientGroupResourceId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByClientGroupResourceId" UserSourceName="FillByClientGroupResourceId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.ClientGroup_Resource WHERE ClientGroupId = @ClientGroupId AND  ResourceId = @ResourceId</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="ClientGroupId" ColumnName="ClientGroupId" DataSourceName="HiveServer.dbo.ClientGroup_Resource" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@ClientGroupId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ClientGroupId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="ResourceId" ColumnName="ResourceId" DataSourceName="HiveServer.dbo.ClientGroup_Resource" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServer.dbo.ClientGroup_Resource" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByResourceId" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByResourceId" GeneratorSourceName="FillByResourceId" GetMethodModifier="Public" GetMethodName="GetDataByResourceId" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByResourceId" UserSourceName="FillByResourceId">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT * FROM dbo.ClientGroup_Resource WHERE ResourceId = @Id</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="ResourceId" DataSourceName="HiveServer.dbo.ClientGroup_Resource" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+          <TableAdapter BaseClass="System.ComponentModel.Component" DataAccessorModifier="AutoLayout, AnsiClass, Class, Public" DataAccessorName="JobResultTableAdapter" GeneratorDataComponentClassName="JobResultTableAdapter" Name="JobResult" UserDataComponentName="JobResultTableAdapter">
+            <MainSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.JobResult" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="Fill" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetData" GeneratorSourceName="Fill" GetMethodModifier="Public" GetMethodName="GetData" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetData" UserSourceName="Fill">
+                <DeleteCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>DELETE FROM [JobResult] WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateFinished = 1 AND [DateFinished] IS NULL) OR ([DateFinished] = @Original_DateFinished)))</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobResultId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ResourceId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Percentage" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Original_Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_DateFinished" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="DateFinished" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_DateFinished" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateFinished" SourceColumnNullMapping="false" SourceVersion="Original" />
+                    </Parameters>
+                  </DbCommand>
+                </DeleteCommand>
+                <InsertCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>INSERT INTO [JobResult] ([JobId], [JobResult], [ResourceId], [Message], [Percentage], [DateFinished]) VALUES (@JobId, @JobResult, @ResourceId, @Message, @Percentage, @DateFinished);
+SELECT JobResultId, JobId, JobResult, ResourceId, Message, Percentage, DateFinished FROM JobResult WHERE (JobResultId = SCOPE_IDENTITY())</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@JobResult" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Message" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Message" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DateFinished" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateFinished" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </InsertCommand>
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     JobResultId, JobId, JobResult, ResourceId, Message, Percentage, DateFinished
+FROM         JobResult</CommandText>
+                    <Parameters />
+                  </DbCommand>
+                </SelectCommand>
+                <UpdateCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="false">
+                    <CommandText>UPDATE [JobResult] SET [JobId] = @JobId, [JobResult] = @JobResult, [ResourceId] = @ResourceId, [Message] = @Message, [Percentage] = @Percentage, [DateFinished] = @DateFinished WHERE (([JobResultId] = @Original_JobResultId) AND ((@IsNull_JobId = 1 AND [JobId] IS NULL) OR ([JobId] = @Original_JobId)) AND ((@IsNull_ResourceId = 1 AND [ResourceId] IS NULL) OR ([ResourceId] = @Original_ResourceId)) AND ((@IsNull_Percentage = 1 AND [Percentage] IS NULL) OR ([Percentage] = @Original_Percentage)) AND ((@IsNull_DateFinished = 1 AND [DateFinished] IS NULL) OR ([DateFinished] = @Original_DateFinished)));
+SELECT JobResultId, JobId, JobResult, ResourceId, Message, Percentage, DateFinished FROM JobResult WHERE (JobResultId = @JobResultId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Binary" Direction="Input" ParameterName="@JobResult" Precision="0" ProviderType="VarBinary" Scale="0" Size="0" SourceColumn="JobResult" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="AnsiString" Direction="Input" ParameterName="@Message" Precision="0" ProviderType="VarChar" Scale="0" Size="0" SourceColumn="Message" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DateFinished" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateFinished" SourceColumnNullMapping="false" SourceVersion="Current" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobResultId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_JobId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_ResourceId" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int64" Direction="Input" ParameterName="@Original_ResourceId" Precision="0" ProviderType="BigInt" Scale="0" Size="0" SourceColumn="ResourceId" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_Percentage" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Double" Direction="Input" ParameterName="@Original_Percentage" Precision="0" ProviderType="Float" Scale="0" Size="0" SourceColumn="Percentage" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@IsNull_DateFinished" Precision="0" ProviderType="Int" Scale="0" Size="0" SourceColumn="DateFinished" SourceColumnNullMapping="true" SourceVersion="Original" />
+                      <Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@Original_DateFinished" Precision="0" ProviderType="DateTime" Scale="0" Size="0" SourceColumn="DateFinished" SourceColumnNullMapping="false" SourceVersion="Original" />
+                      <Parameter AllowDbNull="false" AutogeneratedName="JobResultId" ColumnName="JobResultId" DataSourceName="HiveServerDBTesting.dbo.JobResult" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@JobResultId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </UpdateCommand>
+              </DbSource>
+            </MainSource>
+            <Mappings>
+              <Mapping SourceColumn="JobResultId" DataSetColumn="JobResultId" />
+              <Mapping SourceColumn="JobId" DataSetColumn="JobId" />
+              <Mapping SourceColumn="JobResult" DataSetColumn="JobResult" />
+              <Mapping SourceColumn="ResourceId" DataSetColumn="ResourceId" />
+              <Mapping SourceColumn="Message" DataSetColumn="Message" />
+              <Mapping SourceColumn="Percentage" DataSetColumn="Percentage" />
+              <Mapping SourceColumn="DateFinished" DataSetColumn="DateFinished" />
+            </Mappings>
+            <Sources>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.JobResult" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillById" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataById" GeneratorSourceName="FillById" GetMethodModifier="Public" GetMethodName="GetDataById" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataById" UserSourceName="FillById">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     JobId, JobResult, JobResultId, Message, ResourceId, Percentage, DateFinished
+FROM         JobResult
+WHERE     (JobResultId = @Id)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="false" AutogeneratedName="Id" ColumnName="JobResultId" DataSourceName="HiveServerDBTesting.dbo.JobResult" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@Id" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="JobResultId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+              <DbSource ConnectionRef="HiveServerConnectionString (Settings)" DbObjectName="HiveServerDBTesting.dbo.JobResult" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillByJob" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="GetDataByJob" GeneratorSourceName="FillByJob" GetMethodModifier="Public" GetMethodName="GetDataByJob" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="GetDataByJob" UserSourceName="FillByJob">
+                <SelectCommand>
+                  <DbCommand CommandType="Text" ModifiedByUser="true">
+                    <CommandText>SELECT     JobId, JobResult, JobResultId, Message, ResourceId, Percentage, DateFinished
+FROM         JobResult
+WHERE     (JobId = @JobId)</CommandText>
+                    <Parameters>
+                      <Parameter AllowDbNull="true" AutogeneratedName="JobId" ColumnName="JobId" DataSourceName="HiveServerDBTesting.dbo.JobResult" DataTypeServer="bigint" DbType="Int64" Direction="Input" ParameterName="@JobId" Precision="0" ProviderType="BigInt" Scale="0" Size="8" SourceColumn="JobId" SourceColumnNullMapping="false" SourceVersion="Current" />
+                    </Parameters>
+                  </DbCommand>
+                </SelectCommand>
+              </DbSource>
+            </Sources>
+          </TableAdapter>
+        </Tables>
+        <Sources />
+      </DataSource>
+    </xs:appinfo>
+  </xs:annotation>
+  <xs:element name="dsHiveServer" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="dsHiveServer" msprop:Generator_DataSetName="dsHiveServer" msprop:EnableTableAdapterManager="true">
+    <xs:complexType>
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element name="Resource" msprop:Generator_UserTableName="Resource" msprop:Generator_RowDeletedName="ResourceRowDeleted" msprop:Generator_RowChangedName="ResourceRowChanged" msprop:Generator_RowClassName="ResourceRow" msprop:Generator_RowChangingName="ResourceRowChanging" msprop:Generator_RowEvArgName="ResourceRowChangeEvent" msprop:Generator_RowEvHandlerName="ResourceRowChangeEventHandler" msprop:Generator_TableClassName="ResourceDataTable" msprop:Generator_TableVarName="tableResource" msprop:Generator_RowDeletingName="ResourceRowDeleting" msprop:Generator_TablePropName="Resource">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ResourceId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+              <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInTable="NameColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="Client" msprop:Generator_UserTableName="Client" msprop:Generator_RowDeletedName="ClientRowDeleted" msprop:Generator_RowChangedName="ClientRowChanged" msprop:Generator_RowClassName="ClientRow" msprop:Generator_RowChangingName="ClientRowChanging" msprop:Generator_RowEvArgName="ClientRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientRowChangeEventHandler" msprop:Generator_TableClassName="ClientDataTable" msprop:Generator_TableVarName="tableClient" msprop:Generator_RowDeletingName="ClientRowDeleting" msprop:Generator_TablePropName="Client">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+              <xs:element name="GUID" msdata:DataType="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" msprop:Generator_UserColumnName="GUID" msprop:Generator_ColumnVarNameInTable="columnGUID" msprop:Generator_ColumnPropNameInRow="GUID" msprop:Generator_ColumnPropNameInTable="GUIDColumn" type="xs:string" minOccurs="0" />
+              <xs:element name="CPUSpeed" msprop:Generator_UserColumnName="CPUSpeed" msprop:Generator_ColumnVarNameInTable="columnCPUSpeed" msprop:Generator_ColumnPropNameInRow="CPUSpeed" msprop:Generator_ColumnPropNameInTable="CPUSpeedColumn" type="xs:int" minOccurs="0" />
+              <xs:element name="Memory" msprop:Generator_UserColumnName="Memory" msprop:Generator_ColumnVarNameInTable="columnMemory" msprop:Generator_ColumnPropNameInRow="Memory" msprop:Generator_ColumnPropNameInTable="MemoryColumn" type="xs:int" minOccurs="0" />
+              <xs:element name="Login" msprop:Generator_UserColumnName="Login" msprop:Generator_ColumnVarNameInTable="columnLogin" msprop:Generator_ColumnPropNameInRow="Login" msprop:Generator_ColumnPropNameInTable="LoginColumn" type="xs:dateTime" minOccurs="0" />
+              <xs:element name="Status" msprop:Generator_UserColumnName="Status" msprop:Generator_ColumnVarNameInTable="columnStatus" msprop:Generator_ColumnPropNameInRow="Status" msprop:Generator_ColumnPropNameInTable="StatusColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+              <xs:element name="ClientConfigId" msprop:Generator_UserColumnName="ClientConfigId" msprop:Generator_ColumnVarNameInTable="columnClientConfigId" msprop:Generator_ColumnPropNameInRow="ClientConfigId" msprop:Generator_ColumnPropNameInTable="ClientConfigIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="NumberOfCores" msprop:Generator_UserColumnName="NumberOfCores" msprop:Generator_ColumnVarNameInTable="columnNumberOfCores" msprop:Generator_ColumnPropNameInRow="NumberOfCores" msprop:Generator_ColumnPropNameInTable="NumberOfCoresColumn" type="xs:int" minOccurs="0" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="HiveUser" msprop:Generator_UserTableName="HiveUser" msprop:Generator_RowDeletedName="HiveUserRowDeleted" msprop:Generator_RowChangedName="HiveUserRowChanged" msprop:Generator_RowClassName="HiveUserRow" msprop:Generator_RowChangingName="HiveUserRowChanging" msprop:Generator_RowEvArgName="HiveUserRowChangeEvent" msprop:Generator_RowEvHandlerName="HiveUserRowChangeEventHandler" msprop:Generator_TableClassName="HiveUserDataTable" msprop:Generator_TableVarName="tableHiveUser" msprop:Generator_RowDeletingName="HiveUserRowDeleting" msprop:Generator_TablePropName="HiveUser">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+              <xs:element name="Password" msprop:Generator_UserColumnName="Password" msprop:Generator_ColumnVarNameInTable="columnPassword" msprop:Generator_ColumnPropNameInRow="Password" msprop:Generator_ColumnPropNameInTable="PasswordColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="PermissionOwner" msprop:Generator_UserTableName="PermissionOwner" msprop:Generator_RowDeletedName="PermissionOwnerRowDeleted" msprop:Generator_RowChangedName="PermissionOwnerRowChanged" msprop:Generator_RowClassName="PermissionOwnerRow" msprop:Generator_RowChangingName="PermissionOwnerRowChanging" msprop:Generator_RowEvArgName="PermissionOwnerRowChangeEvent" msprop:Generator_RowEvHandlerName="PermissionOwnerRowChangeEventHandler" msprop:Generator_TableClassName="PermissionOwnerDataTable" msprop:Generator_TableVarName="tablePermissionOwner" msprop:Generator_RowDeletingName="PermissionOwnerRowDeleting" msprop:Generator_TablePropName="PermissionOwner">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+              <xs:element name="Name" msprop:Generator_UserColumnName="Name" msprop:Generator_ColumnVarNameInTable="columnName" msprop:Generator_ColumnPropNameInRow="Name" msprop:Generator_ColumnPropNameInTable="NameColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="UserGroup" msprop:Generator_UserTableName="UserGroup" msprop:Generator_RowDeletedName="UserGroupRowDeleted" msprop:Generator_RowChangedName="UserGroupRowChanged" msprop:Generator_RowClassName="UserGroupRow" msprop:Generator_RowChangingName="UserGroupRowChanging" msprop:Generator_RowEvArgName="UserGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="UserGroupRowChangeEventHandler" msprop:Generator_TableClassName="UserGroupDataTable" msprop:Generator_TableVarName="tableUserGroup" msprop:Generator_RowDeletingName="UserGroupRowDeleting" msprop:Generator_TablePropName="UserGroup">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="PermissionOwner_UserGroup" msprop:Generator_UserTableName="PermissionOwner_UserGroup" msprop:Generator_RowDeletedName="PermissionOwner_UserGroupRowDeleted" msprop:Generator_RowChangedName="PermissionOwner_UserGroupRowChanged" msprop:Generator_RowClassName="PermissionOwner_UserGroupRow" msprop:Generator_RowChangingName="PermissionOwner_UserGroupRowChanging" msprop:Generator_RowEvArgName="PermissionOwner_UserGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="PermissionOwner_UserGroupRowChangeEventHandler" msprop:Generator_TableClassName="PermissionOwner_UserGroupDataTable" msprop:Generator_TableVarName="tablePermissionOwner_UserGroup" msprop:Generator_RowDeletingName="PermissionOwner_UserGroupRowDeleting" msprop:Generator_TablePropName="PermissionOwner_UserGroup">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" />
+              <xs:element name="UserGroupId" msprop:Generator_UserColumnName="UserGroupId" msprop:Generator_ColumnVarNameInTable="columnUserGroupId" msprop:Generator_ColumnPropNameInRow="UserGroupId" msprop:Generator_ColumnPropNameInTable="UserGroupIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="ClientGroup" msprop:Generator_UserTableName="ClientGroup" msprop:Generator_RowDeletedName="ClientGroupRowDeleted" msprop:Generator_RowChangedName="ClientGroupRowChanged" msprop:Generator_RowClassName="ClientGroupRow" msprop:Generator_RowChangingName="ClientGroupRowChanging" msprop:Generator_RowEvArgName="ClientGroupRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientGroupRowChangeEventHandler" msprop:Generator_TableClassName="ClientGroupDataTable" msprop:Generator_TableVarName="tableClientGroup" msprop:Generator_RowDeletingName="ClientGroupRowDeleting" msprop:Generator_TablePropName="ClientGroup">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="Job" msprop:Generator_UserTableName="Job" msprop:Generator_RowDeletedName="JobRowDeleted" msprop:Generator_RowChangedName="JobRowChanged" msprop:Generator_RowClassName="JobRow" msprop:Generator_RowChangingName="JobRowChanging" msprop:Generator_RowEvArgName="JobRowChangeEvent" msprop:Generator_RowEvHandlerName="JobRowChangeEventHandler" msprop:Generator_TableClassName="JobDataTable" msprop:Generator_TableVarName="tableJob" msprop:Generator_RowDeletingName="JobRowDeleting" msprop:Generator_TablePropName="Job">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="JobId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="JobId" msprop:Generator_ColumnVarNameInTable="columnJobId" msprop:Generator_ColumnPropNameInRow="JobId" msprop:Generator_ColumnPropNameInTable="JobIdColumn" type="xs:long" />
+              <xs:element name="ParentJobId" msprop:Generator_UserColumnName="ParentJobId" msprop:Generator_ColumnVarNameInTable="columnParentJobId" msprop:Generator_ColumnPropNameInRow="ParentJobId" msprop:Generator_ColumnPropNameInTable="ParentJobIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="PermissionOwnerId" msprop:Generator_UserColumnName="PermissionOwnerId" msprop:Generator_ColumnVarNameInTable="columnPermissionOwnerId" msprop:Generator_ColumnPropNameInRow="PermissionOwnerId" msprop:Generator_ColumnPropNameInTable="PermissionOwnerIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="JobState" msprop:Generator_UserColumnName="JobState" msprop:Generator_ColumnPropNameInRow="JobState" msprop:Generator_ColumnVarNameInTable="columnJobState" msprop:Generator_ColumnPropNameInTable="JobStateColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="18" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+              <xs:element name="Percentage" msprop:Generator_UserColumnName="Percentage" msprop:Generator_ColumnPropNameInRow="Percentage" msprop:Generator_ColumnVarNameInTable="columnPercentage" msprop:Generator_ColumnPropNameInTable="PercentageColumn" type="xs:double" minOccurs="0" />
+              <xs:element name="SerializedJob" msprop:Generator_UserColumnName="SerializedJob" msprop:Generator_ColumnPropNameInRow="SerializedJob" msprop:Generator_ColumnVarNameInTable="columnSerializedJob" msprop:Generator_ColumnPropNameInTable="SerializedJobColumn" type="xs:base64Binary" minOccurs="0" />
+              <xs:element name="DateCreated" msprop:Generator_UserColumnName="DateCreated" msprop:Generator_ColumnPropNameInRow="DateCreated" msprop:Generator_ColumnVarNameInTable="columnDateCreated" msprop:Generator_ColumnPropNameInTable="DateCreatedColumn" type="xs:dateTime" minOccurs="0" />
+              <xs:element name="DateCalculated" msprop:Generator_UserColumnName="DateCalculated" msprop:Generator_ColumnPropNameInRow="DateCalculated" msprop:Generator_ColumnVarNameInTable="columnDateCalculated" msprop:Generator_ColumnPropNameInTable="DateCalculatedColumn" type="xs:dateTime" minOccurs="0" />
+              <xs:element name="Priority" msprop:Generator_UserColumnName="Priority" msprop:Generator_ColumnPropNameInRow="Priority" msprop:Generator_ColumnVarNameInTable="columnPriority" msprop:Generator_ColumnPropNameInTable="PriorityColumn" type="xs:int" minOccurs="0" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="ClientGroup_Resource" msprop:Generator_UserTableName="ClientGroup_Resource" msprop:Generator_RowDeletedName="ClientGroup_ResourceRowDeleted" msprop:Generator_RowChangedName="ClientGroup_ResourceRowChanged" msprop:Generator_RowClassName="ClientGroup_ResourceRow" msprop:Generator_RowChangingName="ClientGroup_ResourceRowChanging" msprop:Generator_RowEvArgName="ClientGroup_ResourceRowChangeEvent" msprop:Generator_RowEvHandlerName="ClientGroup_ResourceRowChangeEventHandler" msprop:Generator_TableClassName="ClientGroup_ResourceDataTable" msprop:Generator_TableVarName="tableClientGroup_Resource" msprop:Generator_RowDeletingName="ClientGroup_ResourceRowDeleting" msprop:Generator_TablePropName="ClientGroup_Resource">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="ClientGroupId" msprop:Generator_UserColumnName="ClientGroupId" msprop:Generator_ColumnPropNameInRow="ClientGroupId" msprop:Generator_ColumnVarNameInTable="columnClientGroupId" msprop:Generator_ColumnPropNameInTable="ClientGroupIdColumn" type="xs:long" />
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+        <xs:element name="JobResult" msprop:Generator_UserTableName="JobResult" msprop:Generator_RowDeletedName="JobResultRowDeleted" msprop:Generator_RowChangedName="JobResultRowChanged" msprop:Generator_RowClassName="JobResultRow" msprop:Generator_RowChangingName="JobResultRowChanging" msprop:Generator_RowEvArgName="JobResultRowChangeEvent" msprop:Generator_RowEvHandlerName="JobResultRowChangeEventHandler" msprop:Generator_TableClassName="JobResultDataTable" msprop:Generator_TableVarName="tableJobResult" msprop:Generator_RowDeletingName="JobResultRowDeleting" msprop:Generator_TablePropName="JobResult">
+          <xs:complexType>
+            <xs:sequence>
+              <xs:element name="JobResultId" msdata:ReadOnly="true" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="-1" msdata:AutoIncrementStep="-1" msprop:Generator_UserColumnName="JobResultId" msprop:Generator_ColumnVarNameInTable="columnJobResultId" msprop:Generator_ColumnPropNameInRow="JobResultId" msprop:Generator_ColumnPropNameInTable="JobResultIdColumn" type="xs:long" />
+              <xs:element name="JobId" msprop:Generator_UserColumnName="JobId" msprop:Generator_ColumnVarNameInTable="columnJobId" msprop:Generator_ColumnPropNameInRow="JobId" msprop:Generator_ColumnPropNameInTable="JobIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="JobResult" msprop:Generator_UserColumnName="JobResult" msprop:Generator_ColumnVarNameInTable="columnJobResult" msprop:Generator_ColumnPropNameInRow="JobResult" msprop:Generator_ColumnPropNameInTable="JobResultColumn" type="xs:base64Binary" minOccurs="0" />
+              <xs:element name="ResourceId" msprop:Generator_UserColumnName="ResourceId" msprop:Generator_ColumnVarNameInTable="columnResourceId" msprop:Generator_ColumnPropNameInRow="ResourceId" msprop:Generator_ColumnPropNameInTable="ResourceIdColumn" type="xs:long" minOccurs="0" />
+              <xs:element name="Message" msprop:Generator_UserColumnName="Message" msprop:Generator_ColumnPropNameInRow="Message" msprop:Generator_ColumnVarNameInTable="columnMessage" msprop:Generator_ColumnPropNameInTable="MessageColumn" minOccurs="0">
+                <xs:simpleType>
+                  <xs:restriction base="xs:string">
+                    <xs:maxLength value="2147483647" />
+                  </xs:restriction>
+                </xs:simpleType>
+              </xs:element>
+              <xs:element name="Percentage" msprop:Generator_UserColumnName="Percentage" msprop:Generator_ColumnPropNameInRow="Percentage" msprop:Generator_ColumnVarNameInTable="columnPercentage" msprop:Generator_ColumnPropNameInTable="PercentageColumn" type="xs:double" minOccurs="0" />
+              <xs:element name="DateFinished" msprop:Generator_UserColumnName="DateFinished" msprop:Generator_ColumnPropNameInRow="DateFinished" msprop:Generator_ColumnVarNameInTable="columnDateFinished" msprop:Generator_ColumnPropNameInTable="DateFinishedColumn" type="xs:dateTime" minOccurs="0" />
+            </xs:sequence>
+          </xs:complexType>
+        </xs:element>
+      </xs:choice>
+    </xs:complexType>
+    <xs:unique name="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:Resource" />
+      <xs:field xpath="mstns:ResourceId" />
+    </xs:unique>
+    <xs:unique name="Client_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:Client" />
+      <xs:field xpath="mstns:ResourceId" />
+    </xs:unique>
+    <xs:unique name="HiveUser_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:HiveUser" />
+      <xs:field xpath="mstns:PermissionOwnerId" />
+    </xs:unique>
+    <xs:unique name="PermissionOwner_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:PermissionOwner" />
+      <xs:field xpath="mstns:PermissionOwnerId" />
+    </xs:unique>
+    <xs:unique name="UserGroup_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:UserGroup" />
+      <xs:field xpath="mstns:PermissionOwnerId" />
+    </xs:unique>
+    <xs:unique name="PermissionOwner_UserGroup_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:PermissionOwner_UserGroup" />
+      <xs:field xpath="mstns:PermissionOwnerId" />
+      <xs:field xpath="mstns:UserGroupId" />
+    </xs:unique>
+    <xs:unique name="ClientGroup_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:ClientGroup" />
+      <xs:field xpath="mstns:ResourceId" />
+    </xs:unique>
+    <xs:unique name="Job_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:Job" />
+      <xs:field xpath="mstns:JobId" />
+    </xs:unique>
+    <xs:unique name="ClientGroup_Resource_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:ClientGroup_Resource" />
+      <xs:field xpath="mstns:ClientGroupId" />
+      <xs:field xpath="mstns:ResourceId" />
+    </xs:unique>
+    <xs:unique name="JobResult_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
+      <xs:selector xpath=".//mstns:JobResult" />
+      <xs:field xpath="mstns:JobResultId" />
+    </xs:unique>
+  </xs:element>
+  <xs:annotation>
+    <xs:appinfo>
+      <msdata:Relationship name="Client_is_a_Resource" msdata:parent="Resource" msdata:child="Client" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="Client_is_a_Resource" msprop:Generator_RelationVarName="relationClient_is_a_Resource" msprop:Generator_UserChildTable="Client" msprop:Generator_UserParentTable="Resource" msprop:Generator_ParentPropName="ResourceRow" msprop:Generator_ChildPropName="GetClientRows" />
+      <msdata:Relationship name="User_is_a_PermissionOwner" msdata:parent="PermissionOwner" msdata:child="HiveUser" msdata:parentkey="PermissionOwnerId" msdata:childkey="PermissionOwnerId" msprop:Generator_UserRelationName="User_is_a_PermissionOwner" msprop:Generator_RelationVarName="relationUser_is_a_PermissionOwner" msprop:Generator_UserChildTable="HiveUser" msprop:Generator_UserParentTable="PermissionOwner" msprop:Generator_ParentPropName="PermissionOwnerRow" msprop:Generator_ChildPropName="GetHiveUserRows" />
+      <msdata:Relationship name="UserGroup_is_a_PermissionOwner" msdata:parent="PermissionOwner" msdata:child="UserGroup" msdata:parentkey="PermissionOwnerId" msdata:childkey="PermissionOwnerId" msprop:Generator_UserRelationName="UserGroup_is_a_PermissionOwner" msprop:Generator_RelationVarName="relationUserGroup_is_a_PermissionOwner" msprop:Generator_UserChildTable="UserGroup" msprop:Generator_UserParentTable="PermissionOwner" msprop:Generator_ParentPropName="PermissionOwnerRow" msprop:Generator_ChildPropName="GetUserGroupRows" />
+      <msdata:Relationship name="R_44" msdata:parent="PermissionOwner" msdata:child="PermissionOwner_UserGroup" msdata:parentkey="PermissionOwnerId" msdata:childkey="PermissionOwnerId" msprop:Generator_UserRelationName="R_44" msprop:Generator_RelationVarName="relationR_44" msprop:Generator_UserChildTable="PermissionOwner_UserGroup" msprop:Generator_UserParentTable="PermissionOwner" msprop:Generator_ParentPropName="PermissionOwnerRow" msprop:Generator_ChildPropName="GetPermissionOwner_UserGroupRows" />
+      <msdata:Relationship name="R_57" msdata:parent="UserGroup" msdata:child="PermissionOwner_UserGroup" msdata:parentkey="PermissionOwnerId" msdata:childkey="UserGroupId" msprop:Generator_UserRelationName="R_57" msprop:Generator_RelationVarName="relationR_57" msprop:Generator_UserChildTable="PermissionOwner_UserGroup" msprop:Generator_UserParentTable="UserGroup" msprop:Generator_ParentPropName="UserGroupRow" msprop:Generator_ChildPropName="GetPermissionOwner_UserGroupRows" />
+      <msdata:Relationship name="ClientGroup_is_a_Resource" msdata:parent="Resource" msdata:child="ClientGroup" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="ClientGroup_is_a_Resource" msprop:Generator_RelationVarName="relationClientGroup_is_a_Resource" msprop:Generator_UserChildTable="ClientGroup" msprop:Generator_UserParentTable="Resource" msprop:Generator_ParentPropName="ResourceRow" msprop:Generator_ChildPropName="GetClientGroupRows" />
+      <msdata:Relationship name="R_21" msdata:parent="Client" msdata:child="Job" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="R_21" msprop:Generator_RelationVarName="relationR_21" msprop:Generator_UserChildTable="Job" msprop:Generator_UserParentTable="Client" msprop:Generator_ParentPropName="ClientRow" msprop:Generator_ChildPropName="GetJobRows" />
+      <msdata:Relationship name="R_35" msdata:parent="HiveUser" msdata:child="Job" msdata:parentkey="PermissionOwnerId" msdata:childkey="PermissionOwnerId" msprop:Generator_UserRelationName="R_35" msprop:Generator_RelationVarName="relationR_35" msprop:Generator_UserChildTable="Job" msprop:Generator_UserParentTable="HiveUser" msprop:Generator_ParentPropName="HiveUserRow" msprop:Generator_ChildPropName="GetJobRows" />
+      <msdata:Relationship name="R_52" msdata:parent="ClientGroup" msdata:child="ClientGroup_Resource" msdata:parentkey="ResourceId" msdata:childkey="ClientGroupId" msprop:Generator_UserRelationName="R_52" msprop:Generator_RelationVarName="relationR_52" msprop:Generator_UserChildTable="ClientGroup_Resource" msprop:Generator_UserParentTable="ClientGroup" msprop:Generator_ParentPropName="ClientGroupRow" msprop:Generator_ChildPropName="GetClientGroup_ResourceRows" />
+      <msdata:Relationship name="R_59" msdata:parent="Resource" msdata:child="ClientGroup_Resource" msdata:parentkey="ResourceId" msdata:childkey="ResourceId" msprop:Generator_UserRelationName="R_59" msprop:Generator_RelationVarName="relationR_59" msprop:Generator_UserChildTable="ClientGroup_Resource" msprop:Generator_UserParentTable="Resource" msprop:Generator_ParentPropName="ResourceRow" msprop:Generator_ChildPropName="GetClientGroup_ResourceRows" />
+      <msdata:Relationship name="R_14" msdata:parent="Job" msdata:child="JobResult" msdata:parentkey="JobId" msdata:childkey="JobId" msprop:Generator_UserRelationName="R_14" msprop:Generator_RelationVarName="relationR_14" msprop:Generator_UserChildTable="JobResult" msprop:Generator_UserParentTable="Job" msprop:Generator_ParentPropName="JobRow" msprop:Generator_ChildPropName="GetJobResultRows" />
+    </xs:appinfo>
+  </xs:annotation>
+</xs:schema>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.ADODataAccess/dsHiveServer.xss	(revision 1270)
@@ -0,0 +1,178 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--<autogenerated>
+     This code was generated by a tool to store the dataset designer's layout information.
+     Changes to this file may cause incorrect behavior and will be lost if
+     the code is regenerated.
+</autogenerated>-->
+<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="-285" ViewPortY="227" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
+  <Shapes>
+    <Shape ID="DesignTable:Resource" ZOrder="20" X="31" Y="-16" Height="156" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:Client" ZOrder="8" X="-210" Y="176" Height="258" Width="265" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="160" />
+    <Shape ID="DesignTable:HiveUser" ZOrder="17" X="885" Y="224" Height="139" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:PermissionOwner" ZOrder="16" X="572" Y="-7" Height="139" Width="242" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:UserGroup" ZOrder="11" X="566" Y="409" Height="123" Width="226" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
+    <Shape ID="DesignTable:PermissionOwner_UserGroup" ZOrder="9" X="456" Y="215" Height="156" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:ClientGroup" ZOrder="10" X="78" Y="417" Height="106" Width="209" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="42" />
+    <Shape ID="DesignTable:Job" ZOrder="1" X="-20" Y="543" Height="309" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="194" />
+    <Shape ID="DesignTable:ClientGroup_Resource" ZOrder="7" X="150" Y="207" Height="156" Width="300" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="58" />
+    <Shape ID="DesignTable:JobResult" ZOrder="2" X="-274" Y="567" Height="224" Width="197" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="143" />
+  </Shapes>
+  <Connectors>
+    <Connector ID="DesignRelation:Client_is_a_Resource" ZOrder="21" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>31</X>
+          <Y>140</Y>
+        </Point>
+        <Point>
+          <X>31</X>
+          <Y>176</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:User_is_a_PermissionOwner" ZOrder="13" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>797</X>
+          <Y>132</Y>
+        </Point>
+        <Point>
+          <X>797</X>
+          <Y>241</Y>
+        </Point>
+        <Point>
+          <X>885</X>
+          <Y>241</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:UserGroup_is_a_PermissionOwner" ZOrder="18" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>800</X>
+          <Y>132</Y>
+        </Point>
+        <Point>
+          <X>800</X>
+          <Y>426</Y>
+        </Point>
+        <Point>
+          <X>792</X>
+          <Y>426</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_44" ZOrder="14" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>754</X>
+          <Y>132</Y>
+        </Point>
+        <Point>
+          <X>754</X>
+          <Y>215</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_57" ZOrder="19" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>652</X>
+          <Y>409</Y>
+        </Point>
+        <Point>
+          <X>652</X>
+          <Y>371</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:ClientGroup_is_a_Resource" ZOrder="15" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>122</X>
+          <Y>140</Y>
+        </Point>
+        <Point>
+          <X>122</X>
+          <Y>417</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_21" ZOrder="12" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>6</X>
+          <Y>434</Y>
+        </Point>
+        <Point>
+          <X>6</X>
+          <Y>543</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_35" ZOrder="3" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>902</X>
+          <Y>363</Y>
+        </Point>
+        <Point>
+          <X>902</X>
+          <Y>560</Y>
+        </Point>
+        <Point>
+          <X>280</X>
+          <Y>560</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_52" ZOrder="6" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>142</X>
+          <Y>417</Y>
+        </Point>
+        <Point>
+          <X>142</X>
+          <Y>280</Y>
+        </Point>
+        <Point>
+          <X>150</X>
+          <Y>280</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_59" ZOrder="5" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>142</X>
+          <Y>140</Y>
+        </Point>
+        <Point>
+          <X>142</X>
+          <Y>224</Y>
+        </Point>
+        <Point>
+          <X>150</X>
+          <Y>224</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+    <Connector ID="DesignRelation:R_14" ZOrder="4" LineWidth="11">
+      <RoutePoints>
+        <Point>
+          <X>-20</X>
+          <Y>799</Y>
+        </Point>
+        <Point>
+          <X>-124</X>
+          <Y>799</Y>
+        </Point>
+        <Point>
+          <X>-124</X>
+          <Y>791</Y>
+        </Point>
+      </RoutePoints>
+    </Connector>
+  </Connectors>
+</DiagramLayout>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.Designer.cs	(revision 1270)
@@ -0,0 +1,147 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddJobForm {
+    /// <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.lblParentJob = new System.Windows.Forms.Label();
+      this.cbParJob = new System.Windows.Forms.ComboBox();
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.lblNumJobs = new System.Windows.Forms.Label();
+      this.tbNumJobs = new System.Windows.Forms.TextBox();
+      this.lblError = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // lblParentJob
+      // 
+      this.lblParentJob.AutoSize = true;
+      this.lblParentJob.Location = new System.Drawing.Point(9, 36);
+      this.lblParentJob.Name = "lblParentJob";
+      this.lblParentJob.Size = new System.Drawing.Size(58, 13);
+      this.lblParentJob.TabIndex = 1;
+      this.lblParentJob.Text = "Parent Job";
+      // 
+      // cbParJob
+      // 
+      this.cbParJob.FormattingEnabled = true;
+      this.cbParJob.Location = new System.Drawing.Point(117, 33);
+      this.cbParJob.Name = "cbParJob";
+      this.cbParJob.Size = new System.Drawing.Size(212, 21);
+      this.cbParJob.TabIndex = 2;
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Location = new System.Drawing.Point(12, 65);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 3;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.BtnAdd_Click);
+      // 
+      // btnClose
+      // 
+      this.btnClose.Location = new System.Drawing.Point(254, 65);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 4;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.BtnClose_Click);
+      // 
+      // lblNumJobs
+      // 
+      this.lblNumJobs.AutoSize = true;
+      this.lblNumJobs.Location = new System.Drawing.Point(12, 9);
+      this.lblNumJobs.Name = "lblNumJobs";
+      this.lblNumJobs.Size = new System.Drawing.Size(78, 13);
+      this.lblNumJobs.TabIndex = 6;
+      this.lblNumJobs.Text = "Number of jobs";
+      // 
+      // tbNumJobs
+      // 
+      this.tbNumJobs.Location = new System.Drawing.Point(117, 6);
+      this.tbNumJobs.Name = "tbNumJobs";
+      this.tbNumJobs.Size = new System.Drawing.Size(212, 20);
+      this.tbNumJobs.TabIndex = 1;
+      this.tbNumJobs.Text = "1";
+      // 
+      // lblError
+      // 
+      this.lblError.AutoSize = true;
+      this.lblError.Location = new System.Drawing.Point(94, 74);
+      this.lblError.Name = "lblError";
+      this.lblError.Size = new System.Drawing.Size(0, 13);
+      this.lblError.TabIndex = 8;
+      // 
+      // AddJobForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(344, 100);
+      this.Controls.Add(this.lblError);
+      this.Controls.Add(this.tbNumJobs);
+      this.Controls.Add(this.lblNumJobs);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Controls.Add(this.cbParJob);
+      this.Controls.Add(this.lblParentJob);
+      this.Name = "AddJobForm";
+      this.Text = "Add Job";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label lblParentJob;
+    private System.Windows.Forms.ComboBox cbParJob;
+    private System.Windows.Forms.Button btnAdd;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.Label lblNumJobs;
+    private System.Windows.Forms.TextBox tbNumJobs;
+    private System.Windows.Forms.Label lblError;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.cs	(revision 1270)
@@ -0,0 +1,103 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public delegate void addDelegate();
+
+  public partial class AddJobForm : Form {
+
+    public event addDelegate addJobEvent;
+
+    ResponseList<Job> jobGroups = null;
+    IJobManager jobManager;
+
+    public AddJobForm() {
+      InitializeComponent();
+      AddJob();
+    }
+
+    private void AddJob() {
+      jobManager =
+        ServiceLocator.GetJobManager();
+      jobGroups = jobManager.GetAllJobs();
+      cbParJob.Items.Add("none");
+      cbParJob.SelectedIndex = 0; 
+      foreach (Job job in jobGroups.List) {
+        cbParJob.Items.Add(job.Id);
+      }
+    }
+
+    private void BtnAdd_Click(object sender, EventArgs e) {
+      try {
+        lblError.Text = "";
+        int numJobs = Convert.ToInt32(tbNumJobs.Text);
+        if (numJobs > 0) {
+          for (int i = 0; i < numJobs; i++) {
+            if (cbParJob.SelectedIndex != 0) {
+              foreach (Job pjob in jobGroups.List) {
+                if (cbParJob.SelectedItem.ToString().Equals(pjob.Id.ToString())) {
+                  Job job = new Job { ParentJob = pjob, State = State.offline };
+                  job.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
+                  Response resp = jobManager.AddNewJob(job);
+                }
+              }
+            } else {
+              Job job = new Job { State = State.offline };
+              job.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
+              Response resp = jobManager.AddNewJob(job);
+            }
+          }
+          if (addJobEvent != null) {
+            addJobEvent();
+          }
+          this.Close();
+        } else {
+          lblError.Text = "Wrong number of Jobs";
+        }
+
+      }
+      catch {
+        lblError.Text = "There should be a number";
+      }
+    }
+
+    private void BtnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddJobForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.Designer.cs	(revision 1270)
@@ -0,0 +1,159 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class AddUserForm {
+    /// <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.lblOne = new System.Windows.Forms.Label();
+      this.lblGroup = new System.Windows.Forms.Label();
+      this.tbOne = new System.Windows.Forms.TextBox();
+      this.cbGroups = new System.Windows.Forms.ComboBox();
+      this.btnAdd = new System.Windows.Forms.Button();
+      this.btnClose = new System.Windows.Forms.Button();
+      this.tbPwd = new System.Windows.Forms.TextBox();
+      this.lblPassword = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // lblOne
+      // 
+      this.lblOne.AutoSize = true;
+      this.lblOne.Location = new System.Drawing.Point(12, 14);
+      this.lblOne.Name = "lblOne";
+      this.lblOne.Size = new System.Drawing.Size(35, 13);
+      this.lblOne.TabIndex = 0;
+      this.lblOne.Text = "label1";
+      // 
+      // lblGroup
+      // 
+      this.lblGroup.AutoSize = true;
+      this.lblGroup.Location = new System.Drawing.Point(12, 71);
+      this.lblGroup.Name = "lblGroup";
+      this.lblGroup.Size = new System.Drawing.Size(35, 13);
+      this.lblGroup.TabIndex = 1;
+      this.lblGroup.Text = "label2";
+      // 
+      // tbOne
+      // 
+      this.tbOne.Location = new System.Drawing.Point(120, 7);
+      this.tbOne.Name = "tbOne";
+      this.tbOne.Size = new System.Drawing.Size(212, 20);
+      this.tbOne.TabIndex = 1;
+      // 
+      // cbGroups
+      // 
+      this.cbGroups.FormattingEnabled = true;
+      this.cbGroups.Location = new System.Drawing.Point(120, 68);
+      this.cbGroups.Name = "cbGroups";
+      this.cbGroups.Size = new System.Drawing.Size(212, 21);
+      this.cbGroups.TabIndex = 3;
+      // 
+      // btnAdd
+      // 
+      this.btnAdd.Location = new System.Drawing.Point(12, 95);
+      this.btnAdd.Name = "btnAdd";
+      this.btnAdd.Size = new System.Drawing.Size(75, 23);
+      this.btnAdd.TabIndex = 4;
+      this.btnAdd.Text = "Add";
+      this.btnAdd.UseVisualStyleBackColor = true;
+      this.btnAdd.Click += new System.EventHandler(this.BtnAdd_Click);
+      // 
+      // btnClose
+      // 
+      this.btnClose.Location = new System.Drawing.Point(257, 95);
+      this.btnClose.Name = "btnClose";
+      this.btnClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClose.TabIndex = 5;
+      this.btnClose.Text = "Close";
+      this.btnClose.UseVisualStyleBackColor = true;
+      this.btnClose.Click += new System.EventHandler(this.BtnClose_Click);
+      // 
+      // tbPwd
+      // 
+      this.tbPwd.Location = new System.Drawing.Point(120, 37);
+      this.tbPwd.Name = "tbPwd";
+      this.tbPwd.Size = new System.Drawing.Size(212, 20);
+      this.tbPwd.TabIndex = 2;
+      this.tbPwd.UseSystemPasswordChar = true;
+      // 
+      // lblPassword
+      // 
+      this.lblPassword.AutoSize = true;
+      this.lblPassword.Location = new System.Drawing.Point(12, 44);
+      this.lblPassword.Name = "lblPassword";
+      this.lblPassword.Size = new System.Drawing.Size(53, 13);
+      this.lblPassword.TabIndex = 0;
+      this.lblPassword.Text = "Password";
+      // 
+      // AddUserForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.BackColor = System.Drawing.SystemColors.Control;
+      this.ClientSize = new System.Drawing.Size(344, 130);
+      this.Controls.Add(this.tbPwd);
+      this.Controls.Add(this.lblPassword);
+      this.Controls.Add(this.btnClose);
+      this.Controls.Add(this.btnAdd);
+      this.Controls.Add(this.cbGroups);
+      this.Controls.Add(this.tbOne);
+      this.Controls.Add(this.lblGroup);
+      this.Controls.Add(this.lblOne);
+      this.Name = "AddUserForm";
+      this.Text = "AddUserForm";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label lblOne;
+    private System.Windows.Forms.Label lblGroup;
+    private System.Windows.Forms.TextBox tbOne;
+    private System.Windows.Forms.ComboBox cbGroups;
+    private System.Windows.Forms.Button btnAdd;
+    private System.Windows.Forms.Button btnClose;
+    private System.Windows.Forms.TextBox tbPwd;
+    private System.Windows.Forms.Label lblPassword;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.cs	(revision 1270)
@@ -0,0 +1,111 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  public partial class AddUserForm : Form {
+
+    public event addDelegate addUserEvent;
+    ResponseList<UserGroup> userGroups = null;
+    IUserRoleManager userRoleManager;
+    bool group;
+
+    public AddUserForm(string addForm, bool group) {
+      this.group = group;
+      InitializeComponent();
+      this.Name = "Add " + addForm;
+
+      lblOne.Text = addForm;
+      if (group) {
+        lblOne.Text += " Group";
+      }
+
+      lblGroup.Text = addForm + " Groups";
+
+      if (addForm == "User") {
+        AddUser();
+      }
+    }
+
+    private void AddUser() {
+     userRoleManager = ServiceLocator.GetUserRoleManager();
+      userGroups = userRoleManager.GetAllUserGroups();
+      cbGroups.Items.Add("none");
+      cbGroups.SelectedIndex = 0;
+      foreach (UserGroup ug in userGroups.List) {
+        cbGroups.Items.Add(ug.Name);
+      }
+    }
+
+    private void BtnAdd_Click(object sender, EventArgs e) {
+      if (!group) {
+        if (tbOne.Text != "") {
+          User u = new User() { Name = tbOne.Text, Password = tbPwd.Text };
+          ResponseObject<User> respUser = userRoleManager.AddNewUser(u);
+          if (respUser.Success == true) {
+            if (cbGroups.SelectedIndex != 0) {
+              u = respUser.Obj;
+              foreach (UserGroup ug in userGroups.List) {
+                if (cbGroups.SelectedItem.ToString().Equals(ug.Name)) {
+                  Response resp = userRoleManager.AddUserToGroup
+                    (ug.Id, u.Id);
+                }
+              }
+            }
+          }
+        }
+      } else {
+        UserGroup ug = new UserGroup { Name = tbOne.Text };
+        ResponseObject<UserGroup> respug = userRoleManager.AddNewUserGroup(ug);
+        if (respug.Success == true) {
+          if (!cbGroups.SelectedText.Equals("none")) {
+            ug = respug.Obj;
+            foreach (UserGroup ugs in userGroups.List) {
+              if (cbGroups.SelectedText.Equals(ugs.Name)) {
+                Response resp = userRoleManager.AddUserGroupToGroup
+                  (ug.Id, ugs.Id);
+              }
+            }
+          }
+        }
+      }
+      if (addUserEvent != null) {
+        addUserEvent();
+      }
+      this.Close();
+    }
+
+    private void BtnClose_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/AddUserForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HeuristicLab.Hive.Server.Console.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HeuristicLab.Hive.Server.Console.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HeuristicLab.Hive.Server.Console.csproj	(revision 1270)
@@ -0,0 +1,173 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.ServerConsole</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.Console-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.DirectoryServices" />
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AddUserForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddUserForm.Designer.cs">
+      <DependentUpon>AddUserForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AddJobForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddJobForm.Designer.cs">
+      <DependentUpon>AddJobForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveServerConsole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="HiveServerConsole.Designer.cs">
+      <DependentUpon>HiveServerConsole.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveServerConsoleApplication.cs" />
+    <Compile Include="HiveServerManagementConsole.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="HiveServerManagementConsole.Designer.cs">
+      <DependentUpon>HiveServerManagementConsole.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveServerConsolePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="AddUserForm.resx">
+      <DependentUpon>AddUserForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AddJobForm.resx">
+      <DependentUpon>AddJobForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveServerConsole.resx">
+      <DependentUpon>HiveServerConsole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="HiveServerManagementConsole.resx">
+      <DependentUpon>HiveServerManagementConsole.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="ServiceLocator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.JobBase\HeuristicLab.Hive.JobBase.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.Designer.cs	(revision 1270)
@@ -0,0 +1,251 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class HiveServerConsole {
+    /// <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.msServerConsole = new System.Windows.Forms.MenuStrip();
+      this.tsmiConsole = new System.Windows.Forms.ToolStripMenuItem();
+      this.tsmiExit = new System.Windows.Forms.ToolStripMenuItem();
+      this.gbManager = new System.Windows.Forms.GroupBox();
+      this.lblPort = new System.Windows.Forms.Label();
+      this.lblIp = new System.Windows.Forms.Label();
+      this.tbPort = new System.Windows.Forms.TextBox();
+      this.tbIp = new System.Windows.Forms.TextBox();
+      this.btnLogin = new System.Windows.Forms.Button();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.tbUserName = new System.Windows.Forms.TextBox();
+      this.lblPwd = new System.Windows.Forms.Label();
+      this.lblUsername = new System.Windows.Forms.Label();
+      this.tbPwd = new System.Windows.Forms.TextBox();
+      this.lblError = new System.Windows.Forms.Label();
+      this.msServerConsole.SuspendLayout();
+      this.gbManager.SuspendLayout();
+      this.groupBox1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // msServerConsole
+      // 
+      this.msServerConsole.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.tsmiConsole});
+      this.msServerConsole.Location = new System.Drawing.Point(0, 0);
+      this.msServerConsole.Name = "msServerConsole";
+      this.msServerConsole.Size = new System.Drawing.Size(311, 24);
+      this.msServerConsole.TabIndex = 0;
+      this.msServerConsole.Text = "menuStrip1";
+      // 
+      // tsmiConsole
+      // 
+      this.tsmiConsole.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.tsmiExit});
+      this.tsmiConsole.Name = "tsmiConsole";
+      this.tsmiConsole.Size = new System.Drawing.Size(87, 20);
+      this.tsmiConsole.Text = "Serverconsole";
+      // 
+      // tsmiExit
+      // 
+      this.tsmiExit.Name = "tsmiExit";
+      this.tsmiExit.Size = new System.Drawing.Size(103, 22);
+      this.tsmiExit.Text = "Exit";
+      this.tsmiExit.Click += new System.EventHandler(this.tsmiExit_Click);
+      // 
+      // gbManager
+      // 
+      this.gbManager.Controls.Add(this.lblPort);
+      this.gbManager.Controls.Add(this.lblIp);
+      this.gbManager.Controls.Add(this.tbPort);
+      this.gbManager.Controls.Add(this.tbIp);
+      this.gbManager.Location = new System.Drawing.Point(16, 124);
+      this.gbManager.Name = "gbManager";
+      this.gbManager.Size = new System.Drawing.Size(283, 82);
+      this.gbManager.TabIndex = 4;
+      this.gbManager.TabStop = false;
+      this.gbManager.Text = "Manager";
+      // 
+      // lblPort
+      // 
+      this.lblPort.AutoSize = true;
+      this.lblPort.Location = new System.Drawing.Point(16, 54);
+      this.lblPort.Name = "lblPort";
+      this.lblPort.Size = new System.Drawing.Size(26, 13);
+      this.lblPort.TabIndex = 3;
+      this.lblPort.Text = "Port";
+      // 
+      // lblIp
+      // 
+      this.lblIp.AutoSize = true;
+      this.lblIp.Location = new System.Drawing.Point(16, 26);
+      this.lblIp.Name = "lblIp";
+      this.lblIp.Size = new System.Drawing.Size(17, 13);
+      this.lblIp.TabIndex = 2;
+      this.lblIp.Text = "IP";
+      // 
+      // tbPort
+      // 
+      this.tbPort.Location = new System.Drawing.Point(77, 47);
+      this.tbPort.Name = "tbPort";
+      this.tbPort.Size = new System.Drawing.Size(189, 20);
+      this.tbPort.TabIndex = 6;
+      this.tbPort.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // tbIp
+      // 
+      this.tbIp.Location = new System.Drawing.Point(77, 19);
+      this.tbIp.Name = "tbIp";
+      this.tbIp.Size = new System.Drawing.Size(191, 20);
+      this.tbIp.TabIndex = 5;
+      this.tbIp.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // btnLogin
+      // 
+      this.btnLogin.Location = new System.Drawing.Point(183, 212);
+      this.btnLogin.Name = "btnLogin";
+      this.btnLogin.Size = new System.Drawing.Size(116, 23);
+      this.btnLogin.TabIndex = 7;
+      this.btnLogin.Text = "Login";
+      this.btnLogin.UseVisualStyleBackColor = true;
+      this.btnLogin.Click += new System.EventHandler(this.BtnLogin_Click);
+      this.btnLogin.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.tbUserName);
+      this.groupBox1.Controls.Add(this.lblPwd);
+      this.groupBox1.Controls.Add(this.lblUsername);
+      this.groupBox1.Controls.Add(this.tbPwd);
+      this.groupBox1.Location = new System.Drawing.Point(16, 36);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(283, 82);
+      this.groupBox1.TabIndex = 1;
+      this.groupBox1.TabStop = false;
+      this.groupBox1.Text = "Manager";
+      // 
+      // tbUserName
+      // 
+      this.tbUserName.Location = new System.Drawing.Point(77, 19);
+      this.tbUserName.Name = "tbUserName";
+      this.tbUserName.Size = new System.Drawing.Size(189, 20);
+      this.tbUserName.TabIndex = 2;
+      this.tbUserName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // lblPwd
+      // 
+      this.lblPwd.AutoSize = true;
+      this.lblPwd.Location = new System.Drawing.Point(16, 54);
+      this.lblPwd.Name = "lblPwd";
+      this.lblPwd.Size = new System.Drawing.Size(53, 13);
+      this.lblPwd.TabIndex = 3;
+      this.lblPwd.Text = "Password";
+      // 
+      // lblUsername
+      // 
+      this.lblUsername.AutoSize = true;
+      this.lblUsername.Location = new System.Drawing.Point(16, 26);
+      this.lblUsername.Name = "lblUsername";
+      this.lblUsername.Size = new System.Drawing.Size(55, 13);
+      this.lblUsername.TabIndex = 2;
+      this.lblUsername.Text = "Username";
+      // 
+      // tbPwd
+      // 
+      this.tbPwd.Location = new System.Drawing.Point(77, 47);
+      this.tbPwd.Name = "tbPwd";
+      this.tbPwd.Size = new System.Drawing.Size(189, 20);
+      this.tbPwd.TabIndex = 3;
+      this.tbPwd.UseSystemPasswordChar = true;
+      this.tbPwd.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      // 
+      // lblError
+      // 
+      this.lblError.AutoSize = true;
+      this.lblError.ForeColor = System.Drawing.Color.Red;
+      this.lblError.Location = new System.Drawing.Point(16, 238);
+      this.lblError.Name = "lblError";
+      this.lblError.Size = new System.Drawing.Size(0, 13);
+      this.lblError.TabIndex = 5;
+      // 
+      // HiveServerConsole
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(311, 263);
+      this.Controls.Add(this.lblError);
+      this.Controls.Add(this.groupBox1);
+      this.Controls.Add(this.btnLogin);
+      this.Controls.Add(this.gbManager);
+      this.Controls.Add(this.msServerConsole);
+      this.MainMenuStrip = this.msServerConsole;
+      this.Name = "HiveServerConsole";
+      this.Text = "Server Console";
+      this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.HiveServerConsole_KeyPress);
+      this.msServerConsole.ResumeLayout(false);
+      this.msServerConsole.PerformLayout();
+      this.gbManager.ResumeLayout(false);
+      this.gbManager.PerformLayout();
+      this.groupBox1.ResumeLayout(false);
+      this.groupBox1.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.MenuStrip msServerConsole;
+    private System.Windows.Forms.ToolStripMenuItem tsmiConsole;
+    private System.Windows.Forms.ToolStripMenuItem tsmiExit;
+    private System.Windows.Forms.GroupBox gbManager;
+    private System.Windows.Forms.Label lblPort;
+    private System.Windows.Forms.Label lblIp;
+    private System.Windows.Forms.TextBox tbPort;
+    private System.Windows.Forms.TextBox tbIp;
+    private System.Windows.Forms.Button btnLogin;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.TextBox tbUserName;
+    private System.Windows.Forms.Label lblPwd;
+    private System.Windows.Forms.Label lblUsername;
+    private System.Windows.Forms.TextBox tbPwd;
+    private System.Windows.Forms.Label lblError;
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.cs	(revision 1270)
@@ -0,0 +1,127 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using System.Security.Cryptography;
+using System.Net;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public partial class HiveServerConsole : Form {
+
+    HiveServerManagementConsole information = null;
+
+    public HiveServerConsole() {
+      InitializeComponent();
+    }
+
+    private void tsmiExit_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+
+    /// <summary>
+    /// When login button is clicked, the ManagementConsole
+    /// will be opened
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    private void BtnLogin_Click(object sender, EventArgs e) {
+      string newIp = tbIp.Text;
+      newIp = newIp.Replace(" ", "");
+
+        ServiceLocator.Address = newIp;
+        ServiceLocator.Port = this.tbPort.Text;
+
+        if (IsValid()) {
+          this.Visible = false;
+          information = new HiveServerManagementConsole();
+          information.closeFormEvent += new closeForm(EnableForm);
+          information.Show();
+        }
+    }
+
+    /// <summary>
+    /// if the input is correct and the login-method returns a 
+    /// valid response
+    /// </summary>
+    /// <returns></returns>
+    private bool IsValid() {
+      if ((tbUserName.Text != "") &&
+          (tbPwd.Text != "") &&
+          (tbIp.Text != "") &&
+          (tbPort.Text != "")) {
+        try {
+          IPAddress ipAdress;
+          int port;
+          if ((IPAddress.TryParse(tbIp.Text, out ipAdress)) &&
+            int.TryParse(tbPort.Text, out port)) {
+            IServerConsoleFacade scf = ServiceLocator.GetServerConsoleFacade();
+            Response resp = scf.Login(tbUserName.Text, tbPwd.Text);
+            string str = resp.StatusMessage;
+          } else {
+            lblError.Text = "IP or Port not valid";
+          }
+        }
+        catch (Exception ex) {
+          lblError.Text = "Server not online";
+          return false;
+        }
+        return true;
+      } else {
+        if (tbUserName.Text == "") {
+          lblError.Text = "Please type in Username";
+        } else if (tbPwd.Text == "") {
+          lblError.Text = "Please type in Password";
+        } else if (tbPort.Text == "") {
+          lblError.Text = "Please type in Port";
+        } else if (tbIp.Text == "") {
+          lblError.Text = "Please type in IP-Adress";
+        }
+        return false;
+      }
+    }
+
+    private void EnableForm(bool cf, bool error) {
+      if (cf) {
+        this.Visible = true;
+        if (error == true) {
+          lblError.Text = "Something went wrong with the server";
+        }
+      }
+    }
+
+    private void HiveServerConsole_KeyPress(object sender, KeyPressEventArgs e) {
+      if (e.KeyChar == (char)Keys.Return) {
+        BtnLogin_Click(sender, e);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsole.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="msServerConsole.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsoleApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsoleApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsoleApplication.cs	(revision 1270)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  [ClassInfo(Name = "Hive Server Console", Description = "Console Application for the Hive Server.", AutoRestart = true)]
+  class HiveServerConsoleApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new HiveServerConsole();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsolePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsolePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerConsolePlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Grid {
+  [ClassInfo(Name = "HeuristicLab.Hive.Server.Console-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Server.Console-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabHiveClientConsolePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.Designer.cs	(revision 1270)
@@ -0,0 +1,775 @@
+﻿namespace HeuristicLab.Hive.Server.ServerConsole {
+  partial class HiveServerManagementConsole {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HiveServerManagementConsole));
+      this.menuStrip1 = new System.Windows.Forms.MenuStrip();
+      this.informationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.addToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.jobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.userToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.userToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
+      this.groupToolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
+      this.tcManagementConsole = new System.Windows.Forms.TabControl();
+      this.tpClientControl = new System.Windows.Forms.TabPage();
+      this.scClientControl = new System.Windows.Forms.SplitContainer();
+      this.tvClientControl = new System.Windows.Forms.TreeView();
+      this.lvClientControl = new System.Windows.Forms.ListView();
+      this.ilClientControl = new System.Windows.Forms.ImageList(this.components);
+      this.tpJobControl = new System.Windows.Forms.TabPage();
+      this.scJobControl = new System.Windows.Forms.SplitContainer();
+      this.tvJobControl = new System.Windows.Forms.TreeView();
+      this.lvJobControl = new System.Windows.Forms.ListView();
+      this.ilJobControl = new System.Windows.Forms.ImageList(this.components);
+      this.tpUserControl = new System.Windows.Forms.TabPage();
+      this.scUserControl = new System.Windows.Forms.SplitContainer();
+      this.tvUserControl = new System.Windows.Forms.TreeView();
+      this.lvUserControl = new System.Windows.Forms.ListView();
+      this.ilUserControl = new System.Windows.Forms.ImageList(this.components);
+      this.plClientDetails = new System.Windows.Forms.Panel();
+      this.lblState = new System.Windows.Forms.Label();
+      this.lblStateClient = new System.Windows.Forms.Label();
+      this.lblLogin = new System.Windows.Forms.Label();
+      this.lblLoginOn = new System.Windows.Forms.Label();
+      this.lblClientName = new System.Windows.Forms.Label();
+      this.btnClientDetailClose = new System.Windows.Forms.Button();
+      this.pbClientControl = new System.Windows.Forms.PictureBox();
+      this.plUserDetails = new System.Windows.Forms.Panel();
+      this.lblUserName = new System.Windows.Forms.Label();
+      this.btnUserControlClose = new System.Windows.Forms.Button();
+      this.pbUserControl = new System.Windows.Forms.PictureBox();
+      this.plJobDetails = new System.Windows.Forms.Panel();
+      this.lvSnapshots = new System.Windows.Forms.ListView();
+      this.chJobId = new System.Windows.Forms.ColumnHeader();
+      this.chTimeCalculated = new System.Windows.Forms.ColumnHeader();
+      this.chProgress = new System.Windows.Forms.ColumnHeader();
+      this.lblPriorityJob = new System.Windows.Forms.Label();
+      this.lblParentJob = new System.Windows.Forms.Label();
+      this.lblClientCalculating = new System.Windows.Forms.Label();
+      this.lblJobCalculationEnd = new System.Windows.Forms.Label();
+      this.lblJobCalculationBegin = new System.Windows.Forms.Label();
+      this.lblJobCreated = new System.Windows.Forms.Label();
+      this.lblUserCreatedJob = new System.Windows.Forms.Label();
+      this.lblProgress = new System.Windows.Forms.Label();
+      this.lblStatus = new System.Windows.Forms.Label();
+      this.progressJob = new System.Windows.Forms.ProgressBar();
+      this.lblJobName = new System.Windows.Forms.Label();
+      this.btnJobDetailClose = new System.Windows.Forms.Button();
+      this.pbJobControl = new System.Windows.Forms.PictureBox();
+      this.treeView2 = new System.Windows.Forms.TreeView();
+      this.listView2 = new System.Windows.Forms.ListView();
+      this.timerSyncronize = new System.Windows.Forms.Timer(this.components);
+      this.fileSystemWatcher1 = new System.IO.FileSystemWatcher();
+      this.updaterWoker = new System.ComponentModel.BackgroundWorker();
+      this.menuStrip1.SuspendLayout();
+      this.tcManagementConsole.SuspendLayout();
+      this.tpClientControl.SuspendLayout();
+      this.scClientControl.Panel1.SuspendLayout();
+      this.scClientControl.Panel2.SuspendLayout();
+      this.scClientControl.SuspendLayout();
+      this.tpJobControl.SuspendLayout();
+      this.scJobControl.Panel1.SuspendLayout();
+      this.scJobControl.Panel2.SuspendLayout();
+      this.scJobControl.SuspendLayout();
+      this.tpUserControl.SuspendLayout();
+      this.scUserControl.Panel1.SuspendLayout();
+      this.scUserControl.Panel2.SuspendLayout();
+      this.scUserControl.SuspendLayout();
+      this.plClientDetails.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbClientControl)).BeginInit();
+      this.plUserDetails.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbUserControl)).BeginInit();
+      this.plJobDetails.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbJobControl)).BeginInit();
+      ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // menuStrip1
+      // 
+      this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.informationToolStripMenuItem,
+            this.addToolStripMenuItem});
+      this.menuStrip1.Location = new System.Drawing.Point(0, 0);
+      this.menuStrip1.Name = "menuStrip1";
+      this.menuStrip1.Size = new System.Drawing.Size(651, 24);
+      this.menuStrip1.TabIndex = 0;
+      this.menuStrip1.Text = "menuStrip1";
+      // 
+      // informationToolStripMenuItem
+      // 
+      this.informationToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.closeToolStripMenuItem});
+      this.informationToolStripMenuItem.Name = "informationToolStripMenuItem";
+      this.informationToolStripMenuItem.Size = new System.Drawing.Size(81, 20);
+      this.informationToolStripMenuItem.Text = "Management";
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(111, 22);
+      this.closeToolStripMenuItem.Text = "Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.Close_Click);
+      // 
+      // addToolStripMenuItem
+      // 
+      this.addToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.jobToolStripMenuItem,
+            this.userToolStripMenuItem});
+      this.addToolStripMenuItem.Name = "addToolStripMenuItem";
+      this.addToolStripMenuItem.Size = new System.Drawing.Size(38, 20);
+      this.addToolStripMenuItem.Text = "Add";
+      // 
+      // jobToolStripMenuItem
+      // 
+      this.jobToolStripMenuItem.Name = "jobToolStripMenuItem";
+      this.jobToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
+      this.jobToolStripMenuItem.Text = "Job";
+      this.jobToolStripMenuItem.Click += new System.EventHandler(this.AddJob_Click);
+      // 
+      // userToolStripMenuItem
+      // 
+      this.userToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.userToolStripMenuItem1,
+            this.groupToolStripMenuItem2});
+      this.userToolStripMenuItem.Name = "userToolStripMenuItem";
+      this.userToolStripMenuItem.Size = new System.Drawing.Size(107, 22);
+      this.userToolStripMenuItem.Text = "User";
+      // 
+      // userToolStripMenuItem1
+      // 
+      this.userToolStripMenuItem1.Name = "userToolStripMenuItem1";
+      this.userToolStripMenuItem1.Size = new System.Drawing.Size(114, 22);
+      this.userToolStripMenuItem1.Text = "User";
+      this.userToolStripMenuItem1.Click += new System.EventHandler(this.AddUser_Click);
+      // 
+      // groupToolStripMenuItem2
+      // 
+      this.groupToolStripMenuItem2.Name = "groupToolStripMenuItem2";
+      this.groupToolStripMenuItem2.Size = new System.Drawing.Size(114, 22);
+      this.groupToolStripMenuItem2.Text = "Group";
+      this.groupToolStripMenuItem2.Click += new System.EventHandler(this.AddUserGroup_Click);
+      // 
+      // tcManagementConsole
+      // 
+      this.tcManagementConsole.Controls.Add(this.tpClientControl);
+      this.tcManagementConsole.Controls.Add(this.tpJobControl);
+      this.tcManagementConsole.Controls.Add(this.tpUserControl);
+      this.tcManagementConsole.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tcManagementConsole.Location = new System.Drawing.Point(0, 24);
+      this.tcManagementConsole.Name = "tcManagementConsole";
+      this.tcManagementConsole.SelectedIndex = 0;
+      this.tcManagementConsole.Size = new System.Drawing.Size(651, 378);
+      this.tcManagementConsole.TabIndex = 1;
+      // 
+      // tpClientControl
+      // 
+      this.tpClientControl.AllowDrop = true;
+      this.tpClientControl.Controls.Add(this.scClientControl);
+      this.tpClientControl.Location = new System.Drawing.Point(4, 22);
+      this.tpClientControl.Name = "tpClientControl";
+      this.tpClientControl.Padding = new System.Windows.Forms.Padding(3);
+      this.tpClientControl.Size = new System.Drawing.Size(643, 352);
+      this.tpClientControl.TabIndex = 0;
+      this.tpClientControl.Text = "Client Control";
+      this.tpClientControl.UseVisualStyleBackColor = true;
+      // 
+      // scClientControl
+      // 
+      this.scClientControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scClientControl.Location = new System.Drawing.Point(3, 3);
+      this.scClientControl.Name = "scClientControl";
+      // 
+      // scClientControl.Panel1
+      // 
+      this.scClientControl.Panel1.Controls.Add(this.tvClientControl);
+      // 
+      // scClientControl.Panel2
+      // 
+      this.scClientControl.Panel2.Controls.Add(this.lvClientControl);
+      this.scClientControl.Size = new System.Drawing.Size(637, 346);
+      this.scClientControl.SplitterDistance = 139;
+      this.scClientControl.TabIndex = 0;
+      // 
+      // tvClientControl
+      // 
+      this.tvClientControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tvClientControl.Location = new System.Drawing.Point(0, 0);
+      this.tvClientControl.Name = "tvClientControl";
+      this.tvClientControl.Size = new System.Drawing.Size(139, 346);
+      this.tvClientControl.TabIndex = 0;
+      this.tvClientControl.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnTVClientClicked);
+      // 
+      // lvClientControl
+      // 
+      this.lvClientControl.AllowDrop = true;
+      this.lvClientControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lvClientControl.ImeMode = System.Windows.Forms.ImeMode.Off;
+      this.lvClientControl.LargeImageList = this.ilClientControl;
+      this.lvClientControl.Location = new System.Drawing.Point(0, 0);
+      this.lvClientControl.MultiSelect = false;
+      this.lvClientControl.Name = "lvClientControl";
+      this.lvClientControl.Size = new System.Drawing.Size(494, 346);
+      this.lvClientControl.TabIndex = 0;
+      this.lvClientControl.UseCompatibleStateImageBehavior = false;
+      this.lvClientControl.Click += new System.EventHandler(this.OnLVClientClicked);
+      // 
+      // ilClientControl
+      // 
+      this.ilClientControl.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilClientControl.ImageStream")));
+      this.ilClientControl.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilClientControl.Images.SetKeyName(0, "monitor-green.png");
+      this.ilClientControl.Images.SetKeyName(1, "monitor-orange.png");
+      this.ilClientControl.Images.SetKeyName(2, "monitor-red.png");
+      // 
+      // tpJobControl
+      // 
+      this.tpJobControl.Controls.Add(this.scJobControl);
+      this.tpJobControl.Location = new System.Drawing.Point(4, 22);
+      this.tpJobControl.Name = "tpJobControl";
+      this.tpJobControl.Padding = new System.Windows.Forms.Padding(3);
+      this.tpJobControl.Size = new System.Drawing.Size(643, 352);
+      this.tpJobControl.TabIndex = 1;
+      this.tpJobControl.Text = "Job Control";
+      this.tpJobControl.UseVisualStyleBackColor = true;
+      // 
+      // scJobControl
+      // 
+      this.scJobControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scJobControl.Location = new System.Drawing.Point(3, 3);
+      this.scJobControl.Name = "scJobControl";
+      // 
+      // scJobControl.Panel1
+      // 
+      this.scJobControl.Panel1.Controls.Add(this.tvJobControl);
+      // 
+      // scJobControl.Panel2
+      // 
+      this.scJobControl.Panel2.Controls.Add(this.lvJobControl);
+      this.scJobControl.Size = new System.Drawing.Size(637, 346);
+      this.scJobControl.SplitterDistance = 139;
+      this.scJobControl.TabIndex = 1;
+      // 
+      // tvJobControl
+      // 
+      this.tvJobControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tvJobControl.Location = new System.Drawing.Point(0, 0);
+      this.tvJobControl.Name = "tvJobControl";
+      this.tvJobControl.Size = new System.Drawing.Size(139, 346);
+      this.tvJobControl.TabIndex = 2;
+      this.tvJobControl.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnTVJobControlClicked);
+      // 
+      // lvJobControl
+      // 
+      this.lvJobControl.AllowDrop = true;
+      this.lvJobControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lvJobControl.LargeImageList = this.ilJobControl;
+      this.lvJobControl.Location = new System.Drawing.Point(0, 0);
+      this.lvJobControl.MultiSelect = false;
+      this.lvJobControl.Name = "lvJobControl";
+      this.lvJobControl.Size = new System.Drawing.Size(494, 346);
+      this.lvJobControl.TabIndex = 0;
+      this.lvJobControl.UseCompatibleStateImageBehavior = false;
+      this.lvJobControl.MouseMove += new System.Windows.Forms.MouseEventHandler(this.lvJobControl_MouseMove);
+      this.lvJobControl.Click += new System.EventHandler(this.OnLVJobControlClicked);
+      // 
+      // ilJobControl
+      // 
+      this.ilJobControl.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilJobControl.ImageStream")));
+      this.ilJobControl.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilJobControl.Images.SetKeyName(0, "PlayHS.png");
+      // 
+      // tpUserControl
+      // 
+      this.tpUserControl.Controls.Add(this.scUserControl);
+      this.tpUserControl.Location = new System.Drawing.Point(4, 22);
+      this.tpUserControl.Name = "tpUserControl";
+      this.tpUserControl.Padding = new System.Windows.Forms.Padding(3);
+      this.tpUserControl.Size = new System.Drawing.Size(643, 352);
+      this.tpUserControl.TabIndex = 2;
+      this.tpUserControl.Text = "User Control";
+      this.tpUserControl.UseVisualStyleBackColor = true;
+      // 
+      // scUserControl
+      // 
+      this.scUserControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scUserControl.Location = new System.Drawing.Point(3, 3);
+      this.scUserControl.Name = "scUserControl";
+      // 
+      // scUserControl.Panel1
+      // 
+      this.scUserControl.Panel1.Controls.Add(this.tvUserControl);
+      // 
+      // scUserControl.Panel2
+      // 
+      this.scUserControl.Panel2.Controls.Add(this.lvUserControl);
+      this.scUserControl.Size = new System.Drawing.Size(637, 346);
+      this.scUserControl.SplitterDistance = 139;
+      this.scUserControl.TabIndex = 1;
+      // 
+      // tvUserControl
+      // 
+      this.tvUserControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tvUserControl.Location = new System.Drawing.Point(0, 0);
+      this.tvUserControl.Name = "tvUserControl";
+      this.tvUserControl.Size = new System.Drawing.Size(139, 346);
+      this.tvUserControl.TabIndex = 1;
+      this.tvUserControl.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.OnTVUserControlClicked);
+      // 
+      // lvUserControl
+      // 
+      this.lvUserControl.AllowDrop = true;
+      this.lvUserControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.lvUserControl.LargeImageList = this.ilUserControl;
+      this.lvUserControl.Location = new System.Drawing.Point(0, 0);
+      this.lvUserControl.Name = "lvUserControl";
+      this.lvUserControl.Size = new System.Drawing.Size(494, 346);
+      this.lvUserControl.TabIndex = 1;
+      this.lvUserControl.UseCompatibleStateImageBehavior = false;
+      this.lvUserControl.Click += new System.EventHandler(this.OnLVUserControlClicked);
+      // 
+      // ilUserControl
+      // 
+      this.ilUserControl.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("ilUserControl.ImageStream")));
+      this.ilUserControl.TransparentColor = System.Drawing.Color.Transparent;
+      this.ilUserControl.Images.SetKeyName(0, "Users.png");
+      // 
+      // plClientDetails
+      // 
+      this.plClientDetails.BackColor = System.Drawing.SystemColors.Window;
+      this.plClientDetails.Controls.Add(this.lblState);
+      this.plClientDetails.Controls.Add(this.lblStateClient);
+      this.plClientDetails.Controls.Add(this.lblLogin);
+      this.plClientDetails.Controls.Add(this.lblLoginOn);
+      this.plClientDetails.Controls.Add(this.lblClientName);
+      this.plClientDetails.Controls.Add(this.btnClientDetailClose);
+      this.plClientDetails.Controls.Add(this.pbClientControl);
+      this.plClientDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.plClientDetails.Location = new System.Drawing.Point(0, 0);
+      this.plClientDetails.Name = "plClientDetails";
+      this.plClientDetails.Size = new System.Drawing.Size(494, 346);
+      this.plClientDetails.TabIndex = 1;
+      // 
+      // lblState
+      // 
+      this.lblState.AutoSize = true;
+      this.lblState.Location = new System.Drawing.Point(103, 76);
+      this.lblState.Name = "lblState";
+      this.lblState.Size = new System.Drawing.Size(35, 13);
+      this.lblState.TabIndex = 6;
+      this.lblState.Text = "label2";
+      // 
+      // lblStateClient
+      // 
+      this.lblStateClient.AutoSize = true;
+      this.lblStateClient.Location = new System.Drawing.Point(29, 76);
+      this.lblStateClient.Name = "lblStateClient";
+      this.lblStateClient.Size = new System.Drawing.Size(32, 13);
+      this.lblStateClient.TabIndex = 5;
+      this.lblStateClient.Text = "State";
+      // 
+      // lblLogin
+      // 
+      this.lblLogin.AutoSize = true;
+      this.lblLogin.Location = new System.Drawing.Point(100, 55);
+      this.lblLogin.Name = "lblLogin";
+      this.lblLogin.Size = new System.Drawing.Size(43, 13);
+      this.lblLogin.TabIndex = 4;
+      this.lblLogin.Text = "lblLogin";
+      // 
+      // lblLoginOn
+      // 
+      this.lblLoginOn.AutoSize = true;
+      this.lblLoginOn.Location = new System.Drawing.Point(29, 55);
+      this.lblLoginOn.Name = "lblLoginOn";
+      this.lblLoginOn.Size = new System.Drawing.Size(65, 13);
+      this.lblLoginOn.TabIndex = 3;
+      this.lblLoginOn.Text = "logged in on";
+      // 
+      // lblClientName
+      // 
+      this.lblClientName.AutoSize = true;
+      this.lblClientName.Location = new System.Drawing.Point(41, 14);
+      this.lblClientName.Name = "lblClientName";
+      this.lblClientName.Size = new System.Drawing.Size(71, 13);
+      this.lblClientName.TabIndex = 2;
+      this.lblClientName.Text = "lblClientName";
+      // 
+      // btnClientDetailClose
+      // 
+      this.btnClientDetailClose.Location = new System.Drawing.Point(414, 4);
+      this.btnClientDetailClose.Name = "btnClientDetailClose";
+      this.btnClientDetailClose.Size = new System.Drawing.Size(75, 23);
+      this.btnClientDetailClose.TabIndex = 1;
+      this.btnClientDetailClose.Text = "Close";
+      this.btnClientDetailClose.UseVisualStyleBackColor = true;
+      this.btnClientDetailClose.Click += new System.EventHandler(this.btnClientClose_Click);
+      // 
+      // pbClientControl
+      // 
+      this.pbClientControl.Location = new System.Drawing.Point(3, 4);
+      this.pbClientControl.Name = "pbClientControl";
+      this.pbClientControl.Size = new System.Drawing.Size(32, 32);
+      this.pbClientControl.TabIndex = 0;
+      this.pbClientControl.TabStop = false;
+      // 
+      // plUserDetails
+      // 
+      this.plUserDetails.BackColor = System.Drawing.SystemColors.Window;
+      this.plUserDetails.Controls.Add(this.lblUserName);
+      this.plUserDetails.Controls.Add(this.btnUserControlClose);
+      this.plUserDetails.Controls.Add(this.pbUserControl);
+      this.plUserDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.plUserDetails.Location = new System.Drawing.Point(0, 0);
+      this.plUserDetails.Name = "plUserDetails";
+      this.plUserDetails.Size = new System.Drawing.Size(494, 346);
+      this.plUserDetails.TabIndex = 2;
+      // 
+      // lblUserName
+      // 
+      this.lblUserName.AutoSize = true;
+      this.lblUserName.Location = new System.Drawing.Point(41, 13);
+      this.lblUserName.Name = "lblUserName";
+      this.lblUserName.Size = new System.Drawing.Size(67, 13);
+      this.lblUserName.TabIndex = 5;
+      this.lblUserName.Text = "lblUserName";
+      // 
+      // btnUserControlClose
+      // 
+      this.btnUserControlClose.Location = new System.Drawing.Point(414, 3);
+      this.btnUserControlClose.Name = "btnUserControlClose";
+      this.btnUserControlClose.Size = new System.Drawing.Size(75, 23);
+      this.btnUserControlClose.TabIndex = 4;
+      this.btnUserControlClose.Text = "Close";
+      this.btnUserControlClose.UseVisualStyleBackColor = true;
+      this.btnUserControlClose.Click += new System.EventHandler(this.btnUserControlClose_Click);
+      // 
+      // pbUserControl
+      // 
+      this.pbUserControl.Location = new System.Drawing.Point(3, 3);
+      this.pbUserControl.Name = "pbUserControl";
+      this.pbUserControl.Size = new System.Drawing.Size(32, 32);
+      this.pbUserControl.TabIndex = 3;
+      this.pbUserControl.TabStop = false;
+      // 
+      // plJobDetails
+      // 
+      this.plJobDetails.BackColor = System.Drawing.SystemColors.Window;
+      this.plJobDetails.Controls.Add(this.lvSnapshots);
+      this.plJobDetails.Controls.Add(this.lblPriorityJob);
+      this.plJobDetails.Controls.Add(this.lblParentJob);
+      this.plJobDetails.Controls.Add(this.lblClientCalculating);
+      this.plJobDetails.Controls.Add(this.lblJobCalculationEnd);
+      this.plJobDetails.Controls.Add(this.lblJobCalculationBegin);
+      this.plJobDetails.Controls.Add(this.lblJobCreated);
+      this.plJobDetails.Controls.Add(this.lblUserCreatedJob);
+      this.plJobDetails.Controls.Add(this.lblProgress);
+      this.plJobDetails.Controls.Add(this.lblStatus);
+      this.plJobDetails.Controls.Add(this.progressJob);
+      this.plJobDetails.Controls.Add(this.lblJobName);
+      this.plJobDetails.Controls.Add(this.btnJobDetailClose);
+      this.plJobDetails.Controls.Add(this.pbJobControl);
+      this.plJobDetails.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.plJobDetails.Location = new System.Drawing.Point(0, 0);
+      this.plJobDetails.Name = "plJobDetails";
+      this.plJobDetails.Size = new System.Drawing.Size(494, 346);
+      this.plJobDetails.TabIndex = 1;
+      // 
+      // lvSnapshots
+      // 
+      this.lvSnapshots.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.chJobId,
+            this.chTimeCalculated,
+            this.chProgress});
+      this.lvSnapshots.Enabled = false;
+      this.lvSnapshots.FullRowSelect = true;
+      this.lvSnapshots.GridLines = true;
+      this.lvSnapshots.Location = new System.Drawing.Point(20, 271);
+      this.lvSnapshots.Name = "lvSnapshots";
+      this.lvSnapshots.Size = new System.Drawing.Size(449, 70);
+      this.lvSnapshots.TabIndex = 16;
+      this.lvSnapshots.UseCompatibleStateImageBehavior = false;
+      this.lvSnapshots.View = System.Windows.Forms.View.Details;
+      // 
+      // chJobId
+      // 
+      this.chJobId.Text = "Job-ID";
+      // 
+      // chTimeCalculated
+      // 
+      this.chTimeCalculated.Text = "Calculated At";
+      // 
+      // chProgress
+      // 
+      this.chProgress.Text = "Progress";
+      // 
+      // lblPriorityJob
+      // 
+      this.lblPriorityJob.AutoSize = true;
+      this.lblPriorityJob.Location = new System.Drawing.Point(17, 213);
+      this.lblPriorityJob.Name = "lblPriorityJob";
+      this.lblPriorityJob.Size = new System.Drawing.Size(0, 13);
+      this.lblPriorityJob.TabIndex = 15;
+      // 
+      // lblParentJob
+      // 
+      this.lblParentJob.AutoSize = true;
+      this.lblParentJob.Location = new System.Drawing.Point(17, 188);
+      this.lblParentJob.Name = "lblParentJob";
+      this.lblParentJob.Size = new System.Drawing.Size(0, 13);
+      this.lblParentJob.TabIndex = 14;
+      // 
+      // lblClientCalculating
+      // 
+      this.lblClientCalculating.AutoSize = true;
+      this.lblClientCalculating.Location = new System.Drawing.Point(17, 284);
+      this.lblClientCalculating.Name = "lblClientCalculating";
+      this.lblClientCalculating.Size = new System.Drawing.Size(0, 13);
+      this.lblClientCalculating.TabIndex = 13;
+      // 
+      // lblJobCalculationEnd
+      // 
+      this.lblJobCalculationEnd.AutoSize = true;
+      this.lblJobCalculationEnd.Location = new System.Drawing.Point(17, 259);
+      this.lblJobCalculationEnd.Name = "lblJobCalculationEnd";
+      this.lblJobCalculationEnd.Size = new System.Drawing.Size(0, 13);
+      this.lblJobCalculationEnd.TabIndex = 12;
+      // 
+      // lblJobCalculationBegin
+      // 
+      this.lblJobCalculationBegin.AutoSize = true;
+      this.lblJobCalculationBegin.Location = new System.Drawing.Point(17, 236);
+      this.lblJobCalculationBegin.Name = "lblJobCalculationBegin";
+      this.lblJobCalculationBegin.Size = new System.Drawing.Size(0, 13);
+      this.lblJobCalculationBegin.TabIndex = 11;
+      // 
+      // lblJobCreated
+      // 
+      this.lblJobCreated.AutoSize = true;
+      this.lblJobCreated.Location = new System.Drawing.Point(17, 164);
+      this.lblJobCreated.Name = "lblJobCreated";
+      this.lblJobCreated.Size = new System.Drawing.Size(0, 13);
+      this.lblJobCreated.TabIndex = 10;
+      // 
+      // lblUserCreatedJob
+      // 
+      this.lblUserCreatedJob.AutoSize = true;
+      this.lblUserCreatedJob.Location = new System.Drawing.Point(17, 142);
+      this.lblUserCreatedJob.Name = "lblUserCreatedJob";
+      this.lblUserCreatedJob.Size = new System.Drawing.Size(0, 13);
+      this.lblUserCreatedJob.TabIndex = 9;
+      // 
+      // lblProgress
+      // 
+      this.lblProgress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.lblProgress.BackColor = System.Drawing.Color.Transparent;
+      this.lblProgress.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.lblProgress.Location = new System.Drawing.Point(326, 99);
+      this.lblProgress.Name = "lblProgress";
+      this.lblProgress.Size = new System.Drawing.Size(143, 13);
+      this.lblProgress.TabIndex = 8;
+      this.lblProgress.Text = "lblProgress";
+      this.lblProgress.TextAlign = System.Drawing.ContentAlignment.TopRight;
+      // 
+      // lblStatus
+      // 
+      this.lblStatus.AutoSize = true;
+      this.lblStatus.BackColor = System.Drawing.Color.Transparent;
+      this.lblStatus.Location = new System.Drawing.Point(14, 57);
+      this.lblStatus.Name = "lblStatus";
+      this.lblStatus.Size = new System.Drawing.Size(88, 13);
+      this.lblStatus.TabIndex = 7;
+      this.lblStatus.Text = "Statusinformation";
+      // 
+      // progressJob
+      // 
+      this.progressJob.Location = new System.Drawing.Point(17, 73);
+      this.progressJob.Name = "progressJob";
+      this.progressJob.Size = new System.Drawing.Size(452, 23);
+      this.progressJob.TabIndex = 6;
+      // 
+      // lblJobName
+      // 
+      this.lblJobName.AutoSize = true;
+      this.lblJobName.Location = new System.Drawing.Point(41, 13);
+      this.lblJobName.Name = "lblJobName";
+      this.lblJobName.Size = new System.Drawing.Size(62, 13);
+      this.lblJobName.TabIndex = 5;
+      this.lblJobName.Text = "lblJobName";
+      // 
+      // btnJobDetailClose
+      // 
+      this.btnJobDetailClose.Location = new System.Drawing.Point(414, 3);
+      this.btnJobDetailClose.Name = "btnJobDetailClose";
+      this.btnJobDetailClose.Size = new System.Drawing.Size(75, 23);
+      this.btnJobDetailClose.TabIndex = 4;
+      this.btnJobDetailClose.Text = "Close";
+      this.btnJobDetailClose.UseVisualStyleBackColor = true;
+      this.btnJobDetailClose.Click += new System.EventHandler(this.btnJobDetailClose_Click);
+      // 
+      // pbJobControl
+      // 
+      this.pbJobControl.Location = new System.Drawing.Point(3, 3);
+      this.pbJobControl.Name = "pbJobControl";
+      this.pbJobControl.Size = new System.Drawing.Size(32, 32);
+      this.pbJobControl.TabIndex = 3;
+      this.pbJobControl.TabStop = false;
+      // 
+      // treeView2
+      // 
+      this.treeView2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.treeView2.LineColor = System.Drawing.Color.Empty;
+      this.treeView2.Location = new System.Drawing.Point(0, 0);
+      this.treeView2.Name = "treeView2";
+      this.treeView2.Size = new System.Drawing.Size(139, 346);
+      this.treeView2.TabIndex = 0;
+      // 
+      // listView2
+      // 
+      this.listView2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.listView2.Location = new System.Drawing.Point(0, 0);
+      this.listView2.Name = "listView2";
+      this.listView2.Size = new System.Drawing.Size(494, 346);
+      this.listView2.TabIndex = 0;
+      this.listView2.UseCompatibleStateImageBehavior = false;
+      // 
+      // timerSyncronize
+      // 
+      this.timerSyncronize.Interval = 10000;
+      this.timerSyncronize.Tick += new System.EventHandler(this.TickSync);
+      // 
+      // fileSystemWatcher1
+      // 
+      this.fileSystemWatcher1.EnableRaisingEvents = true;
+      this.fileSystemWatcher1.SynchronizingObject = this;
+      // 
+      // updaterWoker
+      // 
+      this.updaterWoker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.updaterWoker_DoWork);
+      // 
+      // HiveServerManagementConsole
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(651, 402);
+      this.Controls.Add(this.tcManagementConsole);
+      this.Controls.Add(this.menuStrip1);
+      this.MainMenuStrip = this.menuStrip1;
+      this.Name = "HiveServerManagementConsole";
+      this.Text = "Management Console";
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.HiveServerConsoleInformation_FormClosing);
+      this.menuStrip1.ResumeLayout(false);
+      this.menuStrip1.PerformLayout();
+      this.tcManagementConsole.ResumeLayout(false);
+      this.tpClientControl.ResumeLayout(false);
+      this.scClientControl.Panel1.ResumeLayout(false);
+      this.scClientControl.Panel2.ResumeLayout(false);
+      this.scClientControl.ResumeLayout(false);
+      this.tpJobControl.ResumeLayout(false);
+      this.scJobControl.Panel1.ResumeLayout(false);
+      this.scJobControl.Panel2.ResumeLayout(false);
+      this.scJobControl.ResumeLayout(false);
+      this.tpUserControl.ResumeLayout(false);
+      this.scUserControl.Panel1.ResumeLayout(false);
+      this.scUserControl.Panel2.ResumeLayout(false);
+      this.scUserControl.ResumeLayout(false);
+      this.plClientDetails.ResumeLayout(false);
+      this.plClientDetails.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbClientControl)).EndInit();
+      this.plUserDetails.ResumeLayout(false);
+      this.plUserDetails.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbUserControl)).EndInit();
+      this.plJobDetails.ResumeLayout(false);
+      this.plJobDetails.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pbJobControl)).EndInit();
+      ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.MenuStrip menuStrip1;
+    private System.Windows.Forms.ToolStripMenuItem informationToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.TabControl tcManagementConsole;
+    private System.Windows.Forms.TabPage tpClientControl;
+    private System.Windows.Forms.TabPage tpJobControl;
+    private System.Windows.Forms.SplitContainer scClientControl;
+    private System.Windows.Forms.TabPage tpUserControl;
+    private System.Windows.Forms.TreeView tvClientControl;
+    private System.Windows.Forms.ListView lvClientControl;
+    private System.Windows.Forms.SplitContainer scJobControl;
+    private System.Windows.Forms.ListView lvJobControl;
+    private System.Windows.Forms.SplitContainer scUserControl;
+    private System.Windows.Forms.TreeView treeView2;
+    private System.Windows.Forms.ListView listView2;
+    private System.Windows.Forms.TreeView tvJobControl;
+    private System.Windows.Forms.TreeView tvUserControl;
+    private System.Windows.Forms.ListView lvUserControl;
+    private System.Windows.Forms.ImageList ilClientControl;
+    private System.Windows.Forms.ToolStripMenuItem addToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem jobToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem userToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem userToolStripMenuItem1;
+    private System.Windows.Forms.ToolStripMenuItem groupToolStripMenuItem2;
+    private System.Windows.Forms.ImageList ilUserControl;
+    private System.Windows.Forms.Timer timerSyncronize;
+    private System.Windows.Forms.ImageList ilJobControl;
+    private System.Windows.Forms.Panel plClientDetails;
+    private System.Windows.Forms.PictureBox pbClientControl;
+    private System.Windows.Forms.Button btnClientDetailClose;
+    private System.Windows.Forms.Label lblClientName;
+    private System.Windows.Forms.Label lblLoginOn;
+    private System.Windows.Forms.Label lblLogin;
+    private System.Windows.Forms.Panel plJobDetails;
+    private System.Windows.Forms.Label lblJobName;
+    private System.Windows.Forms.Button btnJobDetailClose;
+    private System.Windows.Forms.PictureBox pbJobControl;
+    private System.Windows.Forms.Panel plUserDetails;
+    private System.Windows.Forms.Label lblUserName;
+    private System.Windows.Forms.Button btnUserControlClose;
+    private System.Windows.Forms.PictureBox pbUserControl;
+    private System.Windows.Forms.ProgressBar progressJob;
+    private System.IO.FileSystemWatcher fileSystemWatcher1;
+    private System.Windows.Forms.Label lblStatus;
+    private System.Windows.Forms.Label lblProgress;
+    private System.Windows.Forms.Label lblJobCalculationBegin;
+    private System.Windows.Forms.Label lblJobCreated;
+    private System.Windows.Forms.Label lblUserCreatedJob;
+    private System.Windows.Forms.Label lblClientCalculating;
+    private System.Windows.Forms.Label lblJobCalculationEnd;
+    private System.Windows.Forms.Label lblPriorityJob;
+    private System.Windows.Forms.Label lblParentJob;
+    private System.Windows.Forms.ListView lvSnapshots;
+    private System.Windows.Forms.ColumnHeader chJobId;
+    private System.Windows.Forms.ColumnHeader chTimeCalculated;
+    private System.Windows.Forms.ColumnHeader chProgress;
+    private System.Windows.Forms.Label lblStateClient;
+    private System.Windows.Forms.Label lblState;
+    private System.ComponentModel.BackgroundWorker updaterWoker;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.cs	(revision 1270)
@@ -0,0 +1,483 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+
+  public delegate void closeForm(bool cf, bool error);
+
+  public partial class HiveServerManagementConsole : Form {
+
+    public event closeForm closeFormEvent;
+
+    #region private variables
+    private ResponseList<ClientGroup> clients = null;
+    private ResponseList<ClientInfo> clientInfo = null;
+    private ResponseList<Job> jobs = null;
+    private ResponseList<UserGroup> userGroups = null;
+    private ResponseList<User> usersList = null;
+
+    private Dictionary<long, ListViewGroup> clientObjects;
+    private Dictionary<long, ListViewItem> clientInfoObjects;
+    private Dictionary<long, ListViewItem> jobObjects;
+    private Dictionary<long, ListViewGroup> userGroupsObjects;
+    private Dictionary<long, ListViewItem> userListObjects;
+
+    private Job currentJob = null;
+    private ClientInfo currentClient = null;
+    private User currentUser = null;
+    private string nameCurrentJob = "";
+    private string nameCurrentClient = "";
+    private string nameCurrentUser = "";
+    private bool flagJob = false;
+    private bool flagClient = false;
+    private bool flagUser = false;
+
+    private ToolTip tt = new ToolTip();
+    #endregion
+
+    public HiveServerManagementConsole() {
+      InitializeComponent();
+      AddClients();
+      AddJobs();
+      AddUsers();
+      timerSyncronize.Start();
+    }
+
+    /// <summary>
+    /// event on Ticker
+    /// </summary>
+    /// <param name="obj"></param>
+    /// <param name="e"></param>
+    private void TickSync(object obj, EventArgs e) {
+      Refresh();
+      //updaterWoker.RunWorkerAsync();
+    }
+
+    /// <summary>
+    /// Adds clients to ListView and TreeView
+    /// </summary>
+    private void AddClients() {
+      try {
+        clientObjects = new Dictionary<long, ListViewGroup>();
+        clientInfoObjects = new Dictionary<long, ListViewItem>();
+        IClientManager clientManager =
+          ServiceLocator.GetClientManager();
+
+        clients = clientManager.GetAllClientGroups();
+        lvClientControl.Items.Clear();
+        tvClientControl.Nodes.Clear();
+        int count = 0;
+        foreach (ClientGroup cg in clients.List) {
+          tvClientControl.Nodes.Add(cg.Name);
+          ListViewGroup lvg = new ListViewGroup(cg.Name, HorizontalAlignment.Left);
+          foreach (ClientInfo ci in clientManager.GetAllClients().List) {
+            tvClientControl.Nodes[tvClientControl.Nodes.Count - 1].Nodes.Add(ci.Name);
+            ListViewItem item = new ListViewItem(ci.Name, count, lvg);
+            lvClientControl.Items.Add(item);
+            clientInfoObjects.Add(ci.Id, item);
+            count = (count + 1) % 3;
+          }
+          lvClientControl.Groups.Add(lvg);
+          clientObjects.Add(cg.Id, lvg);
+        } // Groups
+
+        clientInfo = clientManager.GetAllClients();
+        ListViewGroup lvunsorted = new ListViewGroup("unsorted", HorizontalAlignment.Left);
+        foreach (ClientInfo ci in clientInfo.List) {
+          tvClientControl.Nodes.Add(ci.Name);
+          lvClientControl.Items.Add(new ListViewItem(ci.Name, count, lvunsorted));
+          count = (count + 1) % 3;
+        }
+        lvClientControl.Groups.Add(lvunsorted);
+        if (flagClient) {
+          ClientClicked();
+        }
+      }
+      catch (Exception ex) {
+        closeFormEvent(true, true);
+        this.Close();
+      }
+    }
+
+    /// <summary>
+    /// Adds jobs to ListView and TreeView
+    /// </summary>
+    private void AddJobs() {
+      try {
+        jobObjects = new Dictionary<long, ListViewItem>();
+        IJobManager jobManager =
+          ServiceLocator.GetJobManager();
+        jobs = jobManager.GetAllJobs();
+
+        lvJobControl.Items.Clear();
+        tvJobControl.Nodes.Clear();
+
+        ListViewGroup lvJobCalculating = new ListViewGroup("calculating", HorizontalAlignment.Left);
+        ListViewGroup lvJobFinished = new ListViewGroup("finished", HorizontalAlignment.Left);
+        ListViewGroup lvJobPending = new ListViewGroup("pending", HorizontalAlignment.Left);
+        tvJobControl.Nodes.Add("calculating");
+        tvJobControl.Nodes.Add("finished");
+        tvJobControl.Nodes.Add("pending");
+        foreach (Job job in jobs.List) {
+          if (job.State == State.calculating) {
+            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0, lvJobCalculating);
+            jobObjects.Add(job.Id, lvi);
+            tvJobControl.Nodes[0].Nodes.Add(job.Id.ToString());
+            lvJobControl.Items.Add(lvi);
+            lvi.ToolTipText = (job.Percentage * 100) + "% of job calculated";
+          } else if (job.State == State.finished) {
+            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0, lvJobFinished);
+            jobObjects.Add(job.Id, lvi);
+            tvJobControl.Nodes[1].Nodes.Add(job.Id.ToString());
+            lvJobControl.Items.Add(lvi);
+          } else if (job.State == State.offline) {
+            ListViewItem lvi = new ListViewItem(job.Id.ToString(), 0, lvJobPending);
+            jobObjects.Add(job.Id, lvi);
+            tvJobControl.Nodes[2].Nodes.Add(job.Id.ToString());
+            lvJobControl.Items.Add(lvi);
+          }
+        } // Jobs
+        lvJobControl.Groups.Add(lvJobCalculating);
+        lvJobControl.Groups.Add(lvJobFinished);
+        lvJobControl.Groups.Add(lvJobPending);
+        if (flagJob) {
+          JobClicked();
+        }
+      }
+      catch (Exception ex) {
+        closeFormEvent(true, true);
+        this.Close();
+      }
+    }
+
+    /// <summary>
+    /// Adds users to ListView and TreeView
+    /// </summary>
+    private void AddUsers() {
+      try {
+        userGroupsObjects = new Dictionary<long, ListViewGroup>();
+        userListObjects = new Dictionary<long, ListViewItem>();
+        IUserRoleManager userRoleManager =
+          ServiceLocator.GetUserRoleManager();
+
+        userGroups = userRoleManager.GetAllUserGroups();
+
+        lvUserControl.Items.Clear();
+        tvUserControl.Nodes.Clear();
+
+        foreach (UserGroup ug in userGroups.List) {
+          tvUserControl.Nodes.Add(ug.Name);
+          ListViewGroup lvg = new ListViewGroup(ug.Name, HorizontalAlignment.Left);
+
+          foreach (PermissionOwner permOwner in ug.Members) {
+            if (permOwner is User) {
+              User users = permOwner as User;
+              tvUserControl.Nodes[tvUserControl.Nodes.Count - 1].Nodes.Add(users.Name);
+              ListViewItem item = new ListViewItem(users.Name, 0, lvg);
+              lvUserControl.Items.Add(item);
+              userListObjects.Add(users.Id, item);
+            }
+          }
+          lvUserControl.Groups.Add(lvg);
+          userGroupsObjects.Add(ug.Id, lvg);
+
+        } // Users
+        usersList = userRoleManager.GetAllUsers();
+        ListViewGroup lvunsorted = new ListViewGroup("unsorted", HorizontalAlignment.Left);
+        foreach (User u in usersList.List) {
+          tvUserControl.Nodes.Add(u.Name);
+          lvUserControl.Items.Add(new ListViewItem(u.Name, 0, lvunsorted));
+        }
+        lvUserControl.Groups.Add(lvunsorted);
+        if (flagUser) {
+          UserClicked();
+        }
+      }
+      catch (Exception ex) {
+        closeFormEvent(true, true);
+        this.Close();
+      }
+    }
+
+    /// <summary>
+    /// if one client is clicked, a panel is opened with the details
+    /// </summary>
+    private void ClientClicked() {
+      int i = 0;
+      while (clientInfo.List[i].Name != nameCurrentClient) {
+        i++;
+      }
+      currentClient = clientInfo.List[i];
+      scClientControl.Panel2.Controls.Clear();
+      scClientControl.Panel2.Controls.Add(plClientDetails);
+      pbClientControl.Image = ilClientControl.Images[0];
+      lblClientName.Text = currentClient.Name;
+      lblLogin.Text = currentClient.Login.ToString();
+      lblState.Text = currentClient.State.ToString();
+    }
+
+    /// <summary>
+    /// if one job is clicked, a panel is opened with the details
+    /// </summary>
+    private void JobClicked() {
+      int i = 0;
+      while (jobs.List[i].Id.ToString() != nameCurrentJob) {
+        i++;
+      }
+      lvSnapshots.Enabled = false;
+      int yPos = 0;
+      currentJob = jobs.List[i];
+      scJobControl.Panel2.Controls.Clear();
+      scJobControl.Panel2.Controls.Add(plJobDetails);
+      pbJobControl.Image = ilJobControl.Images[0];
+      lblJobName.Text = currentJob.Id.ToString();
+      progressJob.Value = (int)(currentJob.Percentage * 100);
+      yPos = progressJob.Location.Y;
+      yPos += 20;
+      lblProgress.Location = new Point(
+        lblProgress.Location.X, yPos);
+      lblProgress.Text = (int)(currentJob.Percentage * 100) + "% calculated";
+      yPos += 20;
+      lblUserCreatedJob.Location = new Point(
+        lblUserCreatedJob.Location.X, yPos);
+      lblUserCreatedJob.Text = /* currentJob.User.Name + */ " created Job";
+      yPos += 20;
+      lblJobCreated.Location = new Point(
+        lblJobCreated.Location.X, yPos);
+      lblJobCreated.Text = "Created at " + currentJob.DateCreated;
+      if (currentJob.ParentJob != null) {
+        yPos += 20;
+        lblParentJob.Location = new Point(
+          lblParentJob.Location.X, yPos);
+        lblParentJob.Text = currentJob.ParentJob.Id + " is parent job";
+      }
+      yPos += 20;
+      lblPriorityJob.Location = new Point(
+        lblPriorityJob.Location.X, yPos);
+      lblPriorityJob.Text = "Priority of job is " + currentJob.Priority;
+      if (currentJob.Client != null) {
+        yPos += 20;
+        lblClientCalculating.Location = new Point(
+          lblClientCalculating.Location.X, yPos);
+        lblClientCalculating.Text = currentJob.Client.Name + " calculated Job";
+        yPos += 20;
+        lblJobCalculationBegin.Location = new Point(
+          lblJobCalculationBegin.Location.X, yPos);
+        lblJobCalculationBegin.Text = "Startet calculation at " + currentJob.DateCalculated ;
+        
+        if (currentJob.State == State.finished) {
+          yPos += 20;
+          lblJobCalculationEnd.Location = new Point(
+            lblJobCalculationEnd.Location.X, yPos);
+
+          IJobManager jobManager =
+            ServiceLocator.GetJobManager();
+
+          ResponseObject<JobResult> jobRes = jobManager.GetLastJobResultOf(currentJob.Id);
+
+          
+          lblJobCalculationEnd.Text = "Calculation ended at " + jobRes.Obj.DateFinished;
+        }
+      }                       
+      if (currentJob.State != State.offline) {
+        yPos += 20;
+        lvSnapshots.Location = new Point(
+          lvSnapshots.Location.X, yPos);
+        lvSnapshots.Size = new Size(lvSnapshots.Size.Width,
+          plJobDetails.Size.Height - 10 - yPos);
+        lvSnapshots.Enabled = true;
+      }
+    }
+
+    /// <summary>
+    /// if one user is clicked, a panel is opened with the details
+    /// </summary>
+    private void UserClicked() {
+      int i = 0;
+      while (usersList.List[i].Name != nameCurrentUser) {
+        i++;
+      }
+      currentUser = usersList.List[i];
+      scUserControl.Panel2.Controls.Clear();
+      scUserControl.Panel2.Controls.Add(plUserDetails);
+      pbUserControl.Image = ilUserControl.Images[0];
+      lblUserName.Text = currentUser.Id.ToString();
+    }
+
+    #region Eventhandlers
+    /// <summary>
+    /// Send event to Login-GUI when closing
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    private void Close_Click(object sender, EventArgs e) {
+      if (closeFormEvent != null) {
+        closeFormEvent(true, false);
+      }
+      this.Close();
+    }
+
+    /// <summary>
+    /// Send evnt to Login-GUI when closing
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    private void HiveServerConsoleInformation_FormClosing(object sender, FormClosingEventArgs e) {
+      if (closeFormEvent != null) {
+        closeFormEvent(true, false);
+      }
+    }
+
+    private void AddJob_Click(object sender, EventArgs e) {
+      AddJobForm newForm = new AddJobForm();
+      newForm.Show();
+      newForm.addJobEvent += new addDelegate(Refresh);
+    }
+
+    private void Refresh() {
+      AddClients();
+      AddJobs();
+      AddUsers();
+    }
+
+    private void AddUser_Click(object sender, EventArgs e) {
+      AddUserForm newForm = new AddUserForm("User", false);
+      newForm.Show();
+      newForm.addUserEvent += new addDelegate(Refresh);
+    }
+
+    private void AddUserGroup_Click(object sender, EventArgs e) {
+      AddUserForm newForm = new AddUserForm("User", true);
+      newForm.Show();
+      newForm.addUserEvent += new addDelegate(Refresh);                                             
+    }
+
+    private void OnLVClientClicked(object sender, EventArgs e) {
+      nameCurrentClient = lvClientControl.SelectedItems[0].Text;
+      flagClient = true;
+      ClientClicked();
+    }
+
+    private void OnTVClientClicked(object sender, TreeViewEventArgs e) {
+      bool clientgroup = false;
+      foreach (ClientGroup cg in clients.List) {
+        if (tvClientControl.SelectedNode.Text == cg.Name) {
+          clientgroup = true;
+        }
+      }
+      if (clientgroup == false) {
+        nameCurrentClient = tvClientControl.SelectedNode.Text;
+        flagClient = true;
+        ClientClicked();
+      }
+
+    }
+
+    private void OnLVJobControlClicked(object sender, EventArgs e) {
+      nameCurrentJob = lvJobControl.SelectedItems[0].Text;
+      flagJob = true;
+      JobClicked();
+    }
+
+    private void OnTVJobControlClicked(object sender, TreeViewEventArgs e) {
+      try {
+        nameCurrentJob = Convert.ToInt32(tvJobControl.SelectedNode.Text).ToString();
+        flagJob = true;
+        JobClicked();
+      }
+      catch (Exception ex) { }
+
+    }
+
+    private void OnLVUserControlClicked(object sender, EventArgs e) {
+      nameCurrentUser = lvUserControl.SelectedItems[0].Text;
+      flagUser = true;
+      UserClicked();
+    }
+
+    private void OnTVUserControlClicked(object sender, TreeViewEventArgs e) {
+      bool usergroup = false;
+      foreach (UserGroup ug in userGroups.List) {
+        if (tvUserControl.SelectedNode.Text == ug.Name) {
+          usergroup = true;
+        }
+      }
+      if (usergroup == false) {
+        nameCurrentUser = tvUserControl.SelectedNode.Text;
+        flagUser = true;
+        UserClicked();
+      }
+
+    }
+
+
+    private void btnClientClose_Click(object sender, EventArgs e) {
+      scClientControl.Panel2.Controls.Clear();
+      scClientControl.Panel2.Controls.Add(lvClientControl);
+      flagClient = false;
+    }
+ 
+    private void btnJobDetailClose_Click(object sender, EventArgs e) {
+      scJobControl.Panel2.Controls.Clear();
+      scJobControl.Panel2.Controls.Add(lvJobControl);
+      flagJob = false;
+    }
+
+    private void btnUserControlClose_Click(object sender, EventArgs e) {
+      scUserControl.Panel2.Controls.Clear();
+      scUserControl.Panel2.Controls.Add(lvUserControl);
+      flagUser = false;
+    }
+
+    private void lvJobControl_MouseMove(object sender, MouseEventArgs e) {
+      if ((lvJobControl.GetItemAt(e.X, e.Y) != null) &&
+        (lvJobControl.GetItemAt(e.X, e.Y).ToolTipText != null)) {
+        tt.SetToolTip(lvJobControl, lvJobControl.GetItemAt(e.X, e.Y).ToolTipText);
+      }
+    }
+
+    private void updaterWoker_DoWork(object sender, DoWorkEventArgs e) {
+      ResponseList<ClientInfo> clientInfoOld = clientInfo;
+      IClientManager clientManager =
+          ServiceLocator.GetClientManager();
+      clientInfo = clientManager.GetAllClients();
+      foreach (ClientInfo ci in clientInfo.List) {
+        foreach (ClientInfo cio in clientInfoOld.List) {
+          ci.Id.Equals(cio.Id);
+        }
+      }
+      
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/HiveServerManagementConsole.resx	(revision 1270)
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>32, 12</value>
+  </metadata>
+  <metadata name="ilClientControl.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>129, 12</value>
+  </metadata>
+  <data name="ilClientControl.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACo
+        EwAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABgAMAASADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEACzUCVgGXA3gBlwNW
+        CjUBNAssAlMFdAFSAUwBTQssDEABRgFpBG8CRgxAIAAJNQJWAZgBBwG8A/ACvAHvAXgCVgQ1ATQDNQE0
+        CSwBTQFSAZMBBwG8A/ACvAHvAXQBUgFNCSwKQAFpAZMBBwG8A/ACvAHvAW8BRgpAIAAINQFWAZgBvAHw
+        BPEC8AHxAfACBwGYAVYFNAI1ATQILAFSAZMBvAHwBPEC8AHxAfACBwGTAUwCLAErBSwIQAFGAZMBvAHw
+        BPEC8AHxAfACBwGTAUYCQAEgBUAgAAc1AVYB7wO8AfAD8QPwBAcB9wFQAi4FNAcsAVIBmQO8AfAD8QPw
+        BAcB7wFuBCsDLAdAAUYBkwO8AfAD8QPwBAcB7wFoAukCIANAIAAGNQFWAZgDBwG8AfAC8QHwA7wCBwHv
+        AvcB7QFPAi4ENAYsAU0BkwMHAbwB8ALxAfADvAIHAe8C9wHtAUsDKwMsB0ABkwMHAbwB8ALxAfADvAIH
+        Ae8C9wHtAukCIANAIAAGNQFWAZgEBwG8A/ABvAMHAe8B9wHtAZIB7QFPBjQGLAFTAZMEBwG8A/ABvAMH
+        Ae8B9wHtAZIBHAFLAysDLAdAAZMEBwG8A/ABvAMHAe8B9wHtAZIB7QHpAyADQCAABzUBlwHvBQcBvAIH
+        Au8B7QLsAe0BkgFyAi4FNAcsAXQB7wUHAbwCBwLvAe0C7AHtAfcBcwErAUwCKwMsB0ABaQGTBQcBvAIH
+        Au8B7QLsAe0BkgFuAukFQCAACDUBVgEcAe8BBwPvAZIC7AJtAesB7AH3Ae8B9wLvAXIENAgsAUwBHAIH
+        A+8BkgLsAm0B6wHsAfcB7wEcAu8BdAQsCEABRgGTAe8BBwPvAZIC7AJtAesB7AH3Ae8BHALvAW8EQCAA
+        CTUBNAFQAXIC7QXsAZIC7wEHAbwB8AG8Ae8BcwM1ATQJLAErAUwBbgHtAZIF7AGSAu8BBwG8AfABvAEH
+        AXQELApAAUUBbgHsAe0F7AGSAu8BBwG8AfABvAHvAW8EQCAACjUBNAFVAVAD7AHtAfcBBwO8AQcB7wH3
+        AgcBcwM1ATQLLAJMA+wB7QH3AQcDvAEHAe8B9wIHARwELAxAAUUD7AHtAfcBBwO8AQcB7wH3AgcBjQRA
+        IAAFNQI0AlABcgHtAZIB9wPvAgcB7wHtAW0BEwEVAREBFQHsAbwB7QFWAjUBNAUsASsCTAFLAXMB7QL3
+        A+8CBwHvAe0BbQETARUBEQEVAewBvAEcAU0DLAdAAUYBRQFuAe0BkgH3A+8CBwHvAe0BbQETARUBEQEV
+        AewBvAHtBEAgAAE1AlYBcgHsAe0B9wUHAe8B9wHsAW0BFAJDAhEDQwEUAewBvAHtAVYCNQE0ASwBTQFM
+        AXMB7AHtAe8FBwHvAfcB7AFtARQCQwIRA0MBFAHsAbwBHAFTAywBQAJGAm4B7QH3BQcB7wH3AewBbQEU
+        AkMCEQNDARQB7AG8AZIBRgNAIAABNQGXAe0C7wMHAfcB7AHqARUBEQMQARECFQUUARMB7AG8ARwBVgI1
+        ATQBLAF0Ae0C7wMHAfcB7AHqARUBEQMQARECFQUUARMB7AG8ARwBUgMsAUABaQHtAu8DBwH3AewB6gEV
+        AREDEAERAhUFFAETAewBvAGSAUYDQCAAATUBeAH3Ae0B7AFtARUBEAMPAxACEQEVARQCEwUSAewBvAH3
+        AVYCNQE0ASwBdAH3Ae0B7AFtARUBEAMPAxACEQEVARQCEwUSAewBvAEcAVIDLAFAAW8B9wHtAewBbQEV
+        ARADDwMQAhEBFQEUAhMFEgHsAbwB9wFGA0AgAAE1AXgB9wERCBADEQFDARQBEgLqBW0B7AG8Ae8BVgI1
+        ATQBLAF1AfcBEQgQAxEBQwEUARIC6gVtAewBvAHvAVIDLAFAAW8B9wERCBADEQFDARQBEgLqBW0B7AG8
+        Ae8BaQNAIAABNQFWAe8BFQERAUMDEQIQAxECQwETBG0E6wHsAQcB7wGXAjUBNAEsAVMB7wEVAREBQwMR
+        AhADEQJDARMEbQTrAewBBwHvAXQDLAFAARcB7wEVAREBQwMRAhADEQJDARMEbQTrAewBBwHvAW8DQCAA
+        ATUBVgHvARMBQwEVAkMBEQEQAxECQwEVAeoJ7AIHAXMCNQE0ASwBUwHvARMBQwEVAkMBEQEQAxECQwEV
+        AeoJ7AIHAXQDLAFAAUYB7wETAUMBFQJDAREBEAMRAkMBFQHqCewBBwHvAW8DQCAAATUBVgHvAW0BFQIU
+        ARUEEQNDARQBbQXsA+0B7AIHAXMCNQE0ASwBUwHvAW0BFQIUARUEEQNDARQBbQXsA+0B7AIHARwDLAJA
+        Ae8BbQEVAhQBFQQRA0MBFAFtBewD7QHsAgcBbgNAIAACNQHvAesBFQETARIBFAMRBEMBEwHsBpIB9wKS
+        Ae8BvAHtAjUBNAIsAe8B6wEVARMBEgEUAxEEQwETAewGkgH3ApIB7wG8ARwDLAJAAZMB6wEVARMBEgEU
+        AxEEQwETAewGkgH3ApIB7wG8Ae0DQCAAAjUBmAHsARQC6gEVAxEDQwEVARIB7AHvAvcF7wH3Ae8B8AHt
+        AjUBNAIsAZkB7AEUAuoBFQMRA0MBFQESAewB7wL3Be8B9wHvAfABHAFNAiwCQAGTAewBFALqARUDEQND
+        ARUBEgHsAe8C9wXvAfcB7wHwAe0DQCAAAjUBmAH3ARQBbQHqAUMCEQNDAhUBbQGSBe8DBwLvAfABkgFW
+        ATUBNAIsAZMB9wEUAW0B6gFDAhEDQwIVAW0BkgXvAwcC7wHwARwBUgIsAkABkwH3ARQBbQHqAUMCEQND
+        AhUBbQGSBe8DBwLvAfAB7QFGAkAgAAI1AXgB9wETAW0BEgIRA0MCFQEUAewB7wYHArwCBwHwAZIBVgE1
+        ATQCLAF0Ae8BEwFtARICEQNDAhUBFAHsAe8GBwK8AgcB8AEcAVICLAJAAW8B9wETAW0BEgIRA0MCFQEU
+        AewB7wYHArwCBwHwAZIBRgJAIAACNQF4Ae8BEwFtARUBEQJDAhUCFAETAewFvATwAbwBBwHwAfcBlwE1
+        ATQCLAF0Ae8BEwFtARUBEQJDAhUCFAETAewFvATwAbwBBwHwARwBdAIsAkABbwH3ARMBbQEVARECQwIV
+        AhQBEwHsBbwE8AG8AQcB8AH3AWkCQCAAAjUBVgHvAhIBQwERAkMCFQIUAeoB9wXwBfEBBwHwAe8BlwE1
+        ATQCLAFTAe8CEgFDARECQwIVAhQB6gH3BfAF8QEHAfAB7wF0AiwCQAFGAe8CEgFDARECQwIVAhQB6gH3
+        BfAF8QEHAfAB7wFvAkAgAAI1AVYB7wESARUBEQJDAhUDFAFtAQcB8gTxBfIBvAHxAe8BcgE1ATQCLAFT
+        Ae8BEgEVARECQwIVAxQBbQEHAfIE8QXyAbwB8QHvAXQCLAJAAUYB7wESARUBEQJDAhUDFAFtAQcB8gTx
+        BfIBvAHxAe8BbwJAIAADNQEcARICEQJDAhUCFAETAewB8AXyBfMC8QG8AXMBNQE0AiwBTQGTARICEQJD
+        AhUCFAETAewB8AXyBfMC8QG8AXQCLANAAZMBEgIRAkMCFQIUARMB7AHwBfIF8wLxAbwBbgJAIAADNQGY
+        AW0CEQJDAhUCFAETAZIB8gjzAfIB8QEHAvAB7QE1ATQDLAGTAW0CEQJDAhUCFAETAZIB8gjzAfIB8QEH
+        AvAB7QFNASwDQAGTAW0CEQJDAhUCFAETAZIB8gjzAfIB8QEHAvAB7AJAIAADNQGYAewBQwERAkMCFQIU
+        ARIB7wHyAfEB8AO8BQcBvALxARwBNQE0AywBHAHsAUMBEQJDAhUCFAESAe8B8gHxAfADvAUHAbwC8QEc
+        AU0BLANAAZMB7AFDARECQwIVAhQBEgHvAfIB8QHwA7wFBwG8AvEB7QJAIAADNQGYAe0BFQIRAkMBFQIU
+        AeoB7QPvAgcEvAEIApkCmAFWATUBNAMsAZMB7QEVAhECQwEVAhQB6gHtA+8CBwW8A5kBkwFTAiwDQAGO
+        Ae0BFQIRAkMBFQIUAeoB7QPvAgcEvAEHA5MBjgFGAkAgAAM1AXgB9wIUAeoBbQHsAZIB7wEHArwBBwII
+        AZkDmAN4BVYBNQE0AywBdAH3AhQB6gFtAewBkgHvAQcDvAEHA5kCkwJ0AXUFUwIsA0ABbwH3AhQB6gFt
+        AewBkgHvAQcCvAIHBZMBjgJvAWkERgJAIAADNQF4Ae8BBwG8AQcCCAGZApgCeAZWCjUBNAMsAXQCBwK8
+        AQcDmQGTAXQBdQVTAU0LLANAAW8B7wEHAbwDBwOTAm8BaQNGDUAgAAQ1AVYBlwNWFjUBNAQsAVMBdQNT
+        FywEQANpAkYXQCAAAUIBTQE+BwABPgMAASgDAAGAAwABIAMAAQEBAAEBBgABAhYAA///AP8AAwAL
+</value>
+  </data>
+  <metadata name="ilJobControl.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>471, 13</value>
+  </metadata>
+  <data name="ilJobControl.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACc
+        CQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
+        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
+        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
+        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
+        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
+        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
+        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
+        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
+        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
+        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
+        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
+        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
+        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
+        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
+        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
+        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
+        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
+        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
+        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
+        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
+        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
+        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
+        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
+        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
+        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
+        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
+        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
+        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA///AP8ADAADoX0AA6F9AAGm
+        AWUBpgKhewABZQEnAWUCoXsAAWUBKAENAWUBpgKheQABZQEoAicBZQKheQABZQMoAUgBZQGmAqF3AAFl
+        A0kBKAEnAWUCoXcAAWUESQEoAUgBZQGmAqF1AAFlAkkBTwJJASgBJwFlAqF1AAFmAUkDTwJJASgBSAFl
+        AaYCoXMAAYYBSQFPAXICTwJJASgBJwFlAqFzAAGGAk8BcgFQAk8CSQEoAUgBZQGmAqFxAAGGAU8BUAGX
+        AnICTwJJAigBZQKhcQABhgFPAXIDlwFQAk8CSQFmAaYCoXEAAYYBTwFyBJcBcgFPAUkBbAGnAcdzAAGG
+        AVABcgGXAXgBmAFyAU8CbAGGAccBoXMAAYYBUAFyAZcBmAEIAXIBSQFsAacBx3UAAYYBUAGXAZgBeAFy
+        AW0BbAGGAccBoXUAAYYBcgF4AQgBcgFJAWwBpwHHdwABhgNyAW0BbAGGAccBoXcAAYYBcgFPAUkBbAGn
+        Acd5AAGGAXICbAGGAccBoXkAAYYBcgGLAacBx3sAAYYBiwGGAccBoXsAAccBpwHHfQABoQHHAaH0AAFC
+        AU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP/AQAE/wwABP8MAAT/DAAE/wwAAf8BjwL/
+        DAAB/wGPAv8MAAH/AYMC/wwAAf8BgwL/DAAB/wGAAv8MAAH/AYAC/wwAAf8BgAE/Af8MAAH/AYABPwH/
+        DAAB/wGAAQ8B/wwAAf8BgAEPAf8MAAH/AYABAwH/DAAB/wGAAQMB/wwAAf8BgAEAAf8MAAH/AYABAAH/
+        DAAB/wGAAQAB/wwAAf8BgAEDAf8MAAH/AYABAwH/DAAB/wGAAQ8B/wwAAf8BgAEPAf8MAAH/AYABPwH/
+        DAAB/wGAAT8B/wwAAf8BgAL/DAAB/wGAAv8MAAH/AYMC/wwAAf8BgwL/DAAB/wGPAv8MAAH/AY8C/wwA
+        BP8MAAs=
+</value>
+  </data>
+  <metadata name="ilUserControl.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>231, 9</value>
+  </metadata>
+  <data name="ilUserControl.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACs
+        CwAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
+        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
+        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
+        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
+        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
+        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
+        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
+        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
+        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
+        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
+        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
+        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
+        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
+        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
+        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
+        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
+        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
+        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
+        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
+        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
+        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
+        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
+        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
+        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
+        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
+        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
+        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
+        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8WAAWhewAFoXUAAqEBpwOG
+        BK0DhgGnA6FvAAGhAQQBtQcJArsBtQG0AYYCoW0AAaEBhgGLAbQCCQa7AbUCtAG1Aa0BBAGhbQABhgG0
+        AbsBtAEHAQkDuwEJA7sBtQK0AbMBBAGhYQAMoQGnArsBtAHvARkCuwMJArsBtQK0AbMBBAGhYQADoQGF
+        BwQBhQGGArsBtQEHAfMBCQG7BAkBuwK1AbQBiwGFAaFgAAKhAeoBbARtAUoB6wHsAW0BSgGRAbUCuwHv
+        AfMB3QG7BAkCuwG1AbQBhgKhYAABoQGGA3gDcwFyARwB7wFzAVABkQG0AQkBuwHvAfMBGQUJArsBtQG0
+        AYZiAAGhAesCeAFzAngBcwFyARwBBwEcAVEBcgG0AgkC7wEHArsDCQK7AbQBswGnYgABoQHsBngBcwHv
+        AbwBHAFzAVABcgG7ARkB9wNLAfcBuwEJA7sBswGFAaFiAAGhAa4BmQV4AZgBvAEIARwBeAFzAVABkQG7
+        Ae0BSwFKAUUBSwHtAbUBCQG1AbMBpwKhYwABrgGfAZgEeAGYAfEBBwGYAXgBcwFQAUoBiwHrAUsDRAFL
+        AZEBtAGGAqFlAAGnARwBmQR4ARwB7wEcAXIBUAJyAW0BEgFKAksCRAFLAYYBpwOhZQABoQGGARwBmAJ4
+        AXMCdAFzAeoBUAJyAW0FSwJKAadpAAKhAYsBmAF4AVABcwF0AnMBEgETAWYBhgHrBksB6gGnawABoQGn
+        AeoBSgNuAeoBZgEEAaEBpwHsA3MBbgJLAUoBp2sAAqEBEwFKAUsCdAFuAWYBFAGFAYYBcwN0AXMBbgJL
+        AWYBpwGhaQABoQFmAUoBSwF0ApMBdAFSAUoBZgGGAZIEdAFzAksBEwGGAaFpAAGGAXMBSwFRAZMDmQF0
+        AUsBZgGGARwCmQGTAnQBSwESAhQBoWkAAeoBdAFLAXQBmQGaA5kBSwKGAZkBmgKZAnQBSwIVARQBp2kA
+        AeoBdAFzAZkCGgGaAZkBHAHqAqcEmQGTAXQBbQIVARQBoWkAAYYBdAGTBBoBmgGZAWcBxAGhAe0BdAGT
+        AnQBbgESARQBFQFmAaFpAAGGAnQBGgLDARoBmgGZARICpwGuA+wB6wFtAeoBEwEUAYYBoWkAAacBdAFz
+        ARwBGgHDARoBmgGZAWcBxAGhAc8C7AHrAm0B6gIUAacBoWkAAacBrgEcAXQBcwFSAXQBkwFzARMBhgGh
+        AqcBhgKuAYYB6gGGAacCoWkAAaEBhgG8ApkBcwFRA0sBFAGFAaEDAAOhbQACoQG1AfADmQF5ARwBdAFt
+        AQQBoQMAA6FvAAGnAc8B7wKZARwBcwGuAad3AAGhB6cBofIAAUIBTQE+BwABPgMAASgDAAGAAwABIAMA
+        AQEBAAEBBgABAhYAA/8BAAL/AfgBPwwAAv8B+AE/DAAB/wH+DgAB/wH+DgAB/wH4DgAB/wH4DgABgA8A
+        AYAiAAEDDwABAw8AAQMPAAEDDAABgAIAAQ8MAAGAAgABDwwAAYACAAH/DAABgAIAAf8MAAHgAgAB/wwA
+        AeACAAE/DAAB4AIAAT8MAAHgAgABPwwAAeACAAE/DAAB4AIAAT8MAAHgAgABPwwAAeACAAE/DAAB4AIA
+        AT8MAAHgAgABPwwAAeABAAHjAf8MAAHgAQAB4wH/DAAB+AEDAv8MAAH4AQMC/wwABP8MAAs=
+</value>
+  </data>
+  <metadata name="timerSyncronize.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>341, 9</value>
+  </metadata>
+  <metadata name="fileSystemWatcher1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>580, 13</value>
+  </metadata>
+  <metadata name="updaterWoker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 50</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("1131CD44-0FDC-4f7b-9D7E-8029B26EAE05")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,63 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.ServerConsole.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Server.ServerConsole.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,117 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,26 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.ServerConsole.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,7 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/ServiceLocator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/ServiceLocator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Console/ServiceLocator.cs	(revision 1270)
@@ -0,0 +1,49 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using HeuristicLab.Hive.Contracts.Interfaces;
+using System.ServiceModel;
+
+namespace HeuristicLab.Hive.Server.ServerConsole {
+  internal class ServiceLocator {
+    private static IServerConsoleFacade serverConsoleFacade = null;
+
+    internal static string Address { get; set; }
+    internal static string Port { get; set; }
+
+    internal static IClientManager GetClientManager() {
+      return GetServerConsoleFacade() as IClientManager;
+    }
+
+    internal static IJobManager GetJobManager() {
+      return GetServerConsoleFacade() as IJobManager;
+    }
+
+    internal static IUserRoleManager GetUserRoleManager() {
+      return GetServerConsoleFacade() as IUserRoleManager;
+    }
+
+    internal static IServerConsoleFacade GetServerConsoleFacade() {
+      if (serverConsoleFacade == null &&
+        Address != String.Empty &&
+        Port != String.Empty) {
+
+        NetTcpBinding binding = 
+             new NetTcpBinding();
+
+        binding.MaxReceivedMessageSize = 5000000;
+
+        ChannelFactory<IServerConsoleFacade> factory =
+          new ChannelFactory<IServerConsoleFacade>(
+            binding,
+            new EndpointAddress("net.tcp://" + Address + ":" + Port + "/HiveServerConsole/ServerConsoleFacade"));
+
+        serverConsoleFacade = factory.CreateChannel();
+      }
+
+      return serverConsoleFacade;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs	(revision 1270)
@@ -0,0 +1,374 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Core;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using System.Resources;
+using System.Reflection;
+using HeuristicLab.Hive.JobBase;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+using System.Threading;
+
+namespace HeuristicLab.Hive.Server.Core {
+  /// <summary>
+  /// The ClientCommunicator manages the whole communication with the client
+  /// </summary>
+  public class ClientCommunicator: IClientCommunicator {
+    private static Dictionary<Guid, DateTime> lastHeartbeats = 
+      new Dictionary<Guid,DateTime>();
+
+    private static ReaderWriterLockSlim heartbeatLock =
+      new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
+
+    private static Mutex jobLock =
+      new Mutex();
+
+    IClientAdapter clientAdapter;
+    IJobAdapter jobAdapter;
+    IJobResultsAdapter jobResultAdapter;
+    ILifecycleManager lifecycleManager;
+    IInternalJobManager jobManager;
+
+    /// <summary>
+    /// Initialization of the Adapters to the database
+    /// Initialization of Eventhandler for the lifecycle management
+    /// Initialization of lastHearbeats Dictionary
+    /// </summary>
+    public ClientCommunicator() {
+      clientAdapter = ServiceLocator.GetClientAdapter();
+      jobAdapter = ServiceLocator.GetJobAdapter();
+      jobResultAdapter = ServiceLocator.GetJobResultsAdapter();
+      lifecycleManager = ServiceLocator.GetLifecycleManager();
+      jobManager = ServiceLocator.GetJobManager() as 
+        IInternalJobManager;
+
+      lifecycleManager.RegisterHeartbeat( 
+        new EventHandler(lifecycleManager_OnServerHeartbeat));
+    }
+
+    /// <summary>
+    /// Check if online clients send their hearbeats
+    /// if not -> set them offline and check if they where calculating a job
+    /// </summary>
+    /// <param name="sender"></param>
+    /// <param name="e"></param>
+    void lifecycleManager_OnServerHeartbeat(object sender, EventArgs e) {
+      List<ClientInfo> allClients = new List<ClientInfo>(clientAdapter.GetAll());
+
+      foreach (ClientInfo client in allClients) {
+        if (client.State != State.offline && client.State != State.nullState) {
+          heartbeatLock.EnterUpgradeableReadLock();
+
+          if (!lastHeartbeats.ContainsKey(client.ClientId)) {
+            client.State = State.offline;
+            clientAdapter.Update(client);
+            foreach (Job job in jobAdapter.GetActiveJobsOf(client)) {
+              jobManager.ResetJobsDependingOnResults(job);
+            }
+          } else {
+            DateTime lastHbOfClient = lastHeartbeats[client.ClientId];
+
+            TimeSpan dif = DateTime.Now.Subtract(lastHbOfClient);
+            // check if time between last hearbeat and now is greather than HEARTBEAT_MAX_DIF
+            if (dif.Seconds > ApplicationConstants.HEARTBEAT_MAX_DIF) {
+              // if client calculated jobs, the job must be reset
+              if (client.State == State.calculating) {
+                // check wich job the client was calculating and reset it
+                foreach (Job job in jobAdapter.GetActiveJobsOf(client)) {
+                  jobManager.ResetJobsDependingOnResults(job);
+                }
+              }
+              
+              // client must be set offline
+              client.State = State.offline;
+              clientAdapter.Update(client);
+
+              heartbeatLock.EnterWriteLock();
+              lastHeartbeats.Remove(client.ClientId);
+              heartbeatLock.ExitWriteLock();
+            }
+          }
+
+          heartbeatLock.ExitUpgradeableReadLock();
+        } else {
+          heartbeatLock.EnterWriteLock();
+          if (lastHeartbeats.ContainsKey(client.ClientId))
+            lastHeartbeats.Remove(client.ClientId);
+          heartbeatLock.ExitWriteLock();
+        }
+      }
+    }
+
+    #region IClientCommunicator Members
+
+    /// <summary>
+    /// Login process for the client
+    /// A hearbeat entry is created as well (login is the first hearbeat)
+    /// </summary>
+    /// <param name="clientInfo"></param>
+    /// <returns></returns>
+    public Response Login(ClientInfo clientInfo) {
+      Response response = new Response();
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(clientInfo.ClientId)) {
+        lastHeartbeats[clientInfo.ClientId] = DateTime.Now;
+      } else {
+        lastHeartbeats.Add(clientInfo.ClientId, DateTime.Now);
+      }
+      heartbeatLock.ExitWriteLock();
+
+      ICollection<ClientInfo> allClients = clientAdapter.GetAll();
+      ClientInfo client = clientAdapter.GetById(clientInfo.ClientId);
+      if (client != null && client.State != State.offline && client.State != State.nullState) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_USER_ALLREADY_ONLINE;
+        return response;
+      }
+      clientInfo.State = State.idle;
+      clientAdapter.Update(clientInfo);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
+
+      return response;
+    }
+
+    /// <summary>
+    /// The client has to send regulary heartbeats
+    /// this hearbeats will be stored in the heartbeats dictionary
+    /// check if there is work for the client and send the client a response if he should pull a job
+    /// </summary>
+    /// <param name="hbData"></param>
+    /// <returns></returns>
+    public ResponseHB SendHeartBeat(HeartBeatData hbData) {
+      ResponseHB response = new ResponseHB();
+
+      response.ActionRequest = new List<MessageContainer>();
+      if (clientAdapter.GetById(hbData.ClientId).State == State.offline ||
+          clientAdapter.GetById(hbData.ClientId).State == State.nullState) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_USER_NOT_LOGGED_IN;
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+        return response;
+      }
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(hbData.ClientId)) {
+        lastHeartbeats[hbData.ClientId] = DateTime.Now;
+      } else {
+        lastHeartbeats.Add(hbData.ClientId, DateTime.Now);
+      }
+      heartbeatLock.ExitWriteLock();
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_HARDBEAT_RECEIVED;
+      List<Job> allOfflineJobs = new List<Job>(jobAdapter.GetJobsByState(State.offline));
+      if (allOfflineJobs.Count > 0 && hbData.freeCores > 0) 
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
+      else
+        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage));
+
+      if (hbData.jobProgress != null) {
+        List<Job> jobsOfClient = new List<Job>(jobAdapter.GetActiveJobsOf(clientAdapter.GetById(hbData.ClientId)));
+        if (jobsOfClient == null || jobsOfClient.Count == 0) {
+          response.Success = false;
+          response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
+          return response;
+        }
+
+        foreach (KeyValuePair<long, double> jobProgress in hbData.jobProgress) {
+          Job curJob = jobAdapter.GetById(jobProgress.Key);
+          if (curJob.Client == null || curJob.Client.ClientId != hbData.ClientId) {
+            response.Success = false;
+            response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
+          } else {
+            curJob.Percentage = jobProgress.Value;
+            jobAdapter.Update(curJob);
+          }
+        }
+      }
+
+      return response;
+    }
+   
+    /// <summary>
+    /// if the client asked to pull a job he calls this method
+    /// the server selects a job and sends it to the client
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    public ResponseJob PullJob(Guid clientId) {
+      ResponseJob response = new ResponseJob();
+      
+      /// Critical section ///
+      jobLock.WaitOne();
+
+      LinkedList<Job> allOfflineJobs = new LinkedList<Job>(jobAdapter.GetJobsByState(State.offline));
+      if (allOfflineJobs != null && allOfflineJobs.Count > 0) {
+        Job job2Calculate = allOfflineJobs.First.Value;
+        job2Calculate.State = State.calculating;
+        job2Calculate.Client = clientAdapter.GetById(clientId);
+        job2Calculate.Client.State = State.calculating;
+
+        job2Calculate.DateCalculated = DateTime.Now;
+        response.Job = job2Calculate;
+        jobAdapter.Update(job2Calculate);
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_PULLED;
+      } else {
+        response.Success = true;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOBS_LEFT;
+      }
+
+      jobLock.ReleaseMutex();
+      /// End Critical section ///
+
+      return response;
+    }
+
+    /// <summary>
+    /// the client can send job results during calculating 
+    /// and will send a final job result when he finished calculating
+    /// these job results will be stored in the database
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <param name="jobId"></param>
+    /// <param name="result"></param>
+    /// <param name="exception"></param>
+    /// <param name="finished"></param>
+    /// <returns></returns>
+    public ResponseResultReceived SendJobResult(Guid clientId, 
+      long jobId, 
+      byte[] result, 
+      double percentage,
+      Exception exception,  
+      bool finished) {
+      ResponseResultReceived response = new ResponseResultReceived();
+      ClientInfo client =
+        clientAdapter.GetById(clientId);
+
+      Job job = 
+        jobAdapter.GetById(jobId);
+
+      if (job.Client == null)    {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOB_IS_NOT_BEEING_CALCULATED;
+        return response;
+      }
+      if (job.Client.ClientId != clientId) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_CLIENT_FOR_JOB;
+        return response;
+      }
+      if (job == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JOB_WITH_THIS_ID;
+        return response;
+      }
+      if (job.State != State.calculating) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_JOB_STATE;
+        return response;
+      }
+      job.SerializedJob = result;
+      job.Percentage = percentage;
+
+      if (finished) {
+        job.State = State.finished;
+        jobAdapter.Update(job);
+
+        client.State = State.idle;
+        clientAdapter.Update(client);
+
+        List<JobResult> jobResults = new List<JobResult>(jobResultAdapter.GetResultsOf(job));
+        foreach (JobResult currentResult in jobResults) 
+          jobResultAdapter.Delete(currentResult);
+      }
+
+      JobResult jobResult =
+        new JobResult();
+      jobResult.Client = client;
+      jobResult.Job = job;
+      jobResult.Result = result;
+      jobResult.Percentage = percentage;
+      jobResult.Exception = exception;
+      jobResult.DateFinished = DateTime.Now;
+
+      jobResultAdapter.Update(jobResult);
+      jobAdapter.Update(job);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
+      response.JobId = jobId;
+      response.finished = finished;
+
+      return response;
+    }
+
+    /// <summary>
+    /// when a client logs out the state will be set
+    /// and the entry in the last hearbeats dictionary will be removed
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>                       
+    public Response Logout(Guid clientId) {
+      Response response = new Response();
+
+      heartbeatLock.EnterWriteLock();
+      if (lastHeartbeats.ContainsKey(clientId))
+        lastHeartbeats.Remove(clientId);
+      heartbeatLock.ExitWriteLock();
+
+      ClientInfo client = clientAdapter.GetById(clientId);
+      if (client == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_CLIENT_NOT_REGISTERED;
+        return response;
+      }
+      List<Job> allJobs = new List<Job>(jobAdapter.GetAll());
+      if (client.State == State.calculating) {
+        // check wich job the client was calculating and reset it
+        foreach (Job job in allJobs) {
+          if (job.Client.ClientId == client.ClientId) {
+            jobManager.ResetJobsDependingOnResults(job);
+          }
+        }
+      }
+
+      client.State = State.offline;
+      clientAdapter.Update(client);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGOUT_SUCCESS;
+      
+      return response;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientFacade.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientFacade.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientFacade.cs	(revision 1270)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class ClientFacade: IClientFacade {
+
+    private IClientCommunicator clientCommunicator =
+      ServiceLocator.GetClientCommunicator();
+
+    #region IClientCommunicator Members
+
+    public Response Login(ClientInfo clientInfo) {
+      return clientCommunicator.Login(clientInfo);
+    }
+
+    public ResponseHB SendHeartBeat(HeartBeatData hbData) {
+      return clientCommunicator.SendHeartBeat(hbData);
+    }
+
+    public ResponseJob PullJob(Guid clientId) {
+      return clientCommunicator.PullJob(clientId);
+    }
+
+    public ResponseResultReceived SendJobResult(Guid clientId,
+      long jobId,
+      byte[] result,
+      double percentage, 
+      Exception exception,
+      bool finished) {
+      return clientCommunicator.SendJobResult(clientId, jobId, result, percentage, exception, finished);
+    }
+
+    public Response Logout(Guid clientId) {
+      return clientCommunicator.Logout(clientId);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ClientManager.cs	(revision 1270)
@@ -0,0 +1,166 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class ClientManager: IClientManager {
+
+    IClientAdapter clientAdapter;
+    IClientGroupAdapter clientGroupAdapter;
+
+    List<ClientGroup> clientGroups;
+
+    public ClientManager() {
+      clientAdapter = ServiceLocator.GetClientAdapter();
+      clientGroupAdapter = ServiceLocator.GetClientGroupAdapter();
+
+      clientGroups = new List<ClientGroup>();
+
+      ClientGroup cg = new ClientGroup { Id = 4, Name = "SuperGroup" };
+      cg.Resources = new List<Resource>();
+
+      clientGroups.Add(cg);
+    }
+
+    #region IClientManager Members
+
+    /// <summary>
+    /// Returns all clients stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<ClientInfo> GetAllClients() {
+      ResponseList<ClientInfo> response = new ResponseList<ClientInfo>();
+
+      response.List = new List<ClientInfo>(clientAdapter.GetAll());
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTS;
+      response.Success = true;
+
+      return response;
+    }
+
+    /// <summary>
+    /// returns all client groups stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<ClientGroup> GetAllClientGroups() {
+      ResponseList<ClientGroup> response = new ResponseList<ClientGroup>();
+
+      response.List = new List<ClientGroup>(clientGroupAdapter.GetAll());
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_GET_ALL_CLIENTGROUPS;
+      response.Success = true;
+
+      return response;
+    }
+
+    public ResponseList<UpTimeStatistics> GetAllUpTimeStatistics() {
+      ResponseList<UpTimeStatistics> response = new ResponseList<UpTimeStatistics>();
+      response.Success = true;
+      return response;
+    }
+
+    /// <summary>
+    /// Add a client group into the database
+    /// </summary>
+    /// <param name="clientGroup"></param>
+    /// <returns></returns>
+    public Response AddClientGroup(ClientGroup clientGroup) {
+      Response response = new Response();
+
+      if (clientGroup.Id != 0) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_ID_MUST_NOT_BE_SET;
+        return response;
+      }
+      clientGroupAdapter.Update(clientGroup);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    ///  Add a resource to a group
+    /// </summary>
+    /// <param name="clientGroupId"></param>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    public Response AddResourceToGroup(long clientGroupId, Resource resource) {
+      Response response = new Response();
+
+      if (resource.Id != 0) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_ID_MUST_NOT_BE_SET;
+        return response;
+      }
+
+      ClientGroup clientGroup = clientGroupAdapter.GetById(clientGroupId);
+      if (clientGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
+        return response;
+      }
+      clientGroup.Resources.Add(resource);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_ADDED_TO_GROUP;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Remove a resource from a group
+    /// </summary>
+    /// <param name="clientGroupId"></param>
+    /// <param name="resourceId"></param>
+    /// <returns></returns>
+    public Response DeleteResourceFromGroup(long clientGroupId, long resourceId) {
+      Response response = new Response();
+
+      ClientGroup clientGroup = clientGroupAdapter.GetById(clientGroupId);
+      if (clientGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_CLIENTGROUP_DOESNT_EXIST;
+        return response;
+      }
+      foreach (Resource resource in clientGroup.Resources) {
+        if (resource.Id == resourceId) {
+          clientGroup.Resources.Remove(resource);
+          response.Success = true;
+          response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_REMOVED;
+          return response;
+        }
+      }
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_CLIENT_RESOURCE_NOT_FOUND;
+
+      return response;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/DbTestApp.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/DbTestApp.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/DbTestApp.cs	(revision 1270)
@@ -0,0 +1,325 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+using System.Net;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using System.Diagnostics;
+
+namespace HeuristicLab.Hive.Server {
+  [ClassInfo(Name = "Hive DB Test App",
+      Description = "Test Application for the Hive DataAccess Layer",
+      AutoRestart = true)]
+  class HiveDbTestApplication : ApplicationBase {
+    private void TestClientAdapter() {
+      IClientAdapter clientAdapter =
+        ServiceLocator.GetClientAdapter();
+
+      ClientInfo client = new ClientInfo();
+      client.Login = DateTime.Now;
+      client.ClientId = Guid.NewGuid();
+      clientAdapter.Update(client);
+
+      ClientInfo clientRead =
+        clientAdapter.GetById(client.ClientId);
+      Debug.Assert(
+        clientRead != null &&
+        client.ClientId == clientRead.ClientId);
+
+      client.CpuSpeedPerCore = 2000;
+      clientAdapter.Update(client);
+      clientRead =
+        clientAdapter.GetById(client.ClientId);
+      Debug.Assert(
+       clientRead != null &&
+       client.ClientId == clientRead.ClientId &&
+       clientRead.CpuSpeedPerCore == 2000);
+
+      ICollection<ClientInfo> clients = 
+        clientAdapter.GetAll();
+      int count = clients.Count;
+
+      clientAdapter.Delete(client);
+
+      clients = clientAdapter.GetAll();
+      Debug.Assert(count - 1 == clients.Count);
+    }
+
+    private void TestUserAdapter() {
+      IUserAdapter userAdapter =
+        ServiceLocator.GetUserAdapter();
+
+      User user = new User();
+      user.Name = "TestDummy";
+
+      userAdapter.Update(user);
+
+      User userRead =
+        userAdapter.GetById(user.Id);
+      Debug.Assert(
+        userRead != null &&
+        user.Id == userRead.Id);
+
+      user.Password = "passme";
+      userAdapter.Update(user);
+      userRead =
+        userAdapter.GetByName(user.Name);
+      Debug.Assert(
+       userRead != null &&
+       userRead.Name == user.Name &&
+       userRead.Password == user.Password);
+
+      ICollection<User> users = 
+       userAdapter.GetAll();
+      int count = users.Count;
+
+      userAdapter.Delete(user);
+
+      users = userAdapter.GetAll();
+      Debug.Assert(count - 1 == users.Count);
+    }
+
+    private void TestUserGroupAdapter() {
+      IUserGroupAdapter userGroupAdapter =
+       ServiceLocator.GetUserGroupAdapter();
+
+      User user =
+        new User();
+      user.Name = "Stefan";
+
+      User user2 =
+        new User();
+      user2.Name = "Martin";
+
+      User user3 =
+        new User();
+      user3.Name = "Heinz";
+
+      UserGroup group =
+        new UserGroup();
+
+      UserGroup subGroup =
+        new UserGroup();
+      subGroup.Members.Add(user);
+
+      group.Members.Add(user3);
+      group.Members.Add(user2);
+      group.Members.Add(subGroup);
+
+      userGroupAdapter.Update(group);
+
+      UserGroup read =
+        userGroupAdapter.GetById(group.Id);
+
+      ICollection<UserGroup> userGroups =
+        userGroupAdapter.GetAll();
+
+      IUserAdapter userAdapter =
+        ServiceLocator.GetUserAdapter();
+
+      userAdapter.Delete(user3);
+      
+      read =
+         userGroupAdapter.GetById(group.Id);
+
+      userGroupAdapter.Delete(subGroup);
+
+      read =
+         userGroupAdapter.GetById(group.Id);
+
+      userGroups =
+        userGroupAdapter.GetAll();
+
+      userGroupAdapter.Delete(group);
+
+      userGroups =
+        userGroupAdapter.GetAll();
+
+      userAdapter.Delete(user);
+      userAdapter.Delete(user2);
+    }
+
+    private void TestClientGroupAdapter() {
+      IClientGroupAdapter clientGroupAdapter =
+       ServiceLocator.GetClientGroupAdapter();
+
+      ClientInfo client =
+        new ClientInfo();
+      client.Name = "Stefan";
+      client.ClientId = Guid.NewGuid();
+      client.Login = DateTime.Now;
+
+      ClientInfo client2 =
+        new ClientInfo();
+      client2.Name = "Martin";
+      client2.ClientId = Guid.NewGuid();
+      client2.Login = DateTime.Now;
+
+      ClientInfo client3 =
+        new ClientInfo();
+      client3.Name = "Heinz";
+      client3.ClientId = Guid.NewGuid();
+      client3.Login = DateTime.Now;
+
+      ClientGroup group =
+        new ClientGroup();
+
+      ClientGroup subGroup =
+        new ClientGroup();
+      subGroup.Resources.Add(client);
+
+      group.Resources.Add(client3);
+      group.Resources.Add(client2);
+      group.Resources.Add(subGroup);
+
+      clientGroupAdapter.Update(group);
+
+      ClientGroup read =
+        clientGroupAdapter.GetById(group.Id);
+
+      ICollection<ClientGroup> clientGroups =
+        clientGroupAdapter.GetAll();
+
+      IClientAdapter clientAdapter =
+        ServiceLocator.GetClientAdapter();
+
+      clientAdapter.Delete(client3);
+
+      read =
+         clientGroupAdapter.GetById(group.Id);
+
+      clientGroupAdapter.Delete(subGroup);
+
+      read =
+         clientGroupAdapter.GetById(group.Id);
+
+      clientGroups =
+        clientGroupAdapter.GetAll();
+
+      clientGroupAdapter.Delete(group);
+
+      clientGroups =
+        clientGroupAdapter.GetAll();
+
+      clientAdapter.Delete(client);
+      clientAdapter.Delete(client2);
+    }
+
+    private void TestJobAdapter() {
+      IJobAdapter jobAdapter = 
+        ServiceLocator.GetJobAdapter();
+      IClientAdapter clientAdapter =
+        ServiceLocator.GetClientAdapter();
+
+      Job job = new Job();
+
+      ClientInfo client = new ClientInfo();
+      client.ClientId = Guid.NewGuid();
+      client.Login = DateTime.Now;
+
+      job.Client = client;
+      jobAdapter.Update(job);
+
+      ICollection<Job> jobs = jobAdapter.GetAll();
+
+      jobAdapter.Delete(job);
+      clientAdapter.Delete(client);
+
+      jobs = jobAdapter.GetAll();
+    }
+
+    private void TestJobResultsAdapter() {
+      Job job = new Job();
+
+      ClientInfo client = new ClientInfo();
+      client.ClientId = Guid.NewGuid();
+      client.Login = DateTime.Now;
+
+      job.Client = client;
+
+      IJobResultsAdapter resultsAdapter = 
+        ServiceLocator.GetJobResultsAdapter();
+
+      byte[] resultByte = {0x0f, 0x1f, 0x2f, 0x3f, 0x4f};
+
+      JobResult result = new JobResult();
+      result.Client = client;
+      result.Job = job;
+      result.Result = resultByte;
+
+      resultsAdapter.Update(result);
+
+      JobResult read =
+        resultsAdapter.GetById(result.Id);
+      Debug.Assert(
+        read.Id == result.Id &&
+        result.Client.Id == read.Client.Id &&
+        result.Job.Id == read.Job.Id &&
+        result.Result == result.Result);
+
+      int count =
+        resultsAdapter.GetAll().Count;
+
+      resultsAdapter.Delete(result);
+
+      ICollection<JobResult> allResults =
+        resultsAdapter.GetAll();
+
+      Debug.Assert(allResults.Count == count - 1);
+
+      IJobAdapter jboAdapter =
+        ServiceLocator.GetJobAdapter();
+      jboAdapter.Delete(job);
+      IClientAdapter clientAdapter =
+        ServiceLocator.GetClientAdapter();
+      clientAdapter.Delete(client);
+    }
+
+    public override void Run() {
+      ITransactionManager transactionManager =
+        ServiceLocator.GetTransactionManager();
+      
+      TestClientAdapter();
+      transactionManager.UpdateDB();
+
+      TestUserAdapter();
+      transactionManager.UpdateDB();
+
+      TestUserGroupAdapter();
+      transactionManager.UpdateDB();
+
+      TestClientGroupAdapter();
+      transactionManager.UpdateDB();   
+
+      TestJobAdapter();
+      transactionManager.UpdateDB();  
+
+      TestJobResultsAdapter();
+      transactionManager.UpdateDB();     
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ExecutionEngineFacade.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ExecutionEngineFacade.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ExecutionEngineFacade.cs	(revision 1270)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class ExecutionEngineFacade: IExecutionEngineFacade {
+
+    private IJobManager jobManager =
+      ServiceLocator.GetJobManager();
+
+    #region IExecutionEngineFacade Members
+
+    public Response AddJob(Job job) {
+      return jobManager.AddNewJob(job);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HeuristicLab.Hive.Server.Core.csproj	(revision 1270)
@@ -0,0 +1,130 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{898B31CF-81DC-453B-AEB3-BDF83197A7EE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.Core</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.Core-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ClientCommunicator.cs" />
+    <Compile Include="ClientFacade.cs" />
+    <Compile Include="ClientManager.cs" />
+    <Compile Include="DbTestApp.cs" />
+    <Compile Include="ExecutionEngineFacade.cs" />
+    <Compile Include="HiveServerCorePlugin.cs" />
+    <Compile Include="HiveServerMessages.Designer.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IClientAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IClientGroupAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IDataAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IJobAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IJobResultsAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IPermissionOwnerAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IResourceAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IUserAdapter.cs" />
+    <Compile Include="InternalInterfaces\DataAccess\IUserGroupAdapter.cs" />
+    <Compile Include="InternalInterfaces\IInternalJobManager.cs" />
+    <Compile Include="JobManager.cs" />
+    <Compile Include="LifecycleManager.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServerConsoleFacade.cs" />
+    <Compile Include="ServiceLocator.cs" />
+    <Compile Include="UserRoleManager.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Hive.JobBase\HeuristicLab.Hive.JobBase.csproj">
+      <Project>{21187322-52DD-4243-80A4-A85F0263E63B}</Project>
+      <Name>HeuristicLab.Hive.JobBase</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HiveServerCorePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HiveServerCorePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HiveServerCorePlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [ClassInfo(Name = "HeuristicLab.Hive.Server.Core-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Server.Core-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Hive.Contracts-3.2")]
+  public class HiveServerCorePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HiveServerMessages.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HiveServerMessages.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/HiveServerMessages.Designer.cs	(revision 1270)
@@ -0,0 +1,81 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.Core {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class HiveServerMessages {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal HiveServerMessages() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Server.Core.HiveServerMessages", typeof(HiveServerMessages).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The Login was successfull.
+        /// </summary>
+        internal static string LoginSuccess {
+            get {
+                return ResourceManager.GetString("LoginSuccess", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to A User with this GUID is allready logged in.
+        /// </summary>
+        internal static string UserAllreadyOnline {
+            get {
+                return ResourceManager.GetString("UserAllreadyOnline", resourceCulture);
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientAdapter.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  /// <summary>
+  /// The client database adapter
+  /// </summary>
+  public interface IClientAdapter : IDataAdapter<ClientInfo> {
+    /// <summary>
+    /// Get the client with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientInfo GetByName(string name);
+
+    /// <summary>
+    /// Get the client with the specified id
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientInfo GetById(Guid id);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientGroupAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientGroupAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IClientGroupAdapter.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  /// <summary>
+  /// The client group database adapter
+  /// </summary>
+  public interface IClientGroupAdapter: IDataAdapter<ClientGroup> {
+    /// <summary>
+    /// Get the client group with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    ClientGroup GetByName(string name);
+
+    /// <summary>
+    /// Gets all client groups where the resource is member of
+    /// </summary>
+    /// <param name="permOwner"></param>
+    /// <returns></returns>
+    ICollection<ClientGroup> MemberOf(Resource resource);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IDataAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IDataAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IDataAdapter.cs	(revision 1270)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  public interface IDataAdapter<ObjT>
+    where ObjT: IHiveObject
+  {
+    /// <summary>
+    /// Save or update the object
+    /// </summary>
+    /// <param name="user"></param>
+    void Update(ObjT obj);
+
+    /// <summary>
+    /// Get the object with the specified ID
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    ObjT GetById(long id);
+
+    /// <summary>
+    /// Get all objects
+    /// </summary>
+    /// <returns></returns>
+    ICollection<ObjT> GetAll();
+
+    /// <summary>
+    /// Deletes the object
+    /// </summary>
+    /// <param name="user"></param>
+    bool Delete(ObjT obj);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobAdapter.cs	(revision 1270)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  public interface IJobAdapter: IDataAdapter<Job> {
+    /// <summary>
+    /// Gets all subjobs of the specified job
+    /// </summary>
+    /// <returns></returns>
+    ICollection<Job> GetAllSubjobs(Job job);
+
+    /// <summary>
+    /// Gets all Jobs with the specified state
+    /// </summary>
+    /// <returns></returns>
+    ICollection<Job> GetJobsByState(State state);
+
+    /// <summary>
+    /// Gets all jobs of the client
+    /// </summary>
+    /// <param name="client"></param>
+    /// <returns></returns>
+    ICollection<Job> GetJobsOf(ClientInfo client);
+
+    /// <summary>
+    /// Gets all active jobs of the client
+    /// </summary>
+    /// <param name="client"></param>
+    /// <returns></returns>
+    ICollection<Job> GetActiveJobsOf(ClientInfo client);
+
+    /// <summary>
+    /// Gets all jobs of the user
+    /// </summary>
+    /// <param name="user"></param>
+    /// <returns></returns>
+    ICollection<Job> GetJobsOf(User user);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobResultsAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobResultsAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IJobResultsAdapter.cs	(revision 1270)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  public interface IJobResultsAdapter: IDataAdapter<JobResult> {
+    /// <summary>
+    /// Gets all results for the specified job
+    /// </summary>
+    /// <param name="job"></param>
+    /// <returns></returns>
+    ICollection<JobResult> GetResultsOf(Job job);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IPermissionOwnerAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IPermissionOwnerAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IPermissionOwnerAdapter.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  /// <summary>
+  /// The permission owner database adapter
+  /// </summary>
+  public interface IPermissionOwnerAdapter: IDataAdapter<PermissionOwner> {
+    /// <summary>
+    /// Gets the permission owner and updates the values of the object
+    /// </summary>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    bool GetById(PermissionOwner permOwner);
+
+    /// <summary>
+    /// Get the permission owner with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    PermissionOwner GetByName(String name);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IResourceAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IResourceAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IResourceAdapter.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  /// <summary>
+  /// The resource database adapter
+  /// </summary>
+  public interface IResourceAdapter: IDataAdapter<Resource> {
+    /// <summary>
+    /// Gets the resource and updates the values of the object
+    /// </summary>
+    /// <param name="resource"></param>
+    /// <returns></returns>
+    bool GetById(Resource resource);
+
+    /// <summary>
+    /// Get the resource with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    Resource GetByName(string name);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IUserAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IUserAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IUserAdapter.cs	(revision 1270)
@@ -0,0 +1,40 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  /// <summary>
+  /// The user database adapter
+  /// </summary>
+  public interface IUserAdapter: IDataAdapter<User> {
+    /// <summary>
+    /// Get the user with the specified name
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    User GetByName(string name);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IUserGroupAdapter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IUserGroupAdapter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/DataAccess/IUserGroupAdapter.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess {
+  /// <summary>
+  /// The user group database adapter
+  /// </summary>
+  public interface IUserGroupAdapter: IDataAdapter<UserGroup> {
+    /// <summary>
+    /// Get the user group with the specified name
+    /// </summary>
+    /// <param name="clientId"></param>
+    /// <returns></returns>
+    UserGroup GetByName(String name);
+
+    /// <summary>
+    /// Gets all user groups where the permission owner is member of
+    /// </summary>
+    /// <param name="permOwner"></param>
+    /// <returns></returns>
+    ICollection<UserGroup> MemberOf(PermissionOwner permOwner);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/IInternalJobManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/IInternalJobManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/InternalInterfaces/IInternalJobManager.cs	(revision 1270)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+
+namespace HeuristicLab.Hive.Server.Core.InternalInterfaces {
+  interface IInternalJobManager {
+    void ResetJobsDependingOnResults(Job job);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/JobManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/JobManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/JobManager.cs	(revision 1270)
@@ -0,0 +1,179 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class JobManager: IJobManager, IInternalJobManager {
+
+    IJobAdapter jobAdapter;
+    IJobResultsAdapter jobResultAdapter;
+    ILifecycleManager lifecycleManager;
+
+    #region IJobManager Members
+
+    public JobManager() {
+      jobAdapter = ServiceLocator.GetJobAdapter();
+      jobResultAdapter = ServiceLocator.GetJobResultsAdapter();
+
+      lifecycleManager = ServiceLocator.GetLifecycleManager();
+
+      lifecycleManager.RegisterStartup(new EventHandler(lifecycleManager_OnStartup));
+      lifecycleManager.RegisterStartup(new EventHandler(lifecycleManager_OnShutdown));
+    }
+
+    private JobResult GetLastJobResult(Job job) {
+      List<JobResult> allJobResults = new List<JobResult>(jobResultAdapter.GetResultsOf(job));
+      JobResult lastJobResult = null;
+      foreach (JobResult jR in allJobResults) {
+        // if lastJobResult was before the current jobResult the lastJobResult must be updated
+        if (lastJobResult == null ||
+            (jR.timestamp > lastJobResult.timestamp))
+          lastJobResult = jR;
+      }
+      return lastJobResult;
+    }
+
+    public void ResetJobsDependingOnResults(Job job) {
+      JobResult lastJobResult = GetLastJobResult(job);
+      if (lastJobResult != null) {
+        job.Percentage = lastJobResult.Percentage;
+        job.SerializedJob = lastJobResult.Result;
+      } else {
+        job.Percentage = 0;
+      }
+
+      job.Client = null;
+      job.State = State.offline;
+
+      jobAdapter.Update(job);
+    }
+
+    void checkForDeadJobs() {
+      List<Job> allJobs = new List<Job>(jobAdapter.GetAll());
+      foreach (Job curJob in allJobs) {
+        if (curJob.State == State.calculating) {
+          ResetJobsDependingOnResults(curJob);
+        }
+      }
+    }
+
+    void lifecycleManager_OnStartup(object sender, EventArgs e) {
+      checkForDeadJobs();
+    }
+
+    void lifecycleManager_OnShutdown(object sender, EventArgs e) {
+      checkForDeadJobs();
+    }
+
+    /// <summary>
+    /// returns all jobs stored in the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<Job> GetAllJobs() {
+      ResponseList<Job> response = new ResponseList<Job>();
+
+      response.List = new List<Job>(jobAdapter.GetAll());
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_JOB_ALL_JOBS;
+      
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a new job into the database
+    /// </summary>
+    /// <param name="job"></param>
+    /// <returns></returns>
+    public ResponseObject<Job> AddNewJob(Job job) {
+      ResponseObject<Job> response = new ResponseObject<Job>();
+
+      if (job != null) {
+        if (job.State != State.offline) {
+          response.Success = false;
+          response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOBSTATE_MUST_BE_OFFLINE;
+          return response;
+        }
+        if (job.Id != 0) {
+          response.Success = false;
+          response.StatusMessage = ApplicationConstants.RESPONSE_JOB_ID_MUST_NOT_BE_SET;
+          return response;
+        }
+        if (job.SerializedJob == null) {
+          response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_NULL;
+          response.Success = false;
+          return response;
+        }
+
+        job.DateCreated = DateTime.Now;
+        jobAdapter.Update(job);
+        response.Success = true;
+        response.Obj = job;
+        response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_ADDED;
+      } else {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_NULL;
+      }
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a job from the database
+    /// </summary>
+    /// <param name="jobId"></param>
+    /// <returns></returns>
+    public Response RemoveJob(long jobId) {
+      Response response = new Response();
+
+      Job job = jobAdapter.GetById(jobId);
+      if (job == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_DOESNT_EXIST;
+        return response;
+      }
+      jobAdapter.Delete(job);
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_REMOVED;
+
+      return response;
+    }
+
+    public ResponseObject<JobResult> GetLastJobResultOf(long jobId) {
+      ResponseObject<JobResult> response = new ResponseObject<JobResult>();
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_JOB_JOB_RESULT_SENT;
+      response.Obj = GetLastJobResult(jobAdapter.GetById(jobId));
+
+      return response;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/LifecycleManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/LifecycleManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/LifecycleManager.cs	(revision 1270)
@@ -0,0 +1,79 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using System.Timers;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class LifecycleManager: ILifecycleManager {
+    private static Timer timer =
+      new Timer();
+
+    private static event EventHandler OnServerHeartbeat;
+    private static event EventHandler OnStartup;
+    private static event EventHandler OnShutdown;
+    #region ILifecycleManager Members
+
+    public void RegisterHeartbeat(EventHandler handler) {
+      OnServerHeartbeat += handler;
+    }
+
+    public void RegisterStartup(EventHandler handler) {
+      OnStartup += handler;
+    }
+
+    public void RegisterShutdown(EventHandler handler) {
+      OnShutdown += handler;
+    }
+
+    public void Init() {
+      timer.Interval = new TimeSpan(0, 0, 10).TotalMilliseconds; // TODO: global constant needed
+      timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
+      timer.Start();
+
+      if (OnStartup != null)
+        OnStartup(this, null);
+    }
+
+    void timer_Elapsed(object sender, ElapsedEventArgs e) {
+      if (OnServerHeartbeat != null)
+        OnServerHeartbeat(this, null);
+    }
+
+    public ITransactionManager GetTransactionManager() {
+      return ServiceLocator.GetTransactionManager();
+    }
+
+    public void Shutdown() {
+      ServiceLocator.GetTransactionManager().UpdateDB();
+
+      if (OnShutdown != null)
+        OnShutdown(this, null);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.Core")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("4D7B8E8F-6A49-499a-87E8-F0537F192295")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ServerConsoleFacade.cs	(revision 1270)
@@ -0,0 +1,147 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.Core {
+  public class ServerConsoleFacade: IServerConsoleFacade {
+    private IClientManager clientManager = 
+      ServiceLocator.GetClientManager();
+
+    private IJobManager jobManager = 
+      ServiceLocator.GetJobManager();
+
+    private IUserRoleManager userRoleManager = 
+      ServiceLocator.GetUserRoleManager();
+
+    private String loginName = null;
+
+    #region IServerConsoleFacade Members
+
+    public Response Login(string username, string password) {
+      Response resp = new Response();
+
+      loginName = username;
+
+      resp.Success = true;
+      resp.StatusMessage =
+        ApplicationConstants.RESPONSE_SERVERCONSOLE_LOGIN_SUCCESS;
+
+      return resp;
+    }
+
+    #endregion
+
+    #region IClientManager Members
+
+    public ResponseList<ClientInfo> GetAllClients() {
+      return clientManager.GetAllClients();
+    }
+
+    public ResponseList<ClientGroup> GetAllClientGroups() {
+      return clientManager.GetAllClientGroups();
+    }
+
+    public ResponseList<UpTimeStatistics> GetAllUpTimeStatistics() {
+      return clientManager.GetAllUpTimeStatistics();
+    }
+
+    public Response AddClientGroup(ClientGroup clientGroup) {
+      return clientManager.AddClientGroup(clientGroup);
+    }
+
+    public Response AddResourceToGroup(long clientGroupId, Resource resource) {
+      return clientManager.AddResourceToGroup(clientGroupId, resource);
+    }
+
+    public Response DeleteResourceFromGroup(long clientGroupId, long resourceId) {
+      return clientManager.DeleteResourceFromGroup(clientGroupId, resourceId);
+    }
+
+    #endregion
+
+    #region IJobManager Members
+
+    public ResponseList<HeuristicLab.Hive.Contracts.BusinessObjects.Job> GetAllJobs() {
+      return jobManager.GetAllJobs();
+    }
+    public ResponseObject<Job> AddNewJob(Job job) {
+      return jobManager.AddNewJob(job);
+    }
+
+    public ResponseObject<JobResult> GetLastJobResultOf(long jobId) {
+      return jobManager.GetLastJobResultOf(jobId);
+    }
+
+    public Response RemoveJob(long jobId) {
+      return jobManager.RemoveJob(jobId);
+    }
+
+    #endregion
+
+    #region IUserRoleManager Members
+
+    public ResponseList<HeuristicLab.Hive.Contracts.BusinessObjects.User> GetAllUsers() {
+      return userRoleManager.GetAllUsers();
+    }
+
+    public ResponseObject<User> AddNewUser(User user) {
+      return userRoleManager.AddNewUser(user);
+    }
+
+    public ResponseList<UserGroup> GetAllUserGroups() {
+      return userRoleManager.GetAllUserGroups();
+    }
+
+    public Response RemoveUser(long userId) {
+      return userRoleManager.RemoveUser(userId);
+    }
+
+    public ResponseObject<UserGroup> AddNewUserGroup(UserGroup userGroup) {
+      return userRoleManager.AddNewUserGroup(userGroup);
+    }
+
+    public Response RemoveUserGroup(long groupId) {
+      return userRoleManager.RemoveUserGroup(groupId);
+    }
+
+    public Response AddUserToGroup(long groupId, long userId) {
+      return userRoleManager.AddUserToGroup(groupId, userId);
+    }
+
+    public Response AddUserGroupToGroup(long groupId, long groupToAddId) {
+      return userRoleManager.AddUserGroupToGroup(groupId, groupToAddId);
+    }
+
+    public Response RemovePermissionOwnerFromGroup(long groupId, long userId) {
+      return userRoleManager.RemovePermissionOwnerFromGroup(groupId, userId);
+    }
+
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ServiceLocator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ServiceLocator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/ServiceLocator.cs	(revision 1270)
@@ -0,0 +1,241 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using HeuristicLab.PluginInfrastructure;
+using System.Runtime.CompilerServices;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Server.Core;
+
+/// <summary>
+/// The service locator for the server core
+/// </summary>
+public class ServiceLocator {
+  private static DiscoveryService discoveryService =
+    new DiscoveryService();
+
+  private static ITransactionManager transManager = null;
+
+  private static IClientManager clientManager = null;
+
+  private static IJobManager jobManager = null;
+
+  private static IUserRoleManager userRoleManager = null;
+
+  private static IClientCommunicator clientCommunicator = null;
+
+  private static ILifecycleManager lifecycleManager = null;
+
+  private static IClientAdapter clientAdapter = null;
+
+  private static IClientGroupAdapter clientGroupAdapter = null;
+
+  private static IResourceAdapter resourceAdapter = null;
+
+  private static IUserAdapter userAdapter = null;
+
+  private static IUserGroupAdapter userGroupAdapter = null;
+
+  private static IPermissionOwnerAdapter permOwnerAdapter = null;
+
+  private static IJobAdapter jobAdapter = null;
+
+  private static IJobResultsAdapter jobResultsAdapter = null;
+
+
+  /// <summary>
+  /// Gets the db transaction manager
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static ITransactionManager GetTransactionManager() {
+    if (transManager == null) {
+      transManager = discoveryService.GetInstances<ITransactionManager>()[0];
+    }
+
+    return transManager;
+  }
+
+  /// <summary>
+  /// Gets the client manager
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IClientManager GetClientManager() {
+    if (clientManager == null)
+      clientManager = new ClientManager();
+
+    return clientManager;
+  }
+
+  /// <summary>
+  /// Gets the job manager
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IJobManager GetJobManager() {
+    if (jobManager == null)
+      jobManager = new JobManager();
+
+    return jobManager;
+  }
+
+  /// <summary>
+  /// Gets the user role manager
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IUserRoleManager GetUserRoleManager() {
+    if (userRoleManager == null)
+      userRoleManager = new UserRoleManager();
+
+    return userRoleManager;
+  }
+
+  /// <summary>
+  /// Gets the client Communicator
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IClientCommunicator GetClientCommunicator() {
+    if (clientCommunicator == null)
+      clientCommunicator = new ClientCommunicator();
+
+    return clientCommunicator;
+  }
+
+  /// <summary>
+  /// Gets the lifecycle manager
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static ILifecycleManager GetLifecycleManager() {
+    if (lifecycleManager == null) {
+      lifecycleManager = new LifecycleManager();
+    }
+
+    return lifecycleManager;
+  }
+
+  /// <summary>
+  /// Gets the client database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IClientAdapter GetClientAdapter() {
+    if (clientAdapter == null) {
+      clientAdapter = discoveryService.GetInstances<IClientAdapter>()[0];
+    }
+
+    return clientAdapter;
+  }
+
+  /// <summary>
+  /// Gets the client group database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IClientGroupAdapter GetClientGroupAdapter() {
+    if (clientGroupAdapter == null) {
+      clientGroupAdapter = discoveryService.GetInstances<IClientGroupAdapter>()[0];
+    }
+
+    return clientGroupAdapter;
+  }
+
+  /// <summary>
+  /// Gets the resource database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IResourceAdapter GetResourceAdapter() {
+    if (resourceAdapter == null) {
+      resourceAdapter = discoveryService.GetInstances<IResourceAdapter>()[0];
+    }
+
+    return resourceAdapter;
+  }
+
+  /// <summary>
+  /// Gets the user database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IUserAdapter GetUserAdapter() {
+    if (userAdapter == null) {
+      userAdapter = discoveryService.GetInstances<IUserAdapter>()[0];
+    }
+
+    return userAdapter;
+  }
+
+  /// <summary>
+  /// Gets the user group database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IUserGroupAdapter GetUserGroupAdapter() {
+    if (userGroupAdapter == null) {
+      userGroupAdapter = discoveryService.GetInstances<IUserGroupAdapter>()[0];
+    }
+
+    return userGroupAdapter;
+  }
+
+  /// <summary>
+  /// Gets the permission owner database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IPermissionOwnerAdapter GetPermissionOwnerAdapter() {
+    if (permOwnerAdapter == null) {
+      permOwnerAdapter = discoveryService.GetInstances<IPermissionOwnerAdapter>()[0];
+    }
+
+    return permOwnerAdapter;
+  }
+
+  /// <summary>
+  /// Gets the job database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IJobAdapter GetJobAdapter() {
+    if (jobAdapter == null) {
+      jobAdapter = discoveryService.GetInstances<IJobAdapter>()[0];
+    }
+
+    return jobAdapter;
+  }
+
+  /// <summary>
+  /// Gets the job results database adapter
+  /// </summary>
+  /// <returns></returns>
+  [MethodImpl(MethodImplOptions.Synchronized)]
+  public static IJobResultsAdapter GetJobResultsAdapter() {
+    if (jobResultsAdapter == null) {
+      jobResultsAdapter = discoveryService.GetInstances<IJobResultsAdapter>()[0];
+    }
+
+    return jobResultsAdapter;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/UserRoleManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/UserRoleManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Core/UserRoleManager.cs	(revision 1270)
@@ -0,0 +1,259 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Hive.Contracts.Interfaces;
+using HeuristicLab.Hive.Contracts.BusinessObjects;
+using HeuristicLab.Hive.Server.Core.InternalInterfaces.DataAccess;
+using System.Resources;
+using System.Reflection;
+using HeuristicLab.Hive.Contracts;
+
+namespace HeuristicLab.Hive.Server.Core {
+  class UserRoleManager: IUserRoleManager {
+
+    IUserAdapter userAdapter;
+    IUserGroupAdapter userGroupAdapter;
+    IPermissionOwnerAdapter permissionOwnerAdapter;
+
+    public UserRoleManager() {
+      userAdapter = ServiceLocator.GetUserAdapter();
+      userGroupAdapter = ServiceLocator.GetUserGroupAdapter();
+    }
+
+    #region IUserRoleManager Members
+
+    /// <summary>
+    /// returns all users from the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<User> GetAllUsers() {
+      ResponseList<User> response = new ResponseList<User>();
+
+      List<User> allUsers = new List<User>(userAdapter.GetAll());
+      response.List = allUsers;
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_GET_ALL_USERS;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a new user to the database
+    /// </summary>
+    /// <param name="user"></param>
+    /// <returns></returns>
+    public ResponseObject<User> AddNewUser(User user) {
+      ResponseObject<User> response = new ResponseObject<User>();
+
+      if (user.Id != 0) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_ID_MUST_NOT_BE_SET;
+        return response;
+      }
+      if (userAdapter.GetByName(user.Name) != null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERNAME_EXISTS_ALLREADY;
+        return response;
+      }
+
+      userAdapter.Update(user);
+      response.Obj = user;
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_SUCCESSFULLY_ADDED;
+      
+      return response;
+    }
+
+    /// <summary>
+    /// returns all usergroups from the database
+    /// </summary>
+    /// <returns></returns>
+    public ResponseList<UserGroup> GetAllUserGroups() {
+      ResponseList<UserGroup> response = new ResponseList<UserGroup>();
+
+      response.List = new List<UserGroup>(userGroupAdapter.GetAll());
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_GET_ALL_USERGROUPS;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a user from the database
+    /// </summary>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public Response RemoveUser(long userId) {
+      Response response = new Response();
+      User user = userAdapter.GetById(userId);
+      if (user == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_DOESNT_EXIST;
+        return response;
+      }
+      userAdapter.Delete(user);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_REMOVED;
+                         
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a new usergroup to the database
+    /// </summary>
+    /// <param name="userGroup"></param>
+    /// <returns></returns>
+    public ResponseObject<UserGroup> AddNewUserGroup(UserGroup userGroup) {
+      ResponseObject<UserGroup> response = new ResponseObject<UserGroup>();
+      
+      if (userGroup.Id != 0) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_ID_MUST_NOT_BE_SET;
+        return response;
+      }
+
+      userGroupAdapter.Update(userGroup);
+      response.Obj = userGroup;
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a user group from the database
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <returns></returns>
+    public Response RemoveUserGroup(long groupId) {
+      Response response = new Response();
+
+      UserGroup userGroupFromDb = userGroupAdapter.GetById(groupId);
+      if (userGroupFromDb == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      userGroupAdapter.Delete(userGroupFromDb);
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a user into a user group
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <param name="userId"></param>
+    /// <returns></returns>
+    public Response AddUserToGroup(long groupId, long userId) {
+      Response response = new Response();
+
+      User user = userAdapter.GetById(userId);
+      if (user == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USER_DOESNT_EXIST;
+        return response;
+      }
+
+      UserGroup userGroup = userGroupAdapter.GetById(groupId);
+      if (userGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      userGroup.Members.Add(user);
+      userGroupAdapter.Update(userGroup);
+
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_ADDED;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Adds a user group to a user group
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <param name="groupToAddId"></param>
+    /// <returns></returns>
+    public Response AddUserGroupToGroup(long groupId, long groupToAddId) {
+      Response response = new Response();
+
+      UserGroup userGroup = userGroupAdapter.GetById(groupId);
+      UserGroup userGroupToAdd = userGroupAdapter.GetById(groupToAddId);
+
+      if (userGroup == null || userGroupToAdd == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      userGroup.Members.Add(userGroupToAdd);
+      response.Success = true;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_ADDED_TO_USERGROUP;
+
+      return response;
+    }
+
+    /// <summary>
+    /// Removes a permission owner (user, user group) from a user group
+    /// </summary>
+    /// <param name="groupId"></param>
+    /// <param name="permissionOwnerId"></param>
+    /// <returns></returns>
+    public Response RemovePermissionOwnerFromGroup(long groupId, long permissionOwnerId) {
+      Response response = new Response();
+
+      UserGroup userGroup = userGroupAdapter.GetById(groupId);
+      if (userGroup == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_USERGROUP_DOESNT_EXIST;
+        return response;
+      }
+      User user = userAdapter.GetById(permissionOwnerId);
+      if (user == null) {
+        response.Success = false;
+        response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST;
+        return response;
+      }
+      foreach (PermissionOwner permissionOwner in userGroup.Members) {
+        if (permissionOwner.Id == permissionOwnerId) {
+          userGroup.Members.Remove(permissionOwner);
+          userGroupAdapter.Update(userGroup);
+          response.Success = true;
+          response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_REMOVED;
+          return response;
+        }
+      }
+      response.Success = false;
+      response.StatusMessage = ApplicationConstants.RESPONSE_USERROLE_PERMISSIONOWNER_DOESNT_EXIST;
+      
+      return response;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/HeuristicLab.Hive.Server.Scheduler.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/HeuristicLab.Hive.Server.Scheduler.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/HeuristicLab.Hive.Server.Scheduler.csproj	(revision 1270)
@@ -0,0 +1,95 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{679E977A-117B-456E-8594-2A4DEADB658B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server.Scheduler</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server.Scheduler-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HiveServerSchedulerPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/HiveServerSchedulerPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/HiveServerSchedulerPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/HiveServerSchedulerPlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [ClassInfo(Name = "HeuristicLab.Hive.Server.Scheduler-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Server.Scheduler-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Hive.Server-3.2")]
+  public class HiveServerSchedulerPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server.Scheduler/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server.Scheduler")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("25B50C56-CC87-4fa3-84CA-D28DD95FCB00")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HeuristicLab.Hive.Server.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HeuristicLab.Hive.Server.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HeuristicLab.Hive.Server.csproj	(revision 1270)
@@ -0,0 +1,137 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Hive.Server</RootNamespace>
+    <AssemblyName>HeuristicLab.Hive.Server-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Runtime.Serialization">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.ServiceModel">
+      <RequiredTargetFramework>3.0</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="HiveServerPlugin.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HiveServerApplication.cs" />
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj">
+      <Project>{134F93D7-E7C8-4ECD-9923-7F63259A60D8}</Project>
+      <Name>HeuristicLab.Hive.Contracts</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HiveServerApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HiveServerApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HiveServerApplication.cs	(revision 1270)
@@ -0,0 +1,189 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using System.ServiceModel;
+using System.ServiceModel.Description;
+using System.Net;
+using HeuristicLab.Hive.Contracts;
+using HeuristicLab.Hive.Contracts.Interfaces;
+
+namespace HeuristicLab.Hive.Server {
+  [ClassInfo(Name = "Hive Server",
+      Description = "Server application for the distributed hive engine.",
+      AutoRestart = true)]
+  class HiveServerApplication : ApplicationBase {
+    const int port =
+      9000;
+
+    DiscoveryService discService =
+        new DiscoveryService();
+
+    private bool AddMexEndpoint(ServiceHost serviceHost) {
+      if (serviceHost != null) {
+        ServiceMetadataBehavior behavior =
+            new ServiceMetadataBehavior();
+        serviceHost.Description.Behaviors.Add(behavior);
+
+        return serviceHost.AddServiceEndpoint(
+          typeof(IMetadataExchange),
+          MetadataExchangeBindings.CreateMexTcpBinding(),
+          "mex") != null;
+      } else
+        return false;
+    }
+
+    private ServiceHost StartClientCommunicator(Uri uriTcp) {
+      IClientFacade[] clientCommunicatorInstances =
+        discService.GetInstances<IClientFacade>();
+
+      if (clientCommunicatorInstances.Length > 0) {
+        ServiceHost serviceHost =
+                new ServiceHost(clientCommunicatorInstances[0].GetType(),
+                  uriTcp);
+
+        System.ServiceModel.Channels.Binding binding =
+          new NetTcpBinding();
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IClientCommunicator),
+              binding,
+              "ClientCommunicator");
+
+        AddMexEndpoint(serviceHost);
+
+        serviceHost.Open();
+
+        return serviceHost;
+      } else
+        return null;
+    }
+
+    private ServiceHost StartServerConsoleFacade(Uri uriTcp) {
+      IServerConsoleFacade[] serverConsoleInstances =
+        discService.GetInstances<IServerConsoleFacade>();
+
+      if (serverConsoleInstances.Length > 0) {
+        ServiceHost serviceHost =
+            new ServiceHost(serverConsoleInstances[0].GetType(),
+                  uriTcp);
+
+        System.ServiceModel.Channels.Binding binding =
+          new NetTcpBinding();
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IServerConsoleFacade),
+            binding,
+            "ServerConsoleFacade");
+
+        AddMexEndpoint(serviceHost);
+
+        serviceHost.Open();
+
+        return serviceHost;
+      } else
+        return null;
+    }
+
+    private ServiceHost StartExecutionEngineFacade(Uri uriTcp) {
+      IExecutionEngineFacade[] serverConsoleInstances =
+        discService.GetInstances<IExecutionEngineFacade>();
+
+      if (serverConsoleInstances.Length > 0) {
+        ServiceHost serviceHost =
+            new ServiceHost(serverConsoleInstances[0].GetType(),
+                  uriTcp);
+
+        System.ServiceModel.Channels.Binding binding =
+          new NetTcpBinding();
+
+        serviceHost.AddServiceEndpoint(
+          typeof(IExecutionEngineFacade),
+            binding,
+            "ExecutionEngineFacade");
+
+        AddMexEndpoint(serviceHost);
+
+        serviceHost.Open();
+
+        return serviceHost;
+      } else
+        return null;
+    }
+
+    public override void Run() {
+      IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());
+      int index = 0;
+      if (System.Environment.OSVersion.Version.Major >= 6) {
+        for (index = addresses.Length - 1; index >= 0; index--)
+          if (addresses[index].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
+            break;
+      }
+
+      Uri uriTcp =
+          new Uri("net.tcp://" + addresses[index] + ":" + port + "/HiveServer/"); 
+
+      ServiceHost clientCommunicator =
+        StartClientCommunicator(uriTcp);
+
+      uriTcp =
+        new Uri("net.tcp://" + addresses[index] + ":" + port + "/HiveServerConsole/");
+
+      ServiceHost serverConsoleFacade =
+        StartServerConsoleFacade(uriTcp);
+
+      uriTcp =
+        new Uri("net.tcp://" + addresses[index] + ":" + port + "/ExecutionEngine/");
+
+      ServiceHost executionEngineFacade =
+        StartExecutionEngineFacade(uriTcp);
+
+      ILifecycleManager[] lifecycleManagers =
+         discService.GetInstances<ILifecycleManager>();
+
+      if (lifecycleManagers.Length > 0) {
+        ILifecycleManager lifecycleManager = 
+          lifecycleManagers[0];
+
+        lifecycleManager.Init();
+        //sync with db every 5 minutes
+        lifecycleManager.GetTransactionManager().EnableAutoUpdate(
+          new TimeSpan(0, 0, 30));
+
+        Form mainForm = new MainForm(clientCommunicator.BaseAddresses[0],
+            serverConsoleFacade.BaseAddresses[0], 
+            executionEngineFacade.BaseAddresses[0]);
+
+         Application.Run(mainForm);
+
+         lifecycleManager.Shutdown();
+      }
+
+      clientCommunicator.Close();
+      serverConsoleFacade.Close();
+      executionEngineFacade.Close();      
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HiveServerPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HiveServerPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/HiveServerPlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Hive.Server {
+  [ClassInfo(Name = "HeuristicLab.Hive.Server-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Hive.Server-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Hive.Contracts-3.2")]
+  public class HiveServerPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.Designer.cs	(revision 1270)
@@ -0,0 +1,120 @@
+﻿namespace HeuristicLab.Hive.Server
+{
+    partial class MainForm
+    {
+        /// <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.label1 = new System.Windows.Forms.Label();
+          this.lblAddress1 = new System.Windows.Forms.Label();
+          this.label2 = new System.Windows.Forms.Label();
+          this.lblAddress2 = new System.Windows.Forms.Label();
+          this.label3 = new System.Windows.Forms.Label();
+          this.lblAddress3 = new System.Windows.Forms.Label();
+          this.SuspendLayout();
+          // 
+          // label1
+          // 
+          this.label1.AutoSize = true;
+          this.label1.Location = new System.Drawing.Point(18, 18);
+          this.label1.Name = "label1";
+          this.label1.Size = new System.Drawing.Size(183, 13);
+          this.label1.TabIndex = 0;
+          this.label1.Text = "Hive Server Client Facade running @";
+          // 
+          // lblAddress1
+          // 
+          this.lblAddress1.AutoSize = true;
+          this.lblAddress1.Location = new System.Drawing.Point(18, 43);
+          this.lblAddress1.Name = "lblAddress1";
+          this.lblAddress1.Size = new System.Drawing.Size(44, 13);
+          this.lblAddress1.TabIndex = 1;
+          this.lblAddress1.Text = "address";
+          // 
+          // label2
+          // 
+          this.label2.AutoSize = true;
+          this.label2.Location = new System.Drawing.Point(18, 76);
+          this.label2.Name = "label2";
+          this.label2.Size = new System.Drawing.Size(195, 13);
+          this.label2.TabIndex = 2;
+          this.label2.Text = "Hive Server Console Facade running @";
+          // 
+          // lblAddress2
+          // 
+          this.lblAddress2.AutoSize = true;
+          this.lblAddress2.Location = new System.Drawing.Point(18, 102);
+          this.lblAddress2.Name = "lblAddress2";
+          this.lblAddress2.Size = new System.Drawing.Size(44, 13);
+          this.lblAddress2.TabIndex = 3;
+          this.lblAddress2.Text = "address";
+          // 
+          // label3
+          // 
+          this.label3.AutoSize = true;
+          this.label3.Location = new System.Drawing.Point(18, 131);
+          this.label3.Name = "label3";
+          this.label3.Size = new System.Drawing.Size(206, 13);
+          this.label3.TabIndex = 4;
+          this.label3.Text = "Hive Execution Engine Facade running @";
+          // 
+          // lblAddress3
+          // 
+          this.lblAddress3.AutoSize = true;
+          this.lblAddress3.Location = new System.Drawing.Point(18, 159);
+          this.lblAddress3.Name = "lblAddress3";
+          this.lblAddress3.Size = new System.Drawing.Size(44, 13);
+          this.lblAddress3.TabIndex = 5;
+          this.lblAddress3.Text = "address";
+          // 
+          // MainForm
+          // 
+          this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+          this.ClientSize = new System.Drawing.Size(304, 181);
+          this.Controls.Add(this.lblAddress3);
+          this.Controls.Add(this.label3);
+          this.Controls.Add(this.lblAddress2);
+          this.Controls.Add(this.label2);
+          this.Controls.Add(this.lblAddress1);
+          this.Controls.Add(this.label1);
+          this.Name = "MainForm";
+          this.Text = "Hive Server";
+          this.ResumeLayout(false);
+          this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label lblAddress1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label lblAddress2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.Label lblAddress3;
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.cs	(revision 1270)
@@ -0,0 +1,24 @@
+﻿using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Hive.Server
+{
+    public partial class MainForm : Form {
+        public MainForm(Uri address1, Uri address2, Uri address3) {
+          InitializeComponent();
+          if(address1 != null)
+            this.lblAddress1.Text = address1.ToString();
+          if (address2 != null)
+            this.lblAddress2.Text = address2.ToString();
+          if (address3 != null)
+            this.lblAddress3.Text = address3.ToString();
+        }
+
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/MainForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Hive.Server")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("4B463015-5F7D-4e74-A878-56B6AD06A1AA")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,71 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.Properties
+{
+
+
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Hive.Server.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,117 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,30 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Hive.Server.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Hive.Server/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,7 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/DiscreteCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/DiscreteCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/DiscreteCrossover.cs	(revision 1270)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Discrete crossover for integer vectors.
+  /// </summary>
+  public class DiscreteCrossover : IntVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Discrete crossover for integer vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a discrete crossover operation of the two given parents.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parent1">The first parent for the crossover operation.</param>
+    /// <param name="parent2">The second parent for the crossover operation.</param>
+    /// <returns>The newly created integer vector, resulting from the crossover operation.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+
+      for (int i = 0; i < length; i++) {
+        if (random.NextDouble() < 0.5)
+          result[i] = parent1[i];
+        else
+          result[i] = parent2[i];
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a discrete crossover operation for two given parent integer vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two integer vectors that should be crossed.</param>
+    /// <returns>The newly created integer vector, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in DiscreteCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/HeuristicLab.IntVector.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/HeuristicLab.IntVector.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/HeuristicLab.IntVector.csproj	(revision 1270)
@@ -0,0 +1,90 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{85FA46C6-761E-4098-9EF7-060ECC386396}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.IntVector</RootNamespace>
+    <AssemblyName>HeuristicLab.IntVector-3.2</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.IntVector-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DiscreteCrossover.cs" />
+    <Compile Include="UniformAllPositionsManipulator.cs" />
+    <Compile Include="IntVectorCrossoverBase.cs" />
+    <Compile Include="IntVectorManipulatorBase.cs" />
+    <Compile Include="UniformOnePositionManipulator.cs" />
+    <Compile Include="HeuristicLabIntVectorPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="UniformRandomIntVectorGenerator.cs" />
+    <Compile Include="SinglePointCrossover.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/HeuristicLabIntVectorPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/HeuristicLabIntVectorPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/HeuristicLabIntVectorPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Plugin class for HeuristicLab.IntVector plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.IntVector-3.2")]
+  [PluginFile(Filename = "HeuristicLab.IntVector-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Evolutionary-3.2")]
+  public class HeuristicLabIntVectorPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/IntVectorCrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/IntVectorCrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/IntVectorCrossoverBase.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Base class for all integer vector crossover operators.
+  /// </summary>
+  public abstract class IntVectorCrossoverBase : CrossoverBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntVectorCrossoverBase"/> with one variable info
+    /// (<c>IntVector</c>).
+    /// </summary>
+    public IntVectorCrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("IntVector", "Parent and child integer vector", typeof(IntArrayData), VariableKind.In | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Performs a crossover by calling <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom, int[][]"/>
+    /// and adds the created integer vector to the current scope.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if the parents have different lengths.</exception>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <param name="random">A random number generator.</param>
+    protected sealed override void Cross(IScope scope, IRandom random) {
+      int[][] parents = new int[scope.SubScopes.Count][];
+      int length = -1;
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        parents[i] = scope.SubScopes[i].GetVariableValue<IntArrayData>("IntVector", false).Data;
+        if (i == 0) length = parents[i].Length;
+        else if (parents[i].Length != length) throw new InvalidOperationException("ERROR in IntVectorCrossoverBase: Cannot apply crossover to integer vectors of different length");
+      }
+
+      int[] result = Cross(scope, random, parents);
+      scope.AddVariable(new Variable(scope.TranslateName("IntVector"), new IntArrayData(result)));
+    }
+
+    /// <summary>
+    /// Performs a crossover of multiple integer vectors.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing all parent integer vectors.</param>
+    /// <returns>The newly created integer vector, resulting from the crossover operation.</returns>
+    protected abstract int[] Cross(IScope scope, IRandom random, int[][] parents);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/IntVectorManipulatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/IntVectorManipulatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/IntVectorManipulatorBase.cs	(revision 1270)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Base class for all integer vector manipulators.
+  /// </summary>
+  public abstract class IntVectorManipulatorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntVectorManipulatorBase"/> with two variable infos
+    /// (<c>Random</c> and <c>IntVector</c>).
+    /// </summary>
+    public IntVectorManipulatorBase() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("IntVector", "Integer vector to manipulate", typeof(IntArrayData), VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Manipulates the integer vector.
+    /// </summary>
+    /// <param name="scope">The current scope whose integer vector to manipulate.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      IntArrayData vector = GetVariableValue<IntArrayData>("IntVector", scope, false);
+      vector.Data = Manipulate(scope, random, vector.Data);
+      return null;
+    }
+
+    /// <summary>
+    /// Manipulates the given integer <paramref name="vector"/> with the given random number generator.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The integer vector to manipulate.</param>
+    /// <returns>The manipulated integer vector.</returns>
+    protected abstract int[] Manipulate(IScope scope, IRandom random, int[] vector);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.IntVector")]
+[assembly: AssemblyDescription("HeuristicLab int vector operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("32617ac7-c3bc-404a-828c-c86637f38d43")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/SinglePointCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/SinglePointCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/SinglePointCrossover.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Single point crossover for integer vectors.
+  /// </summary>
+  public class SinglePointCrossover : IntVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Single point crossover for integer vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a single point crossover at a randomly chosen position of the two 
+    /// given parent integer vectors.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parent1">The first parent for crossover.</param>
+    /// <param name="parent2">The second parent for crossover.</param>
+    /// <returns>The newly created integer vector, resulting from the single point crossover.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      int breakPoint = random.Next(1, length);
+
+      for (int i = 0; i < breakPoint; i++)
+        result[i] = parent1[i];
+      for (int i = breakPoint; i < length; i++)
+        result[i] = parent2[i];
+
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a single point crossover at a randomly chosen position of two 
+    /// given parent integer vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two integer vectors that should be crossed.</param>
+    /// <returns>The newly created integer vector, resulting from the single point crossover.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in SinglePointCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformAllPositionsManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformAllPositionsManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformAllPositionsManipulator.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Uniformly distributed change of all positions of an integer vector.
+  /// </summary>
+  public class UniformAllPositionsManipulator : IntVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Uniformly distributed change of all positions of an integer vector."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformAllPositionsManipulator"/> with two variable infos
+    /// (<c>Minimum</c> and <c>Maximum</c>).
+    /// </summary>
+    public UniformAllPositionsManipulator() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Changes all positions in the given integer <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The integer vector to manipulate.</param>
+    /// <param name="min">The minimum value of the sampling range for each vector element (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for each vector element (exclusive).</param>
+    /// <returns>The new integer vector which has been manipulated.</returns>
+    public static int[] Apply(IRandom random, int[] vector, int min, int max) {
+      int[] result = new int[vector.Length];
+      for (int i = 0; i < result.Length; i++)
+        result[i] = random.Next(min, max);
+      return result;
+    }
+
+    /// <summary>
+    /// Changes all positions in the given integer <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The integer vector to manipulate.</param>
+    /// <returns>The new integer vector which has been manipulated.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] vector) {
+      int min = GetVariableValue<IntData>("Minimum", scope, true).Data;
+      int max = GetVariableValue<IntData>("Maximum", scope, true).Data;
+      return Apply(random, vector, min, max);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformOnePositionManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformOnePositionManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformOnePositionManipulator.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Uniformly distributed change of a single position of an integer vector.
+  /// </summary>
+  public class UniformOnePositionManipulator : IntVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Uniformly distributed change of a single position of an integer vector."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformOnePositionManipulator"/> with two variable infos
+    /// (<c>Minimum</c> and <c>Maximum</c>).
+    /// </summary>
+    public UniformOnePositionManipulator() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Changes randomly a single position in the given integer <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The integer vector to manipulate.</param>
+    /// <param name="min">The minimum value of the sampling range for 
+    /// the vector element to change (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for
+    /// the vector element to change (exclusive).</param>
+    /// <returns>The new integer vector that has been manipulated.</returns>
+    public static int[] Apply(IRandom random, int[] vector, int min, int max) {
+      int[] result = (int[])vector.Clone();
+      int index = random.Next(result.Length);
+      result[index] = random.Next(min, max);
+      return result;
+    }
+
+    /// <summary>
+    /// Changes randomly a single position in the given integer <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The integer vector to manipulate.</param>
+    /// <returns>The new integer vector that has been manipulated.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] vector) {
+      int min = GetVariableValue<IntData>("Minimum", scope, true).Data;
+      int max = GetVariableValue<IntData>("Maximum", scope, true).Data;
+      return Apply(random, vector, min, max);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformRandomIntVectorGenerator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformRandomIntVectorGenerator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.IntVector/UniformRandomIntVectorGenerator.cs	(revision 1270)
@@ -0,0 +1,83 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.IntVector {
+  /// <summary>
+  /// Generates a new random integer vector with each element uniformly distributed in a specified range.
+  /// </summary>
+  public class UniformRandomIntVectorGenerator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Operator generating a new random integer vector with each element uniformly distributed in a specified range."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformRandomIntVectorGenerator"/> with five variable infos
+    /// (<c>Random</c>, <c>Length</c>, <c>Minimum</c>, <c>Maximum</c> and <c>IntVector</c>).
+    /// </summary>
+    public UniformRandomIntVectorGenerator() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Length", "Vector length", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for each vector element (included)", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for each vector element (excluded)", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("IntVector", "Created random integer vector", typeof(IntArrayData), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Generates a new random integer vector with the given <paramref name="length"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="length">The length of the int vector.</param>
+    /// <param name="min">The minimum value of the sampling range for each vector element (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for each vector element (exclusive).</param>
+    /// <returns>The newly created integer vector.</returns>
+    public static int[] Apply(IRandom random, int length, int min, int max) {
+      int[] result = new int[length];
+      for (int i = 0; i < length; i++)
+        result[i] = random.Next(min, max);
+      return result;
+    }
+
+    /// <summary>
+    /// Generates a new random integer vector and injects it in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to get the values from and where to inject the newly 
+    /// created integer vector.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      int length = GetVariableValue<IntData>("Length", scope, true).Data;
+      int min = GetVariableValue<IntData>("Minimum", scope, true).Data;
+      int max = GetVariableValue<IntData>("Maximum", scope, true).Data;
+
+      int[] vector = Apply(random, length, min, max);
+      scope.AddVariable(new Variable(scope.TranslateName("IntVector"), new IntArrayData(vector)));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/BestAverageWorstQualityCalculator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/BestAverageWorstQualityCalculator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/BestAverageWorstQualityCalculator.cs	(revision 1270)
@@ -0,0 +1,99 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Captures the best, the average and the worst quality of the current population.
+  /// </summary>
+  public class BestAverageWorstQualityCalculator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BestAverageWorstQualityCalculator"/> with five variable
+    /// infos (<c>Quality</c>, <c>Maximization</c>, <c>BestQuality</c>, <c>AverageQuality</c> 
+    /// and <c>WorstQuality</c>).
+    /// </summary>
+    public BestAverageWorstQualityCalculator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Quality", "Quality value of a solution", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximization", "Maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("BestQuality", "Quality value of best solution", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("AverageQuality", "Average quality value", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("WorstQuality", "Quality value of worst solution", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Captures the best, the average and the worst quality of the current population.
+    /// </summary>
+    /// <param name="scope">The scope whose population to test and where to inject the captured values.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      double[] qualities = new double[scope.SubScopes.Count];
+
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Quality", false).Data;
+
+      double worst = qualities[0];
+      double best = qualities[0];
+      double average = qualities[0];
+      for (int i = 1; i < qualities.Length; i++) {
+        if (qualities[i] < worst) worst = qualities[i];
+        if (qualities[i] > best) best = qualities[i];
+        average += qualities[i];
+      }
+      average = average / qualities.Length;
+
+      if (!GetVariableValue<BoolData>("Maximization", scope, true).Data) {
+        double temp = worst;
+        worst = best;
+        best = temp;
+      }
+
+      SetValue(GetVariableInfo("BestQuality"), best, scope);
+      SetValue(GetVariableInfo("AverageQuality"), average, scope);
+      SetValue(GetVariableInfo("WorstQuality"), worst, scope);
+
+      return null;
+    }
+
+    private void SetValue(IVariableInfo info, double value, IScope scope) {
+      DoubleData data = GetVariableValue<DoubleData>(info.FormalName, scope, false, false);
+      if (data == null) {
+        data = new DoubleData();
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, data));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), data));
+      }
+      data.Data = value;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/BestSolutionStorer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/BestSolutionStorer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/BestSolutionStorer.cs	(revision 1270)
@@ -0,0 +1,131 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Keeps a variable in the global scope that contains the scope representing the best solution.
+  /// </summary>
+  public class BestSolutionStorer : DelegatingOperator {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Keeps a variable in the global scope that contains the scope representing the best of run solution."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BestSolutionStorer"/> with three variable infos
+    /// (<c>Quality</c>, <c>Maximization</c> and <c>BestSolution</c>).
+    /// </summary>
+    public BestSolutionStorer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Quality", "Quality value of a solution", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximization", "Maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("BestSolution", "The best solution of the run", typeof(IScope), VariableKind.New | VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Keeps a variable in the global scope that contains the scope representing the best solution.
+    /// </summary>
+    /// <param name="scope">The scope whose populations to check for the best solution.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      if(scope.GetVariable(Guid.ToString() + "-Active") == null) {
+        double[] qualities = new double[scope.SubScopes.Count];
+        bool maximization = scope.GetVariableValue<BoolData>("Maximization", true).Data;
+        for(int i = 0; i < scope.SubScopes.Count; i++)
+          qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Quality", false).Data;
+
+        double smallest = qualities[0]; int smallestIndex = 0;
+        double biggest = qualities[0]; int biggestIndex = 0;
+        for(int i = 1; i < qualities.Length; i++) {
+          if(qualities[i] < smallest) {
+            smallest = qualities[i];
+            smallestIndex = i;
+          }
+          if(qualities[i] > biggest) {
+            biggest = qualities[i];
+            biggestIndex = i;
+          }
+        }
+        IVariableInfo qualityInfo = GetVariableInfo("Quality");
+        IVariable bestSolutionVariable = scope.GetVariable(scope.TranslateName("BestSolution"));
+        if(bestSolutionVariable != null) {
+
+          double bestQuality = ((IScope)bestSolutionVariable.Value).GetVariableValue<DoubleData>(qualityInfo.ActualName, false).Data;
+
+          // do nothing if the best solution of the current scope is not better than the best solution of the whole run so far.
+          if((maximization && biggest <= bestQuality) ||
+            (!maximization && smallest >= bestQuality)) return null;
+        }
+
+        IScope bestSolutionClone;
+        if(maximization) {
+          bestSolutionClone = (IScope)scope.SubScopes[biggestIndex].Clone();
+        } else {
+          bestSolutionClone = (IScope)scope.SubScopes[smallestIndex].Clone();
+        }
+
+        if(SubOperators.Count > 0) {
+          scope.AddSubScope(bestSolutionClone);
+          scope.AddVariable(new Variable(Guid.ToString() + "-Active", new BoolData(true)));
+
+          CompositeOperation compOp = new CompositeOperation();
+          AtomicOperation operation = new AtomicOperation(SubOperators[0], bestSolutionClone);
+          AtomicOperation continuation = new AtomicOperation(this, scope);
+
+          compOp.AddOperation(operation);
+          compOp.AddOperation(continuation);
+          return compOp;
+        } else {
+          StoreBestSolution(bestSolutionClone, scope);
+          return null;
+        }
+      } else {  // operator already executed
+        scope.RemoveVariable(Guid.ToString() + "-Active");
+        IScope bestSolutionClone = scope.SubScopes[scope.SubScopes.Count - 1];
+        scope.RemoveSubScope(bestSolutionClone);
+
+        StoreBestSolution(bestSolutionClone, scope);
+        return null;
+      }
+    }
+
+    private void StoreBestSolution(IScope bestSolution, IScope scope) {
+      SetValue(GetVariableInfo("BestSolution"), bestSolution, scope);
+    }
+
+    private void SetValue(IVariableInfo info, IScope data, IScope scope) {
+      IVariable var = scope.GetVariable(info.ActualName);
+      if(var == null) {
+        var = new Variable(scope.TranslateName(info.FormalName), data);
+        scope.AddVariable(var);
+      } else {
+        var.Value = data;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/HeuristicLab.Logging.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/HeuristicLab.Logging.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/HeuristicLab.Logging.csproj	(revision 1270)
@@ -0,0 +1,154 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Logging</RootNamespace>
+    <AssemblyName>HeuristicLab.Logging-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Logging-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Logging-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BestAverageWorstQualityCalculator.cs" />
+    <Compile Include="BestSolutionStorer.cs" />
+    <Compile Include="PointXYChartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="PointXYChartView.Designer.cs">
+      <DependentUpon>PointXYChartView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Logger.cs" />
+    <Compile Include="Linechart.cs" />
+    <Compile Include="HeuristicLabLoggingPlugin.cs" />
+    <Compile Include="LinechartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LinechartView.Designer.cs">
+      <DependentUpon>LinechartView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LogView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LogView.Designer.cs">
+      <DependentUpon>LogView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PointXYChart.cs" />
+    <Compile Include="PointXYChartInjector.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="QualityLogger.cs" />
+    <Compile Include="Log.cs" />
+    <Compile Include="LinechartInjector.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Charting.Data\HeuristicLab.Charting.Data.csproj">
+      <Project>{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}</Project>
+      <Name>HeuristicLab.Charting.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Charting\HeuristicLab.Charting.csproj">
+      <Project>{B462D3CC-8866-42F0-9832-AD0967613B72}</Project>
+      <Name>HeuristicLab.Charting</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="PointXYChartView.resx">
+      <DependentUpon>PointXYChartView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LinechartView.resx">
+      <DependentUpon>LinechartView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LogView.resx">
+      <DependentUpon>LogView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/HeuristicLabLoggingPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/HeuristicLabLoggingPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/HeuristicLabLoggingPlugin.cs	(revision 1270)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Logging plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Logging-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Logging-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Charting-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Charting.Data-3.2")]
+  public class HeuristicLabLoggingPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Linechart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Linechart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Linechart.cs	(revision 1270)
@@ -0,0 +1,157 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Class to represent a Linechart.
+  /// </summary>
+  public class Linechart : ItemBase, IVisualizationItem {
+    private IntData myNumberOfLines;
+    /// <summary>
+    /// Gets or sets the number of lines of the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnNumberOfLinesChanged"/> in the setter.</remarks>
+    public int NumberOfLines {
+      get { return myNumberOfLines.Data; }
+      set {
+        if (value != myNumberOfLines.Data) {
+          myNumberOfLines.Data = value;
+          OnNumberOfLinesChanged();
+        }
+      }
+    }
+    private ItemList myValues;
+    /// <summary>
+    /// Gets or sets the values of the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnValuesChanged"/> in the setter.</remarks>
+    public ItemList Values {
+      get { return myValues; }
+      set {
+        if (value != myValues) {
+          myValues = value;
+          OnValuesChanged();
+        }
+      }
+    }
+
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Linechart"/>.
+    /// </summary>
+    public Linechart() {
+      myNumberOfLines = new IntData(0);
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="Linechart"/> with the given <paramref name="numberOfLines"/>
+    /// and the given <paramref name="values"/>.
+    /// </summary>
+    /// <param name="numberOfLines">The number of lines with which to initialize the current instance.</param>
+    /// <param name="values">The values with which to initialize the current instance.</param>
+    public Linechart(int numberOfLines, ItemList values) {
+      myNumberOfLines = new IntData(numberOfLines);
+      myValues = values;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="Linechart"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Linechart clone = (Linechart)base.Clone(clonedObjects);
+      clone.myNumberOfLines = (IntData)Auxiliary.Clone(myNumberOfLines, clonedObjects);
+      clone.myValues = (ItemList)Auxiliary.Clone(Values, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates an instance of <see cref="LinechartView"/> to represent the current instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="LinechartView"/>.</returns>
+    public override IView CreateView() {
+      return new LinechartView(this);
+    }
+
+    /// <summary>
+    /// Occurs when the number of lines has been changed.
+    /// </summary>
+    public event EventHandler NumberOfLinesChanged;
+    /// <summary>
+    /// Fires a new <c>NumberOfLinesChanged</c> event.
+    /// </summary>
+    protected virtual void OnNumberOfLinesChanged() {
+      if (NumberOfLinesChanged != null)
+        NumberOfLinesChanged(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the values have been changed.
+    /// </summary>
+    public event EventHandler ValuesChanged;
+    /// <summary>
+    /// Fires a new <c>ValuesChanged</c> event.
+    /// </summary>
+    protected virtual void OnValuesChanged() {
+      if (ValuesChanged != null)
+        ValuesChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The number of lines and the values are saved as child nodes with tag 
+    /// name <c>NumberOfLines</c> and <c>Values</c> respectively.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("NumberOfLines", myNumberOfLines, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Values", Values, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted item from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Has to be saved in a special way, see <see cref="GetXmlNode"/> for further information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the Linechart is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myNumberOfLines = (IntData)PersistenceManager.Restore(node.SelectSingleNode("NumberOfLines"), restoredObjects);
+      myValues = (ItemList)PersistenceManager.Restore(node.SelectSingleNode("Values"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartInjector.cs	(revision 1270)
@@ -0,0 +1,73 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Injects a new Linechart into the current scope.
+  /// </summary>
+  public class LinechartInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="LinechartInjector"/> with three variable infos
+    /// (<c>NumberOfLines</c>, <c>Values</c> and <c>Linechart</c>).
+    /// </summary>
+    public LinechartInjector() {
+      VariableInfo numberOfLinesInfo = new VariableInfo("NumberOfLines", "Number of lines the linechart consists of", typeof(IntData), VariableKind.In);
+      numberOfLinesInfo.Local = true;
+      AddVariableInfo(numberOfLinesInfo);
+      AddVariable(new Variable("NumberOfLines", new IntData(1)));
+      AddVariableInfo(new VariableInfo("Values", "Item list holding the values of the linechart", typeof(ItemList), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Linechart", "Object representing a linechart", typeof(Linechart), VariableKind.New | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Injects a new Linechart variable into the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the Linechart variable.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int numberOfLines = GetVariableValue<IntData>("NumberOfLines", scope, true).Data;
+      ItemList values = GetVariableValue<ItemList>("Values", scope, true);
+      Linechart linechart = GetVariableValue<Linechart>("Linechart", scope, false, false);
+      if (linechart == null) {
+        linechart = new Linechart(numberOfLines, values);
+        IVariableInfo info = GetVariableInfo("Linechart");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, linechart));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), linechart));
+      } else
+        linechart.Values = values;
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.Designer.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Logging {
+  partial class LinechartView {
+    /// <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.dataChartControl = new HeuristicLab.Charting.Data.DataChartControl();
+      this.SuspendLayout();
+      // 
+      // dataChartControl
+      // 
+      this.dataChartControl.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.dataChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.dataChartControl.Chart = null;
+      this.dataChartControl.Location = new System.Drawing.Point(0, 0);
+      this.dataChartControl.Name = "dataChartControl";
+      this.dataChartControl.ScaleOnResize = true;
+      this.dataChartControl.Size = new System.Drawing.Size(160, 147);
+      this.dataChartControl.TabIndex = 0;
+      // 
+      // LinechartScopeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataChartControl);
+      this.Name = "LinechartScopeView";
+      this.Size = new System.Drawing.Size(160, 147);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Charting.Data.DataChartControl dataChartControl;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.cs	(revision 1270)
@@ -0,0 +1,176 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Charting;
+using HeuristicLab.Charting.Data;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// The visual representation of a <see cref="Linechart"/>.
+  /// </summary>
+  public partial class LinechartView : ViewBase {
+    private double maxY = double.MinValue, minY = double.MaxValue;
+    private static int[] colors = new int[] {
+      182,182,255, 
+      218,255,182,
+      255,182,218, 
+      182,255,255, 
+      218,182,255, 
+      255,182,255,
+      255,182,182, 
+      255,218,182, 
+      255,255,182, 
+      182,255,182, 
+      182,255,218, 
+      182,218,255
+    };
+
+    /// <summary>
+    /// Gets or sets the Linechart object to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public Linechart Linechart {
+      get { return (Linechart)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="LinechartView"/>. 
+    /// </summary>
+    public LinechartView() {
+      InitializeComponent();
+      Caption = "Linechart View";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="LinechartView"/> with the given <paramref name="linechart"/>.
+    /// </summary>
+    /// <param name="linechart">The linechart to represent visually.</param>
+    public LinechartView(Linechart linechart)
+      : this() {
+      Linechart = linechart;
+    }
+
+    /// <summary>
+    /// Removes the event handlers from the underlying <see cref="Linechart"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      if(Linechart != null) {
+        Linechart.Values.ItemAdded -= new EventHandler<ItemIndexEventArgs>(Values_ItemAdded);
+        Linechart.Values.ItemRemoved -= new EventHandler<ItemIndexEventArgs>(Values_ItemRemoved);
+      }
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="Linechart"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      if(Linechart != null) {
+        Linechart.Values.ItemAdded += new EventHandler<ItemIndexEventArgs>(Values_ItemAdded);
+        Linechart.Values.ItemRemoved += new EventHandler<ItemIndexEventArgs>(Values_ItemRemoved);
+      }
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="UpdateControls"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      Datachart datachart = new Datachart(-50, -5000, 1000, 55000);
+      datachart.Title = "Line Chart";
+      dataChartControl.ScaleOnResize = false;
+      dataChartControl.Chart = datachart;
+      datachart.Group.Clear();
+      datachart.Group.Add(new Axis(datachart, 0, 0, AxisType.Both));
+      if(Linechart != null) {
+        datachart.UpdateEnabled = false;
+        for(int i = 0; i < Linechart.NumberOfLines; i++) {
+          int colorIndex = (i % 12)*3;
+          Color curCol = Color.FromArgb(colors[colorIndex],colors[colorIndex + 1], colors[colorIndex + 2]);
+          Pen p = new Pen(curCol);
+          SolidBrush b = new SolidBrush(curCol);
+          datachart.AddDataRow(DataRowType.Lines, p, b);
+        }
+
+        for(int i = 0; i < Linechart.Values.Count; i++) {
+          ItemList list = (ItemList)Linechart.Values[i];
+          for(int j = 0; j < list.Count; j++) {
+            double value = 0.0;
+            if (list[j] is IntData) value = (double)((IntData)list[j]).Data;
+            else value = ((DoubleData)list[j]).Data;
+            if(!double.IsInfinity(value) && !double.IsNaN(value)) {
+              if(value < minY) minY = value;
+              if(value > maxY) maxY = value;
+              datachart.AddDataPoint(j, i, value);
+            }
+          }
+        }
+        datachart.ZoomIn(-Linechart.Values.Count * 0.05, minY - (minY * 0.1), Linechart.Values.Count * 1.05, maxY * 1.05);
+        datachart.UpdateEnabled = true;
+        datachart.EnforceUpdate();
+      }
+    }
+
+    #region Values Events
+    private delegate void ItemIndexDelegate(object sender, ItemIndexEventArgs e);
+    private void Values_ItemRemoved(object sender, ItemIndexEventArgs e) {
+      if(InvokeRequired) {
+        Invoke(new ItemIndexDelegate(Values_ItemRemoved), sender, e);
+      } else {
+        Datachart datachart = dataChartControl.Chart;
+      }
+    }
+    private void Values_ItemAdded(object sender, ItemIndexEventArgs e) {
+      if(InvokeRequired) {
+        Invoke(new ItemIndexDelegate(Values_ItemAdded), sender, e);
+      } else {
+        Datachart datachart = dataChartControl.Chart;
+        ItemList list = (ItemList)e.Item;
+        datachart.UpdateEnabled = false;
+        for (int i = 0; i < list.Count; i++) {
+          double value = 0.0;
+          if (list[i] is IntData) value = (double)((IntData)list[i]).Data;
+          else value = ((DoubleData)list[i]).Data;
+          datachart.AddDataPoint(i, e.Index, value);
+          if (value < minY) minY = value;
+          if (value > maxY) maxY = value;
+        }
+        datachart.ZoomIn(-Linechart.Values.Count * 0.05, minY - (minY * 0.1), Linechart.Values.Count * 1.05, maxY * 1.05);
+        datachart.UpdateEnabled = true;
+        datachart.EnforceUpdate();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LinechartView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Log.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Log.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Log.cs	(revision 1270)
@@ -0,0 +1,118 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Represents a log object where to store a specific value that should be logged.
+  /// </summary>
+  public class Log : ItemBase, IVisualizationItem {
+    private ItemList myItems;
+    /// <summary>
+    /// Gets or sets the items of the current instance.
+    /// </summary>
+    public ItemList Items {
+      get { return myItems; }
+      set { myItems = value; }
+    }
+
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Log"/>.
+    /// </summary>
+    public Log() { }
+    /// <summary>
+    /// Initializes a new instance of <see cref="Log"/> with the given items.
+    /// </summary>
+    /// <param name="items">The list of items with which to initialize the current instance.</param>
+    public Log(ItemList items) {
+      myItems = items;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="Log"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Log clone = (Log)base.Clone(clonedObjects);
+      clone.myItems = (ItemList)Auxiliary.Clone(Items, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates an instance of <see cref="LogView"/> to represent the current instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="LogView"/>.</returns>
+    public override IView CreateView() {
+      return new LogView(this);
+    }
+
+    /// <summary>
+    /// Occurs when the items have been changed.
+    /// </summary>
+    public event EventHandler ItemsChanged;
+    /// <summary>
+    /// Fires a new <c>ItemsChanged</c> event.
+    /// </summary>
+    protected virtual void OnItemsChanged() {
+      if (ItemsChanged != null)
+        ItemsChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The items of the current instance are saved as a child node with the tag name
+    /// <c>Items</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Items", Items, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted item from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Has to be saved in a special way, see <see cref="GetXmlNode"/> for further information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the Log is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myItems = (ItemList)PersistenceManager.Restore(node.SelectSingleNode("Items"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.Designer.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Logging {
+  partial class LogView {
+    /// <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.qualityLogTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // qualityLogTextBox
+      // 
+      this.qualityLogTextBox.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.qualityLogTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.qualityLogTextBox.Location = new System.Drawing.Point(0, 0);
+      this.qualityLogTextBox.Multiline = true;
+      this.qualityLogTextBox.Name = "qualityLogTextBox";
+      this.qualityLogTextBox.ReadOnly = true;
+      this.qualityLogTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+      this.qualityLogTextBox.Size = new System.Drawing.Size(150, 150);
+      this.qualityLogTextBox.TabIndex = 0;
+      this.qualityLogTextBox.WordWrap = false;
+      // 
+      // LogView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Controls.Add(this.qualityLogTextBox);
+      this.Name = "LogView";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox qualityLogTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.cs	(revision 1270)
@@ -0,0 +1,137 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Visual representation of the <see cref="Log"/> class.
+  /// </summary>
+  public partial class LogView : ViewBase {
+    /// <summary>
+    /// Gets or sets the Log item to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public Log Log {
+      get { return (Log)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="LogView"/>.
+    /// </summary>
+    public LogView() {
+      InitializeComponent();
+      Caption = "Log View";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="LogView"/> with the given <paramref name="log"/>.
+    /// </summary>
+    /// <param name="log">The log object to represent visually.</param>
+    public LogView(Log log)
+      : this() {
+      Log = log;
+    }
+
+    /// <summary>
+    /// Removes the event handlers from the underlying <see cref="Log"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      if (Log != null) {
+        Log.Items.ItemAdded -= new EventHandler<ItemIndexEventArgs>(Items_ItemAdded);
+        Log.Items.ItemRemoved -= new EventHandler<ItemIndexEventArgs>(Items_ItemRemoved);
+      }
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="Log"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      if (Log != null) {
+        Log.Items.ItemAdded += new EventHandler<ItemIndexEventArgs>(Items_ItemAdded);
+        Log.Items.ItemRemoved += new EventHandler<ItemIndexEventArgs>(Items_ItemRemoved);
+      }
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class 
+    /// <see cref="UpdateControls"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      qualityLogTextBox.Clear();
+      if (Log == null) {
+        qualityLogTextBox.Enabled = false;
+      } else {
+        string[] lines = new string[Log.Items.Count];
+        for (int i = 0; i < Log.Items.Count; i++) {
+          lines[i] = Log.Items[i].ToString().Replace(';','\t');
+        }
+        qualityLogTextBox.Lines = lines;
+        qualityLogTextBox.Enabled = true;
+      }
+    }
+
+    #region ItemList Events
+    private delegate void IndexDelegate(int index);
+    private void Items_ItemRemoved(object sender, ItemIndexEventArgs e) {
+      RemoveItem(e.Index);
+    }
+    private void RemoveItem(int index) {
+      if (InvokeRequired)
+        Invoke(new IndexDelegate(RemoveItem), index);
+      else {
+        string[] lines = new string[qualityLogTextBox.Lines.Length - 1];
+        Array.Copy(qualityLogTextBox.Lines, 0, lines, 0, index);
+        Array.Copy(qualityLogTextBox.Lines, index + 1, lines, index, lines.Length - index);
+        qualityLogTextBox.Lines = lines;
+      }
+    }
+    private void Items_ItemAdded(object sender, ItemIndexEventArgs e) {
+      AddItem(e.Index);
+    }
+    private void AddItem(int index) {
+      if (InvokeRequired)
+        Invoke(new IndexDelegate(AddItem), index);
+      else {
+        string[] lines = new string[qualityLogTextBox.Lines.Length + 1];
+        Array.Copy(qualityLogTextBox.Lines, 0, lines, 0, index);
+        Array.Copy(qualityLogTextBox.Lines, index, lines, index + 1, qualityLogTextBox.Lines.Length - index);
+        lines[index] = Log.Items[index].ToString().Replace(';', '\t');
+        qualityLogTextBox.Lines = lines;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/LogView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Logger.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Logger.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Logger.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Logs a specified value into a specified log object.
+  /// </summary>
+  public class Logger : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Logger"/> with two variable infos 
+    /// (<c>Value</c> and <c>Log</c>).
+    /// </summary>
+    public Logger()
+      : base() {
+      AddVariableInfo(new VariableInfo("Value", "The value that should be logged", typeof(ObjectData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Log", "Log into which the values are written", typeof(Log), VariableKind.In | VariableKind.Out | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Logs a specified value into a specified log object.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      ObjectData[] values = new ObjectData[scope.SubScopes.Count];
+
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        values[i] = (ObjectData)scope.SubScopes[i].GetVariableValue<ObjectData>("Value", false).Clone();
+
+      Log log = GetVariableValue<Log>("Log", scope, false, false);
+      if (log == null) {
+        log = new Log(new ItemList());
+        IVariableInfo info = GetVariableInfo("Log");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, log));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), log));
+      }
+      ItemList row = new ItemList();
+      row.AddRange(values);
+      log.Items.Add(row);
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChart.cs	(revision 1270)
@@ -0,0 +1,158 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Class for point xy charts.
+  /// </summary>
+  public class PointXYChart : ItemBase, IVisualizationItem {
+    private ItemList myValues;
+    /// <summary>
+    /// Gets or sets the values of the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnValuesChanged"/> in the setter.</remarks>
+    public ItemList Values {
+      get { return myValues; }
+      set {
+        if (value != myValues) {
+          myValues = value;
+          OnValuesChanged();
+        }
+      }
+    }
+
+    private BoolData myConnectDots;
+    /// <summary>
+    /// Gets or sets the flag whether the dots should be connected or not.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnConnectDotsChanged"/> in the setter.</remarks>
+    public BoolData ConnectDots {
+      get { return myConnectDots; }
+      set {
+        if (value != myConnectDots) {
+          myConnectDots = value;
+          OnConnectDotsChanged();
+        }
+      }
+    }
+ 
+         
+    /// <summary>
+    /// Initializes a new instance of <see cref="PointXYChart"/> with the <c>ConnectDots</c> flag set to 
+    /// <c>true</c>.
+    /// </summary>
+    public PointXYChart() {
+      myConnectDots = new BoolData(true);
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="PointXYChart"/> with the given <paramref name="connectDots"/>
+    /// flag and the specified <paramref name="values"/>.
+    /// </summary>
+    /// <param name="connectDots">The flag whether the dots should be connected or not.</param>
+    /// <param name="values">The values with which the current instance should be initialized.</param>
+    public PointXYChart(bool connectDots,ItemList values) {
+      myConnectDots = new BoolData(connectDots);
+      myValues = values;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already clone objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="PointXYChart"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      PointXYChart clone = (PointXYChart)base.Clone(clonedObjects);
+      clone.myValues = (ItemList)Auxiliary.Clone(Values, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="PointXYChartView"/> to represent the current instance visually.
+    /// </summary>
+    /// <returns>The created view as <see cref="PointXYChartView"/>.</returns>
+    public override IView CreateView() {
+      return new PointXYChartView(this);
+    }
+
+    /// <summary>
+    /// Occurs when the values of the current instance have been changed.
+    /// </summary>
+    public event EventHandler ValuesChanged;
+    /// <summary>
+    /// Fires a <c>ValuesChanged</c> event.
+    /// </summary>
+    protected virtual void OnValuesChanged() {
+      if (ValuesChanged != null)
+        ValuesChanged(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the boolean flag has been changed.
+    /// </summary>
+    public event EventHandler ConnectDotsChanged;
+    /// <summary>
+    /// Fires a <c>ConnectDotsChanged</c> event.
+    /// </summary>
+    protected virtual void OnConnectDotsChanged() {
+      if (ConnectDotsChanged != null)
+        ConnectDotsChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The ConnectDots flag and the values of the current instance are saved as child nodes
+    /// with tag names <c>ConnectDots</c> and <c>Values</c> respectively.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("ConnectDots",ConnectDots,document,persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Values", Values, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted item from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Has to be saved in a special way, see <see cref="GetXmlNode"/> for further information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the PointXYChart is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myConnectDots = (BoolData)PersistenceManager.Restore(node.SelectSingleNode("ConnectDots"), restoredObjects);
+      myValues = (ItemList)PersistenceManager.Restore(node.SelectSingleNode("Values"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartInjector.cs	(revision 1270)
@@ -0,0 +1,73 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Injects a new PointXYChart variable into the given scope.
+  /// </summary>
+  class PointXYChartInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PointXYChartInjector"/> with three variable infos
+    /// (<c>ConnectDots</c>, <c>Values</c> and <c>PointXYChart</c>).
+    /// </summary>
+    public PointXYChartInjector() {
+      VariableInfo connectDotsInfo = new VariableInfo("ConnectDots", "Number of lines the linechart consists of", typeof(BoolData), VariableKind.In);
+      connectDotsInfo.Local = true;
+      AddVariableInfo(connectDotsInfo);
+      AddVariable(new Variable("ConnectDots", new BoolData(true)));
+      AddVariableInfo(new VariableInfo("Values", "Item list holding the values of the pointXYchart", typeof(ItemList), VariableKind.In));
+      AddVariableInfo(new VariableInfo("PointXYchart", "Object representing a pointXYchart", typeof(PointXYChart), VariableKind.New | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Injects a new PointXYChart variable into the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the variable.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      bool connectDots = GetVariableValue<BoolData>("ConnectDots", scope, true).Data;
+      ItemList values = GetVariableValue<ItemList>("Values", scope, true);
+      PointXYChart pointXYchart = GetVariableValue<PointXYChart>("PointXYchart", scope, false, false);
+      if (pointXYchart == null) {
+        pointXYchart = new PointXYChart(connectDots, values);
+        IVariableInfo info = GetVariableInfo("PointXYchart");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, pointXYchart));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), pointXYchart));
+      } else
+        pointXYchart.Values = values;
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.Designer.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Logging {
+  partial class PointXYChartView {
+    /// <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.dataChartControl = new HeuristicLab.Charting.Data.DataChartControl();
+      this.SuspendLayout();
+      // 
+      // dataChartControl
+      // 
+      this.dataChartControl.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.dataChartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.dataChartControl.Chart = null;
+      this.dataChartControl.Location = new System.Drawing.Point(0, 0);
+      this.dataChartControl.Name = "dataChartControl";
+      this.dataChartControl.ScaleOnResize = true;
+      this.dataChartControl.Size = new System.Drawing.Size(160, 147);
+      this.dataChartControl.TabIndex = 0;
+      // 
+      // LinechartScopeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.dataChartControl);
+      this.Name = "LinechartScopeView";
+      this.Size = new System.Drawing.Size(160, 147);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Charting.Data.DataChartControl dataChartControl;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.cs	(revision 1270)
@@ -0,0 +1,174 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Charting;
+using HeuristicLab.Charting.Data;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Visual representation of a <see cref="PointXYChart"/>.
+  /// </summary>
+  public partial class PointXYChartView : ViewBase {
+    private static int[] colors = new int[] {
+      182,182,255, 
+      218,255,182,
+      255,182,218, 
+      182,255,255, 
+      218,182,255, 
+      255,182,255,
+      255,182,182, 
+      255,218,182, 
+      255,255,182, 
+      182,255,182, 
+      182,255,218, 
+      182,218,255
+    };
+
+    /// <summary>
+    /// Gets or sets the chart to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public PointXYChart PointXYChart {
+      get { return (PointXYChart)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PointXYChartView"/>.
+    /// </summary>
+    public PointXYChartView() {
+      InitializeComponent();
+      Caption = "PointXYChart View";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="PointXYChartView"/> with the given 
+    /// <paramref name="pointXYChart"/>.
+    /// </summary>
+    /// <param name="pointXYChart">The chart to represent visually.</param>
+    public PointXYChartView(PointXYChart pointXYChart)
+      : this() {
+      PointXYChart = pointXYChart;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="PointXYChart"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      if (PointXYChart != null) {
+        PointXYChart.Values.ItemAdded -= new EventHandler<ItemIndexEventArgs>(Values_ItemAdded);
+        PointXYChart.Values.ItemRemoved -= new EventHandler<ItemIndexEventArgs>(Values_ItemRemoved);
+      }
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IOperatorGraph"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      if (PointXYChart != null) {
+        PointXYChart.Values.ItemAdded += new EventHandler<ItemIndexEventArgs>(Values_ItemAdded);
+        PointXYChart.Values.ItemRemoved += new EventHandler<ItemIndexEventArgs>(Values_ItemRemoved);
+      }
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      Datachart datachart = new Datachart(-50, -5000, 1000, 55000);
+      datachart.Title = "Point X/Y Chart";
+      dataChartControl.ScaleOnResize = false;
+      dataChartControl.Chart = datachart;
+      datachart.Group.Clear();
+      datachart.Group.Add(new Axis(datachart, 0, 0, AxisType.Both));
+      double maxY = double.MinValue, minY = double.MaxValue;
+      double maxX = double.MinValue, minX = double.MaxValue;
+      if (PointXYChart != null) {
+        datachart.UpdateEnabled = false;
+        for (int i = 0; i < PointXYChart.Values.Count; i++) {
+          int colorIndex = (i % 12) * 3;
+          Color curCol = Color.FromArgb(colors[colorIndex], colors[colorIndex + 1], colors[colorIndex + 2]);
+          Pen p = new Pen(curCol);
+          SolidBrush b = new SolidBrush(curCol);
+          datachart.AddDataRow(PointXYChart.ConnectDots.Data ? DataRowType.Lines : DataRowType.Points, p, b);
+        }
+
+        for (int i = 0; i < PointXYChart.Values.Count; i++) {
+          ItemList list = (ItemList) PointXYChart.Values[i];
+          for (int j = 0; j < list.Count; j++) {
+           ItemList value = ((ItemList)list[j]);
+           double x = ((DoubleData)value[0]).Data;
+           double y = ((DoubleData)value[1]).Data;
+            if (!double.IsInfinity(x) && !double.IsNaN(x) && !double.IsInfinity(y) && !double.IsNaN(y)) {
+              if (x < minX) minX = x;
+              if (x > maxX) maxX = x;
+              if (y < minY) minY = y;
+              if (y > maxY) maxY = y;
+
+              datachart.AddDataPoint(i, x, y);                                                         
+            }
+          }
+        }
+        datachart.ZoomIn(minX - (Math.Abs(maxX - minX) * 0.1), minY - (Math.Abs(maxY -minY) * 0.1), maxX + (Math.Abs(maxX - minX) * 0.1), maxY + (Math.Abs(maxY - minY) * 0.1));
+        datachart.UpdateEnabled = true;
+        datachart.EnforceUpdate();
+      }
+    }
+
+    #region Values Events
+    private delegate void ItemIndexDelegate(object sender, ItemIndexEventArgs e);
+    private void Values_ItemRemoved(object sender, ItemIndexEventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new ItemIndexDelegate(Values_ItemRemoved), sender, e);
+      } else {
+        Datachart datachart = dataChartControl.Chart;
+      }
+    }
+    private void Values_ItemAdded(object sender, ItemIndexEventArgs e) {
+      if (InvokeRequired) {
+        Invoke(new ItemIndexDelegate(Values_ItemAdded), sender, e);
+      } else {
+        //Datachart datachart = dataChartControl.Chart;
+        //ItemList list = (ItemList)e.Item;
+        //datachart.UpdateEnabled = false;
+        //for (int i = 0; i < list.Count; i++)
+        //  datachart.AddDataPoint(i, e.Index, ((DoubleArrayData)list[i]).Data[0]);
+        //datachart.UpdateEnabled = true;
+        //datachart.EnforceUpdate();
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/PointXYChartView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Logging")]
+[assembly: AssemblyDescription("HeuristicLab logging classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("f9718239-4d37-4410-84d7-9c3468b01cbf")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/QualityLogger.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/QualityLogger.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Logging/QualityLogger.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Logging {
+  /// <summary>
+  /// Logs the quality (best, average, worst) of a solution.
+  /// </summary>
+  public class QualityLogger : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="QualityLogger"/> with two variable infos
+    /// (<c>Quality</c> and <c>QualityLog</c>).
+    /// </summary>
+    public QualityLogger()
+      : base() {
+      AddVariableInfo(new VariableInfo("Quality", "Quality value of a solution", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("QualityLog", "Log of best, average and worst quality values", typeof(Log), VariableKind.In | VariableKind.Out | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Logs the quality (best, average and worst) of a solution.
+    /// </summary>
+    /// <param name="scope">The current scope where to log the quality.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      double[] qualities = new double[scope.SubScopes.Count];
+
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        qualities[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Quality", false).Data;
+
+      double min = qualities[0];
+      double max = qualities[0];
+      double average = qualities[0];
+      for (int i = 1; i < qualities.Length; i++) {
+        if (qualities[i] < min) min = qualities[i];
+        if (qualities[i] > max) max = qualities[i];
+        average += qualities[i];
+      }
+      average = average / qualities.Length;
+
+      Log log = GetVariableValue<Log>("QualityLog", scope, false, false);
+      if (log == null) {
+        log = new Log(new ItemList());
+        IVariableInfo info = GetVariableInfo("QualityLog");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, log));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), log));
+      }
+      log.Items.Add(new DoubleArrayData(new double[] { min, average, max } ));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/DoubleRangeVariableInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/DoubleRangeVariableInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/DoubleRangeVariableInjector.cs	(revision 1270)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Operators.Metaprogramming {
+  /// <summary>
+  /// Injects a double variable into the current scope being in a specified range.
+  /// </summary>
+  public class DoubleRangeVariableInjector: OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleRangeVariableInjector"/> with five variable infos
+    /// (<c>VariableInjectos</c>, <c>VariableName</c>, <c>Min</c>, <c>Max</c> and <c>StepSize</c>).
+    /// </summary>
+    public DoubleRangeVariableInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("VariableInjector", "The combined operator that should hold the generated variable injector", typeof(CombinedOperator), VariableKind.New));
+      AddVariableInfo(new VariableInfo("VariableName", "Name of the variable that should be injected", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Min", "Minimal value of the injected variable", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Max", "Maximal value of the injected variable", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("StepSize", "The difference of the value of the variable from one injector to the next", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Injects a new double variable in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the variable.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      double min = GetVariableValue<DoubleData>("Min", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Max", scope, true).Data;
+      double stepSize = GetVariableValue<DoubleData>("StepSize", scope, true).Data;
+      string variableName = GetVariableValue<StringData>("VariableName", scope, true).Data;
+
+      int nSubScopes = (int)((max - min) / stepSize);
+      for(int i = 0; i < nSubScopes; i++) {
+        double value = min+i*stepSize;
+        Scope subScope = new Scope(variableName + "<-" + value);
+
+        CombinedOperator combOp = new CombinedOperator();
+        VariableInjector varInjector = new VariableInjector();
+        varInjector.AddVariable(new Variable(variableName, new DoubleData(value)));
+
+        combOp.OperatorGraph.AddOperator(varInjector);
+        combOp.OperatorGraph.InitialOperator = varInjector;
+
+        subScope.AddVariable(new Variable(scope.TranslateName("VariableInjector"), combOp));
+        scope.AddSubScope(subScope);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/HeuristicLab.Operators.Metaprogramming.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/HeuristicLab.Operators.Metaprogramming.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/HeuristicLab.Operators.Metaprogramming.csproj	(revision 1270)
@@ -0,0 +1,110 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.21022</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F18FD554-19B9-460C-9A49-4AA8D7245727}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Operators.Metaprogramming</RootNamespace>
+    <AssemblyName>HeuristicLab.Operators.Metaprogramming-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Operators.Metaprogramming-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <Compile Include="IntRangeVariableInjector.cs" />
+    <Compile Include="PermutationInjector.cs" />
+    <Compile Include="DoubleRangeVariableInjector.cs" />
+    <Compile Include="HeuristicLabOperatorsMetaprogrammingPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SequentialComposer.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/HeuristicLabOperatorsMetaprogrammingPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/HeuristicLabOperatorsMetaprogrammingPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/HeuristicLabOperatorsMetaprogrammingPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Operators.Metaprogramming {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Operators.Metaprogramming plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Operators.Metaprogramming-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Operators.Metaprogramming-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabOperatorsMetaprogrammingPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/IntRangeVariableInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/IntRangeVariableInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/IntRangeVariableInjector.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Operators.Metaprogramming {
+  /// <summary>
+  /// Injects a new integer variable into the current scope being in a specified range.
+  /// </summary>
+  public class IntRangeVariableInjector: OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="IntRangeVariableInjector"/> with four variable infos
+    /// (<c>VariableInjector</c>, <c>VariableName</c>, <c>Min</c> and <c>Max</c>).
+    /// </summary>
+    public IntRangeVariableInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("VariableInjector", "The combined operator that should hold the generated variable injector", typeof(CombinedOperator), VariableKind.New));
+      AddVariableInfo(new VariableInfo("VariableName", "Name of the variable that should be injected", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Min", "Minimal value of the injected variable", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Max", "Maximal value of the injected variable", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Injects a new integer variable in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the variable.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int min = GetVariableValue<IntData>("Min", scope, true).Data;
+      int max = GetVariableValue<IntData>("Max", scope, true).Data;
+      string variableName = GetVariableValue<StringData>("VariableName", scope, true).Data;
+
+      for(int i = min; i < max; i++) {
+        Scope subScope = new Scope(variableName + "<-" + i);
+
+        CombinedOperator combOp = new CombinedOperator();
+        VariableInjector varInjector = new VariableInjector();
+        varInjector.AddVariable(new Variable(variableName, new IntData(i)));
+
+        combOp.OperatorGraph.AddOperator(varInjector);
+        combOp.OperatorGraph.InitialOperator = varInjector;
+
+        subScope.AddVariable(new Variable(scope.TranslateName("VariableInjector"), combOp));
+        scope.AddSubScope(subScope);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/PermutationInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/PermutationInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/PermutationInjector.cs	(revision 1270)
@@ -0,0 +1,101 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Operators.Metaprogramming {
+  /// <summary>
+  /// Injects a new permutation variable in the given scope. The number of items contained
+  /// are in a predifined range.
+  /// </summary>
+  public class PermutationInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PermutationInjector"/> with five variable infos
+    /// (<c>VariableInjector</c>, <c>VariableName</c>, <c>Items</c>, <c>Min</c> and <c>Max</c>).
+    /// </summary>
+    public PermutationInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("VariableInjector", "The combined operator that should hold the generated variable injector", typeof(CombinedOperator), VariableKind.New));
+      AddVariableInfo(new VariableInfo("VariableName", "Name of the variable that should be injected", typeof(StringData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Items", "Set of items that can be part of the permutation", typeof(ItemList), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Min", "Minimal number of items to inject", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Max", "Maximal number of items to inject", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Injects a new permutation variable into the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the permutation list.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int min = GetVariableValue<IntData>("Min", scope, true).Data;
+      int max = GetVariableValue<IntData>("Max", scope, true).Data;
+      string variableName = GetVariableValue<StringData>("VariableName", scope, true).Data;
+      ItemList allItems = GetVariableValue<ItemList>("Items", scope, true);
+      List<IItem> xs = new List<IItem>(allItems);
+      List<List<IItem>> permutations = CalcPermutations(xs, new List<IItem>(), min, max);
+
+      for(int i = 0; i < permutations.Count; i++) {
+        string scopeName = "";
+        foreach(IItem x in permutations[i]) scopeName += x.ToString() + ";";
+        Scope subScope = new Scope(scopeName.TrimEnd(';'));
+        CombinedOperator combOp = new CombinedOperator();
+        VariableInjector varInjector = new VariableInjector();
+        ItemList permutation = new ItemList();
+        foreach(IItem item in permutations[i]) permutation.Add(item);
+        varInjector.AddVariable(new Variable(variableName, permutation));
+
+        combOp.OperatorGraph.AddOperator(varInjector);
+        combOp.OperatorGraph.InitialOperator = varInjector;
+
+        subScope.AddVariable(new Variable(scope.TranslateName("VariableInjector"), combOp));
+        scope.AddSubScope(subScope);
+      }
+      return null;
+    }
+
+    private List<List<IItem>> CalcPermutations(List<IItem> allItems, List<IItem> prefix, int min, int max) {
+      List<List<IItem>> result = new List<List<IItem>>();
+      if(prefix.Count >= max) return result;
+      if(prefix.Count >= min) result.Add(new List<IItem>(prefix));
+      int count = allItems.Count;
+      for(int i = 0; i < count; i++) {
+        IItem x = allItems[0];
+        allItems.RemoveAt(0);
+        prefix.Add(x);
+        result.AddRange(CalcPermutations(new List<IItem>(allItems), prefix, min, max));
+        prefix.RemoveAt(prefix.Count-1);
+      }
+
+      return result;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Operators.Metaprogramming")]
+[assembly: AssemblyDescription("HeuristicLab metaprogramming operator classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("72c5cb1e-abed-4a66-b520-8a6b6ad9fba1")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/SequentialComposer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/SequentialComposer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Metaprogramming/SequentialComposer.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Operators.Metaprogramming {
+  /// <summary>
+  /// Composes a sequence of <see cref="IOperatorGraph"/>s and injects it into the given scope.
+  /// </summary>
+  public class SequentialComposer: OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "TASK."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SequentialComposer"/> with two variable infos
+    /// (<c>CombineOperator</c> and <c>OperatorNames</c>).
+    /// </summary>
+    public SequentialComposer()
+      : base() {
+      AddVariableInfo(new VariableInfo("CombinedOperator", "The combined operator that should hold the resulting sequence of IOperatorGraphs", typeof(CombinedOperator), VariableKind.New));
+      AddVariableInfo(new VariableInfo("OperatorNames", "Names of the operators that should be composed to a sequence", typeof(ItemList<StringData>), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Composes a sequence <see cref="IOperatorGraph"/>s and injects it into the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the created sequence of operators.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      ItemList<StringData> parts = GetVariableValue<ItemList<StringData>>("OperatorNames", scope, true);
+      CombinedOperator combOp = new CombinedOperator();
+      SequentialProcessor seq = new SequentialProcessor();
+
+      foreach(StringData opName in parts) {
+        CombinedOperator subOp = scope.GetVariableValue<CombinedOperator>(opName.Data, true);
+        subOp.Name = opName.Data;
+        combOp.OperatorGraph.AddOperator(subOp);
+        seq.AddSubOperator(subOp);
+      }
+      combOp.OperatorGraph.AddOperator(seq);
+      combOp.OperatorGraph.InitialOperator = seq;
+
+      scope.AddVariable(new Variable(scope.TranslateName("CombinedOperator"), combOp));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/HeuristicLab.Operators.Programmable.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/HeuristicLab.Operators.Programmable.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/HeuristicLab.Operators.Programmable.csproj	(revision 1270)
@@ -0,0 +1,124 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E3CCBFC6-900C-41B6-AFB8-6646DB097435}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Operators.Programmable</RootNamespace>
+    <AssemblyName>HeuristicLab.Operators.Programmable-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Operators.Programmable-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Operators.Programmable-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabOperatorsProgrammablePlugin.cs" />
+    <Compile Include="ProgrammableOperator.cs" />
+    <Compile Include="ProgrammableOperatorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ProgrammableOperatorView.Designer.cs">
+      <DependentUpon>ProgrammableOperatorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ProgrammableOperatorView.resx">
+      <DependentUpon>ProgrammableOperatorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/HeuristicLabOperatorsProgrammablePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/HeuristicLabOperatorsProgrammablePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/HeuristicLabOperatorsProgrammablePlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Operators.Programmable {
+  [ClassInfo(Name = "HeuristicLab.Operators.Programmable-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Operators.Programmable-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabOperatorsProgrammablePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperator.cs	(revision 1270)
@@ -0,0 +1,222 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using Microsoft.CSharp;
+using System.Text.RegularExpressions;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Data.Linq;
+
+namespace HeuristicLab.Operators.Programmable {
+  public class ProgrammableOperator : OperatorBase {
+    private MethodInfo executeMethod;
+
+    private string myDescription;
+    public override string Description {
+      get { return myDescription; }
+    }
+    private string myCode;
+    public string Code {
+      get { return myCode; }
+      set {
+        if (value != myCode) {
+          myCode = value;
+          executeMethod = null;
+          OnCodeChanged();
+        }
+      }
+    }
+
+    private object syncRoot = new object();
+
+    public ProgrammableOperator() {
+      myCode = "Result.Data = true;";
+      myDescription = "An operator that can be programmed for arbitrary needs.";
+      AddVariableInfo(new VariableInfo("Result", "A computed variable", typeof(BoolData), VariableKind.New | VariableKind.Out));
+      executeMethod = null;
+    }
+
+    public void SetDescription(string description) {
+      if (description == null)
+        throw new NullReferenceException("description must not be null");
+
+      if (description != myDescription) {
+        myDescription = description;
+        OnDescriptionChanged();
+      }
+    }
+
+    public virtual void Compile() {
+      CodeNamespace ns = new CodeNamespace("HeuristicLab.Operators.Programmable.CustomOperators");
+      CodeTypeDeclaration typeDecl = new CodeTypeDeclaration("Operator");
+      typeDecl.IsClass = true;
+      typeDecl.TypeAttributes = TypeAttributes.Public;
+
+      CodeMemberMethod method = new CodeMemberMethod();
+      method.Name = "Execute";
+      method.ReturnType = new CodeTypeReference(typeof(IOperation));
+      method.Attributes = MemberAttributes.Public | MemberAttributes.Static;
+      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IOperator), "op"));
+      method.Parameters.Add(new CodeParameterDeclarationExpression(typeof(IScope), "scope"));
+      foreach (IVariableInfo info in VariableInfos)
+        method.Parameters.Add(new CodeParameterDeclarationExpression(info.DataType, info.FormalName));
+      string code = myCode + "\r\n" + "return null;";
+      method.Statements.Add(new CodeSnippetStatement(code));
+      typeDecl.Members.Add(method);
+
+      ns.Types.Add(typeDecl);
+      ns.Imports.Add(new CodeNamespaceImport("System"));
+      ns.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));
+      ns.Imports.Add(new CodeNamespaceImport("System.Text"));
+      ns.Imports.Add(new CodeNamespaceImport("System.Linq"));
+      ns.Imports.Add(new CodeNamespaceImport("System.Data.Linq"));
+      ns.Imports.Add(new CodeNamespaceImport("HeuristicLab.Core"));
+      foreach (IVariableInfo variableInfo in VariableInfos)
+        ns.Imports.Add(new CodeNamespaceImport(variableInfo.DataType.Namespace));
+
+      CodeCompileUnit unit = new CodeCompileUnit();
+      unit.Namespaces.Add(ns);
+      CompilerParameters parameters = new CompilerParameters();
+      parameters.GenerateExecutable = false;
+      parameters.GenerateInMemory = true;
+      parameters.IncludeDebugInformation = false;
+      Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
+      foreach (Assembly loadedAssembly in loadedAssemblies)
+        parameters.ReferencedAssemblies.Add(loadedAssembly.Location);
+      parameters.ReferencedAssemblies.Add(typeof(Enumerable).Assembly.Location); // add reference to version 3.5 of System.dll
+      parameters.ReferencedAssemblies.Add(typeof(DataContext).Assembly.Location); // add reference System.Data.Linq.Dll
+      CodeDomProvider provider = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });  // support C# 3.0 syntax
+      CompilerResults results = provider.CompileAssemblyFromDom(parameters, unit);
+
+      executeMethod = null;
+      if (results.Errors.HasErrors) {
+        StringWriter writer = new StringWriter();
+        CodeGeneratorOptions options = new CodeGeneratorOptions();
+        options.BlankLinesBetweenMembers = false;
+        options.ElseOnClosing = true;
+        options.IndentString = "  ";
+        provider.GenerateCodeFromCompileUnit(unit, writer, options);
+        writer.Flush();
+        string[] source = writer.ToString().Split(new string[] { "\r\n" }, StringSplitOptions.None);
+        StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < source.Length; i++)
+          builder.AppendLine((i + 3).ToString("###") + "     " + source[i]);
+        builder.AppendLine();
+        builder.AppendLine();
+        builder.AppendLine();
+        foreach (CompilerError error in results.Errors) {
+          builder.Append("Line " + error.Line.ToString());
+          builder.Append(", Column " + error.Column.ToString());
+          builder.AppendLine(": " + error.ErrorText);
+        }
+        throw new Exception("Compile Errors:\n\n" + builder.ToString());
+      } else {
+        Assembly assembly = results.CompiledAssembly;
+        Type[] types = assembly.GetTypes();
+        executeMethod = types[0].GetMethod("Execute");
+      }
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ProgrammableOperator clone = (ProgrammableOperator)base.Clone(clonedObjects);
+      clone.myDescription = Description;
+      clone.myCode = Code;
+      clone.executeMethod = executeMethod;
+      return clone;
+    }
+
+    public override IOperation Apply(IScope scope) {
+      lock (syncRoot) {
+        if (executeMethod == null) {
+          Compile();
+        }
+      }
+
+      // collect parameters
+      object[] parameters = new object[VariableInfos.Count + 2];
+      parameters[0] = this;
+      parameters[1] = scope;
+      int i = 2;
+      foreach (IVariableInfo info in VariableInfos) {
+        if ((info.Kind & VariableKind.New) == VariableKind.New) {
+          parameters[i] = GetVariableValue(info.FormalName, scope, false, false);
+          if (parameters[i] == null) {
+            IItem value = (IItem)Activator.CreateInstance(info.DataType);
+            if (info.Local) {
+              AddVariable(new Variable(info.ActualName, value));
+            } else {
+              scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), value));
+            }
+            parameters[i] = value;
+          }
+        } else
+          parameters[i] = GetVariableValue(info.FormalName, scope, true);
+        i++;
+      }
+
+      return (IOperation)executeMethod.Invoke(null, parameters);
+    }
+
+    public override IView CreateView() {
+      return new ProgrammableOperatorView(this);
+    }
+
+    public event EventHandler DescriptionChanged;
+    protected virtual void OnDescriptionChanged() {
+      if (DescriptionChanged != null)
+        DescriptionChanged(this, new EventArgs());
+    }
+    public event EventHandler CodeChanged;
+    protected virtual void OnCodeChanged() {
+      if (CodeChanged != null)
+        CodeChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode descriptionNode = document.CreateNode(XmlNodeType.Element, "Description", null);
+      descriptionNode.InnerText = myDescription;
+      node.AppendChild(descriptionNode);
+      XmlNode codeNode = document.CreateNode(XmlNodeType.Element, "Code", null);
+      codeNode.InnerText = myCode;
+      node.AppendChild(codeNode);
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode descriptionNode = node.SelectSingleNode("Description");
+      myDescription = descriptionNode.InnerText;
+      XmlNode codeNode = node.SelectSingleNode("Code");
+      myCode = codeNode.InnerText;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.Designer.cs	(revision 1270)
@@ -0,0 +1,290 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators.Programmable {
+  partial class ProgrammableOperatorView {
+    /// <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() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgrammableOperatorView));
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.codeTabPage = new System.Windows.Forms.TabPage();
+      this.infoTextBox = new System.Windows.Forms.TextBox();
+      this.compileButton = new System.Windows.Forms.Button();
+      this.codeTextBox = new System.Windows.Forms.TextBox();
+      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
+      this.removeVariableInfoButton = new System.Windows.Forms.Button();
+      this.addVariableInfoButton = new System.Windows.Forms.Button();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.variablesTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
+      this.constraintsTabPage = new System.Windows.Forms.TabPage();
+      this.constrainedItemBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl.SuspendLayout();
+      this.codeTabPage.SuspendLayout();
+      this.variableInfosTabPage.SuspendLayout();
+      this.variablesTabPage.SuspendLayout();
+      this.constraintsTabPage.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.codeTabPage);
+      this.tabControl.Controls.Add(this.variableInfosTabPage);
+      this.tabControl.Controls.Add(this.variablesTabPage);
+      this.tabControl.Controls.Add(this.constraintsTabPage);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(435, 351);
+      this.tabControl.TabIndex = 0;
+      // 
+      // codeTabPage
+      // 
+      this.codeTabPage.Controls.Add(this.infoTextBox);
+      this.codeTabPage.Controls.Add(this.compileButton);
+      this.codeTabPage.Controls.Add(this.codeTextBox);
+      this.codeTabPage.Location = new System.Drawing.Point(4, 22);
+      this.codeTabPage.Name = "codeTabPage";
+      this.codeTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.codeTabPage.Size = new System.Drawing.Size(427, 325);
+      this.codeTabPage.TabIndex = 5;
+      this.codeTabPage.Text = "Code";
+      this.codeTabPage.UseVisualStyleBackColor = true;
+      // 
+      // infoTextBox
+      // 
+      this.infoTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.infoTextBox.BackColor = System.Drawing.SystemColors.ControlLight;
+      this.infoTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.infoTextBox.Location = new System.Drawing.Point(6, 253);
+      this.infoTextBox.Multiline = true;
+      this.infoTextBox.Name = "infoTextBox";
+      this.infoTextBox.ReadOnly = true;
+      this.infoTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.infoTextBox.Size = new System.Drawing.Size(334, 66);
+      this.infoTextBox.TabIndex = 2;
+      this.infoTextBox.Text = resources.GetString("infoTextBox.Text");
+      // 
+      // compileButton
+      // 
+      this.compileButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.compileButton.Location = new System.Drawing.Point(346, 296);
+      this.compileButton.Name = "compileButton";
+      this.compileButton.Size = new System.Drawing.Size(75, 23);
+      this.compileButton.TabIndex = 1;
+      this.compileButton.Text = "&Compile";
+      this.compileButton.UseVisualStyleBackColor = true;
+      this.compileButton.Click += new System.EventHandler(this.compileButton_Click);
+      // 
+      // codeTextBox
+      // 
+      this.codeTextBox.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.codeTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.codeTextBox.Location = new System.Drawing.Point(3, 3);
+      this.codeTextBox.Multiline = true;
+      this.codeTextBox.Name = "codeTextBox";
+      this.codeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.codeTextBox.Size = new System.Drawing.Size(421, 244);
+      this.codeTextBox.TabIndex = 0;
+      this.codeTextBox.Validated += new System.EventHandler(this.codeTextBox_Validated);
+      // 
+      // variableInfosTabPage
+      // 
+      this.variableInfosTabPage.Controls.Add(this.removeVariableInfoButton);
+      this.variableInfosTabPage.Controls.Add(this.addVariableInfoButton);
+      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfosTabPage.Name = "variableInfosTabPage";
+      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfosTabPage.Size = new System.Drawing.Size(427, 325);
+      this.variableInfosTabPage.TabIndex = 1;
+      this.variableInfosTabPage.Text = "Variable Infos";
+      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      // 
+      // removeVariableInfoButton
+      // 
+      this.removeVariableInfoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeVariableInfoButton.Enabled = false;
+      this.removeVariableInfoButton.Location = new System.Drawing.Point(84, 299);
+      this.removeVariableInfoButton.Name = "removeVariableInfoButton";
+      this.removeVariableInfoButton.Size = new System.Drawing.Size(75, 23);
+      this.removeVariableInfoButton.TabIndex = 2;
+      this.removeVariableInfoButton.Text = "&Remove";
+      this.removeVariableInfoButton.UseVisualStyleBackColor = true;
+      this.removeVariableInfoButton.Click += new System.EventHandler(this.removeVariableInfoButton_Click);
+      // 
+      // addVariableInfoButton
+      // 
+      this.addVariableInfoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addVariableInfoButton.Location = new System.Drawing.Point(3, 299);
+      this.addVariableInfoButton.Name = "addVariableInfoButton";
+      this.addVariableInfoButton.Size = new System.Drawing.Size(75, 23);
+      this.addVariableInfoButton.TabIndex = 1;
+      this.addVariableInfoButton.Text = "&Add...";
+      this.addVariableInfoButton.UseVisualStyleBackColor = true;
+      this.addVariableInfoButton.Click += new System.EventHandler(this.addVariableInfoButton_Click);
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.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.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(421, 290);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      this.operatorBaseVariableInfosView.SelectedVariableInfosChanged += new System.EventHandler(this.operatorBaseVariableInfosView_SelectedVariableInfosChanged);
+      // 
+      // variablesTabPage
+      // 
+      this.variablesTabPage.Controls.Add(this.operatorBaseVariablesView);
+      this.variablesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variablesTabPage.Name = "variablesTabPage";
+      this.variablesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variablesTabPage.Size = new System.Drawing.Size(427, 325);
+      this.variablesTabPage.TabIndex = 2;
+      this.variablesTabPage.Text = "Local Variables";
+      this.variablesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariablesView
+      // 
+      this.operatorBaseVariablesView.Caption = "Operator";
+      this.operatorBaseVariablesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariablesView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariablesView.Name = "operatorBaseVariablesView";
+      this.operatorBaseVariablesView.Operator = null;
+      this.operatorBaseVariablesView.Size = new System.Drawing.Size(421, 319);
+      this.operatorBaseVariablesView.TabIndex = 0;
+      // 
+      // constraintsTabPage
+      // 
+      this.constraintsTabPage.Controls.Add(this.constrainedItemBaseView);
+      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(427, 325);
+      this.constraintsTabPage.TabIndex = 3;
+      this.constraintsTabPage.Text = "Constraints";
+      this.constraintsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // constrainedItemBaseView
+      // 
+      this.constrainedItemBaseView.Caption = "Constrained Item";
+      this.constrainedItemBaseView.ConstrainedItem = null;
+      this.constrainedItemBaseView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constrainedItemBaseView.Location = new System.Drawing.Point(3, 3);
+      this.constrainedItemBaseView.Name = "constrainedItemBaseView";
+      this.constrainedItemBaseView.Size = new System.Drawing.Size(421, 319);
+      this.constrainedItemBaseView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.descriptionTextBox);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(427, 325);
+      this.descriptionTabPage.TabIndex = 4;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(3, 3);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(421, 319);
+      this.descriptionTextBox.TabIndex = 0;
+      this.descriptionTextBox.Validated += new System.EventHandler(this.descriptionTextBox_Validated);
+      // 
+      // ProgrammableOperatorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "ProgrammableOperatorView";
+      this.Size = new System.Drawing.Size(435, 351);
+      this.tabControl.ResumeLayout(false);
+      this.codeTabPage.ResumeLayout(false);
+      this.codeTabPage.PerformLayout();
+      this.variableInfosTabPage.ResumeLayout(false);
+      this.variablesTabPage.ResumeLayout(false);
+      this.constraintsTabPage.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.descriptionTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage codeTabPage;
+    private System.Windows.Forms.TextBox codeTextBox;
+    private System.Windows.Forms.TabPage variableInfosTabPage;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private System.Windows.Forms.TabPage variablesTabPage;
+    private HeuristicLab.Core.OperatorBaseVariablesView operatorBaseVariablesView;
+    private System.Windows.Forms.TabPage constraintsTabPage;
+    private HeuristicLab.Core.ConstrainedItemBaseView constrainedItemBaseView;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private System.Windows.Forms.Button compileButton;
+    private System.Windows.Forms.Button removeVariableInfoButton;
+    private System.Windows.Forms.Button addVariableInfoButton;
+    private System.Windows.Forms.TextBox infoTextBox;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.cs	(revision 1270)
@@ -0,0 +1,134 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Operators.Programmable {
+  public partial class ProgrammableOperatorView : ViewBase {
+    public ProgrammableOperator ProgrammableOperator {
+      get { return (ProgrammableOperator)Item; }
+      set { base.Item = value; }
+    }
+
+    public ProgrammableOperatorView() {
+      InitializeComponent();
+    }
+    public ProgrammableOperatorView(ProgrammableOperator programmableOperator)
+      : this() {
+      ProgrammableOperator = programmableOperator;
+    }
+
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseVariablesView.Operator = null;
+      constrainedItemBaseView.ConstrainedItem = null;
+      ProgrammableOperator.CodeChanged -= new EventHandler(ProgrammableOperator_CodeChanged);
+      ProgrammableOperator.DescriptionChanged -= new EventHandler(ProgrammableOperator_DescriptionChanged);
+      base.RemoveItemEvents();
+    }
+
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = ProgrammableOperator;
+      operatorBaseVariablesView.Operator = ProgrammableOperator;
+      constrainedItemBaseView.ConstrainedItem = ProgrammableOperator;
+      ProgrammableOperator.CodeChanged += new EventHandler(ProgrammableOperator_CodeChanged);
+      ProgrammableOperator.DescriptionChanged += new EventHandler(ProgrammableOperator_DescriptionChanged);
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ProgrammableOperator == null) {
+        codeTextBox.Text = "";
+        codeTextBox.Enabled = false;
+        addVariableInfoButton.Enabled = false;
+        removeVariableInfoButton.Enabled = false;
+        descriptionTextBox.Text = "";
+        descriptionTextBox.Enabled = false;
+      } else {
+        codeTextBox.Text = ProgrammableOperator.Code;
+        codeTextBox.Enabled = true;
+        addVariableInfoButton.Enabled = true;
+        removeVariableInfoButton.Enabled = operatorBaseVariableInfosView.SelectedVariableInfos.Count > 0;
+        descriptionTextBox.Text = ProgrammableOperator.Description;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+
+    private void operatorBaseVariableInfosView_SelectedVariableInfosChanged(object sender, EventArgs e) {
+      removeVariableInfoButton.Enabled = operatorBaseVariableInfosView.SelectedVariableInfos.Count > 0;
+    }
+
+    #region Validated Events
+    private void codeTextBox_Validated(object sender, EventArgs e) {
+      ProgrammableOperator.Code = codeTextBox.Text;
+    }
+    private void descriptionTextBox_Validated(object sender, EventArgs e) {
+      ProgrammableOperator.SetDescription(descriptionTextBox.Text);
+    }
+    #endregion
+
+    #region Click Events
+    private void compileButton_Click(object sender, EventArgs e) {
+      try {
+        ProgrammableOperator.Compile();
+        MessageBox.Show("Compilation successful", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
+      }
+      catch (Exception ex) {
+        Auxiliary.ShowErrorMessageBox(ex);
+      }
+    }
+    private void addVariableInfoButton_Click(object sender, EventArgs e) {
+      AddVariableInfoDialog dialog = new AddVariableInfoDialog();
+      if (dialog.ShowDialog(this) == DialogResult.OK) {
+        if (ProgrammableOperator.GetVariableInfo(dialog.VariableInfo.FormalName) != null)
+          Auxiliary.ShowErrorMessageBox("A variable info with the same formal name already exists.");
+        else
+          ProgrammableOperator.AddVariableInfo(dialog.VariableInfo);
+      }
+      dialog.Dispose();
+    }
+    private void removeVariableInfoButton_Click(object sender, EventArgs e) {
+      IVariableInfo[] selected = new IVariableInfo[operatorBaseVariableInfosView.SelectedVariableInfos.Count];
+      operatorBaseVariableInfosView.SelectedVariableInfos.CopyTo(selected, 0);
+      for (int i = 0; i < selected.Length; i++)
+        ProgrammableOperator.RemoveVariableInfo(selected[i].FormalName);
+    }
+    #endregion
+
+    #region ProgrammableOperator Events
+    private void ProgrammableOperator_CodeChanged(object sender, EventArgs e) {
+      codeTextBox.Text = ProgrammableOperator.Code;
+    }
+    private void ProgrammableOperator_DescriptionChanged(object sender, EventArgs e) {
+      descriptionTextBox.Text = ProgrammableOperator.Description;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/ProgrammableOperatorView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="infoTextBox.Text" xml:space="preserve">
+    <value>All variables corresponding to declared variable infos can be accessed directly using their formal names. Additionally there are two special variables: "op" referring to the programmable operator itself (this) and "scope" referring to the scope the operator is applied on.</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Programmable/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Operators.Programmable")]
+[assembly: AssemblyDescription("HeuristicLab programmable operator classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("8cf313d4-db6c-41bb-a43a-c684951e7020")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/HeuristicLab.Operators.Stopwatch.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/HeuristicLab.Operators.Stopwatch.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/HeuristicLab.Operators.Stopwatch.csproj	(revision 1270)
@@ -0,0 +1,106 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{39DEF061-8261-43DB-8B3B-C7555251FF77}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Operators.Stopwatch</RootNamespace>
+    <AssemblyName>HeuristicLab.Operators.Stopwatch-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="StopStopwatch.cs" />
+    <Compile Include="StartStopwatch.cs" />
+    <Compile Include="HeuristicLabOperatorsStopwatchPlugin.cs" />
+    <Compile Include="Stopwatch.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/HeuristicLabOperatorsStopwatchPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/HeuristicLabOperatorsStopwatchPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/HeuristicLabOperatorsStopwatchPlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Operators.Stopwatch {
+  [ClassInfo(Name = "HeuristicLab.Operators.Stopwatch-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Operators.Stopwatch-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabOperatorsStopwatchPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Operators.Stopwatch")]
+[assembly: AssemblyDescription("Provides operators and data for stop-watch functionality")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("1599bffe-09cb-4c34-8383-2d45e7234514")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/StartStopwatch.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/StartStopwatch.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/StartStopwatch.cs	(revision 1270)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators.Stopwatch {
+  public class StartStopWatch : OperatorBase {
+    public override string Description {
+      get { return @"Starts a stopwatch"; }
+    }
+
+    public StartStopWatch()
+      : base() {
+      AddVariableInfo(new VariableInfo("Stopwatch", "Stopwatch", typeof(Stopwatch), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Stopwatch stopWatch = GetVariableValue<Stopwatch>("Stopwatch", scope, true);
+      stopWatch.Start();
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/StopStopwatch.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/StopStopwatch.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/StopStopwatch.cs	(revision 1270)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators.Stopwatch {
+  public class StopStopWatch : OperatorBase {
+    public override string Description {
+      get { return @"Stops a stopwatch and reads the elapsed seconds"; }
+    }
+
+    public StopStopWatch()
+      : base() {
+      AddVariableInfo(new VariableInfo("Stopwatch", "Stopwatch", typeof(Stopwatch), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ElapsedSeconds", "Elapsed seconds on the stop watch", typeof(DoubleData), VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Stopwatch stopWatch = GetVariableValue<Stopwatch>("Stopwatch", scope, true);
+      stopWatch.Stop();
+      GetVariableValue<DoubleData>("ElapsedSeconds", scope, true).Data = stopWatch.Elapsed.TotalSeconds;
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/Stopwatch.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/Stopwatch.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators.Stopwatch/Stopwatch.cs	(revision 1270)
@@ -0,0 +1,85 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Diagnostics;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators.Stopwatch {
+  public class Stopwatch : ItemBase {
+    private System.Diagnostics.Stopwatch stopwatch;
+    private TimeSpan elapsedTime;
+    private bool running;
+
+    public Stopwatch() {
+      stopwatch = new System.Diagnostics.Stopwatch();
+      elapsedTime = new TimeSpan(0L);
+      running = false;
+    }
+
+    public void Start() {
+      stopwatch.Start();
+      running = true;
+    }
+
+    public void Stop() {
+      stopwatch.Stop();
+      elapsedTime += stopwatch.Elapsed;
+      stopwatch.Reset();
+      running = false;
+    }
+
+    public TimeSpan Elapsed {
+      get {
+        return elapsedTime + stopwatch.Elapsed;
+      }
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Stopwatch clone = (Stopwatch)base.Clone(clonedObjects);
+      if(running) clone.Start();
+      clone.elapsedTime = elapsedTime;
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute runningAttr = document.CreateAttribute("Running");
+      runningAttr.Value = running.ToString();
+      node.Attributes.Append(runningAttr);
+      XmlAttribute elapsedTicksAttr = document.CreateAttribute("ElapsedTicks");
+      elapsedTicksAttr.Value = elapsedTime.Ticks.ToString();
+      node.Attributes.Append(elapsedTicksAttr);
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      long elapsedTicks = long.Parse(node.Attributes["ElapsedTicks"].Value);
+      elapsedTime = TimeSpan.FromTicks(elapsedTicks);
+      running = bool.Parse(node.Attributes["Running"].Value);
+      if(running) stopwatch.Start();
+      base.Populate(node, restoredObjects);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,265 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators {
+  partial class AddVariableInfoDialog {
+    /// <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.cancelButton = new System.Windows.Forms.Button();
+      this.okButton = new System.Windows.Forms.Button();
+      this.formalNameLabel = new System.Windows.Forms.Label();
+      this.formalNameTextBox = new System.Windows.Forms.TextBox();
+      this.descriptionLabel = new System.Windows.Forms.Label();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.dataTypeLabel = new System.Windows.Forms.Label();
+      this.kindLabel = new System.Windows.Forms.Label();
+      this.kindNewCheckBox = new System.Windows.Forms.CheckBox();
+      this.kindInCheckBox = new System.Windows.Forms.CheckBox();
+      this.kindOutCheckBox = new System.Windows.Forms.CheckBox();
+      this.kindDeletedCheckBox = new System.Windows.Forms.CheckBox();
+      this.dataTypeTextBox = new System.Windows.Forms.TextBox();
+      this.setDataTypeButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.cancelButton.Location = new System.Drawing.Point(311, 210);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 13;
+      this.cancelButton.Text = "&Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
+      this.okButton.Location = new System.Drawing.Point(230, 210);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 12;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // formalNameLabel
+      // 
+      this.formalNameLabel.AutoSize = true;
+      this.formalNameLabel.Location = new System.Drawing.Point(12, 9);
+      this.formalNameLabel.Name = "formalNameLabel";
+      this.formalNameLabel.Size = new System.Drawing.Size(72, 13);
+      this.formalNameLabel.TabIndex = 0;
+      this.formalNameLabel.Text = "&Formal Name:";
+      // 
+      // formalNameTextBox
+      // 
+      this.formalNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.formalNameTextBox.Location = new System.Drawing.Point(90, 6);
+      this.formalNameTextBox.Name = "formalNameTextBox";
+      this.formalNameTextBox.Size = new System.Drawing.Size(296, 20);
+      this.formalNameTextBox.TabIndex = 1;
+      this.formalNameTextBox.Text = "Name";
+      this.formalNameTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.formalNameTextBox_Validating);
+      // 
+      // descriptionLabel
+      // 
+      this.descriptionLabel.AutoSize = true;
+      this.descriptionLabel.Location = new System.Drawing.Point(12, 35);
+      this.descriptionLabel.Name = "descriptionLabel";
+      this.descriptionLabel.Size = new System.Drawing.Size(63, 13);
+      this.descriptionLabel.TabIndex = 2;
+      this.descriptionLabel.Text = "&Description:";
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.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.descriptionTextBox.Location = new System.Drawing.Point(90, 32);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(296, 123);
+      this.descriptionTextBox.TabIndex = 3;
+      // 
+      // dataTypeLabel
+      // 
+      this.dataTypeLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.dataTypeLabel.AutoSize = true;
+      this.dataTypeLabel.Location = new System.Drawing.Point(12, 164);
+      this.dataTypeLabel.Name = "dataTypeLabel";
+      this.dataTypeLabel.Size = new System.Drawing.Size(60, 13);
+      this.dataTypeLabel.TabIndex = 4;
+      this.dataTypeLabel.Text = "Data &Type:";
+      // 
+      // kindLabel
+      // 
+      this.kindLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.kindLabel.AutoSize = true;
+      this.kindLabel.Location = new System.Drawing.Point(12, 188);
+      this.kindLabel.Name = "kindLabel";
+      this.kindLabel.Size = new System.Drawing.Size(72, 13);
+      this.kindLabel.TabIndex = 7;
+      this.kindLabel.Text = "Variable &Kind:";
+      // 
+      // kindNewCheckBox
+      // 
+      this.kindNewCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.kindNewCheckBox.AutoSize = true;
+      this.kindNewCheckBox.Location = new System.Drawing.Point(90, 187);
+      this.kindNewCheckBox.Name = "kindNewCheckBox";
+      this.kindNewCheckBox.Size = new System.Drawing.Size(48, 17);
+      this.kindNewCheckBox.TabIndex = 8;
+      this.kindNewCheckBox.Text = "&New";
+      this.kindNewCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // kindInCheckBox
+      // 
+      this.kindInCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.kindInCheckBox.AutoSize = true;
+      this.kindInCheckBox.Checked = true;
+      this.kindInCheckBox.CheckState = System.Windows.Forms.CheckState.Checked;
+      this.kindInCheckBox.Location = new System.Drawing.Point(144, 187);
+      this.kindInCheckBox.Name = "kindInCheckBox";
+      this.kindInCheckBox.Size = new System.Drawing.Size(35, 17);
+      this.kindInCheckBox.TabIndex = 9;
+      this.kindInCheckBox.Text = "&In";
+      this.kindInCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // kindOutCheckBox
+      // 
+      this.kindOutCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.kindOutCheckBox.AutoSize = true;
+      this.kindOutCheckBox.Location = new System.Drawing.Point(185, 187);
+      this.kindOutCheckBox.Name = "kindOutCheckBox";
+      this.kindOutCheckBox.Size = new System.Drawing.Size(43, 17);
+      this.kindOutCheckBox.TabIndex = 10;
+      this.kindOutCheckBox.Text = "&Out";
+      this.kindOutCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // kindDeletedCheckBox
+      // 
+      this.kindDeletedCheckBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.kindDeletedCheckBox.AutoSize = true;
+      this.kindDeletedCheckBox.Location = new System.Drawing.Point(234, 187);
+      this.kindDeletedCheckBox.Name = "kindDeletedCheckBox";
+      this.kindDeletedCheckBox.Size = new System.Drawing.Size(63, 17);
+      this.kindDeletedCheckBox.TabIndex = 11;
+      this.kindDeletedCheckBox.Text = "&Deleted";
+      this.kindDeletedCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // dataTypeTextBox
+      // 
+      this.dataTypeTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.dataTypeTextBox.Location = new System.Drawing.Point(90, 161);
+      this.dataTypeTextBox.Name = "dataTypeTextBox";
+      this.dataTypeTextBox.ReadOnly = true;
+      this.dataTypeTextBox.Size = new System.Drawing.Size(247, 20);
+      this.dataTypeTextBox.TabIndex = 6;
+      this.dataTypeTextBox.Text = "HeuristicLab.Data.BoolData";
+      // 
+      // setDataTypeButton
+      // 
+      this.setDataTypeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.setDataTypeButton.Location = new System.Drawing.Point(343, 161);
+      this.setDataTypeButton.Name = "setDataTypeButton";
+      this.setDataTypeButton.Size = new System.Drawing.Size(43, 20);
+      this.setDataTypeButton.TabIndex = 5;
+      this.setDataTypeButton.Text = "&Set...";
+      this.setDataTypeButton.UseVisualStyleBackColor = true;
+      this.setDataTypeButton.Click += new System.EventHandler(this.setDataTypeButton_Click);
+      // 
+      // AddVariableInfoDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.CancelButton = this.cancelButton;
+      this.ClientSize = new System.Drawing.Size(398, 245);
+      this.Controls.Add(this.setDataTypeButton);
+      this.Controls.Add(this.kindDeletedCheckBox);
+      this.Controls.Add(this.kindOutCheckBox);
+      this.Controls.Add(this.kindInCheckBox);
+      this.Controls.Add(this.kindNewCheckBox);
+      this.Controls.Add(this.descriptionTextBox);
+      this.Controls.Add(this.dataTypeTextBox);
+      this.Controls.Add(this.formalNameTextBox);
+      this.Controls.Add(this.kindLabel);
+      this.Controls.Add(this.dataTypeLabel);
+      this.Controls.Add(this.descriptionLabel);
+      this.Controls.Add(this.formalNameLabel);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.okButton);
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "AddVariableInfoDialog";
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Add Variable Info";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.Label formalNameLabel;
+    private System.Windows.Forms.TextBox formalNameTextBox;
+    private System.Windows.Forms.Label descriptionLabel;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private System.Windows.Forms.Label dataTypeLabel;
+    private System.Windows.Forms.Label kindLabel;
+    private System.Windows.Forms.CheckBox kindNewCheckBox;
+    private System.Windows.Forms.CheckBox kindInCheckBox;
+    private System.Windows.Forms.CheckBox kindOutCheckBox;
+    private System.Windows.Forms.CheckBox kindDeletedCheckBox;
+    private System.Windows.Forms.TextBox dataTypeTextBox;
+    private System.Windows.Forms.Button setDataTypeButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Dialog to add a variable info.
+  /// </summary>
+  public partial class AddVariableInfoDialog : Form {
+    private IVariableInfo myVariableInfo;
+    /// <summary>
+    /// Gets the current variable info.
+    /// </summary>
+    public IVariableInfo VariableInfo {
+      get { return myVariableInfo; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="AddVariableInfoDialog"/>.
+    /// </summary>
+    public AddVariableInfoDialog() {
+      InitializeComponent();
+      dataTypeTextBox.Text = typeof(BoolData).FullName;
+      dataTypeTextBox.Tag = typeof(BoolData);
+    }
+
+    private void formalNameTextBox_Validating(object sender, CancelEventArgs e) {
+      if (formalNameTextBox.Text == "")
+        e.Cancel = true;
+    }
+
+    private void setDataTypeButton_Click(object sender, EventArgs e) {
+      ChooseTypeDialog dialog = new ChooseTypeDialog();
+      dialog.Caption = "Set Data Type";
+      if (dialog.ShowDialog(this) == DialogResult.OK) {
+        dataTypeTextBox.Text = dialog.Type.FullName;
+        dataTypeTextBox.Tag = dialog.Type;
+      }
+      dialog.Dispose();
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      VariableKind kind = VariableKind.None;
+      if (kindNewCheckBox.Checked) kind = kind | VariableKind.New;
+      if (kindInCheckBox.Checked) kind = kind | VariableKind.In;
+      if (kindOutCheckBox.Checked) kind = kind | VariableKind.Out;
+      if (kindDeletedCheckBox.Checked) kind = kind | VariableKind.Deleted;
+
+      myVariableInfo = new VariableInfo(formalNameTextBox.Text, descriptionTextBox.Text, (Type)dataTypeTextBox.Tag, kind);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/AddVariableInfoDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperator.cs	(revision 1270)
@@ -0,0 +1,169 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Contains an operator graph and automatically injects its sub-operators into the scope it is 
+  /// applied on (useful for modularization to assemble complex operators out of simpler ones).
+  /// </summary>
+  public class CombinedOperator : DelegatingOperator {
+    private string myDescription;
+    /// <summary>
+    /// Gets the description of the current instance.
+    /// </summary>
+    public override string Description {
+      get { return myDescription; }
+    }
+    private IOperatorGraph myOperatorGraph;
+    /// <summary>
+    /// Gets the operator graph of the current instance.
+    /// </summary>
+    public IOperatorGraph OperatorGraph {
+      get { return myOperatorGraph; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="CombinedOperator"/>.
+    /// </summary>
+    public CombinedOperator()
+      : base() {
+      myDescription =
+        @"A combined operator contains a whole operator graph. It is useful for modularization to assemble complex operators out of simpler ones.
+
+A combined operator automatically inject its sub-operators into the scope it is applied on. Thereby the names of the sub-operators are used as variable names. Those operators can be extracted again in the contained operator graph by using an OperatorExtractor. So it is possible to parameterize a combined operator with custom operators.";
+      myOperatorGraph = new OperatorGraph();
+    }
+
+    /// <summary>
+    /// Sets the description of the current instance.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnDescriptionChanged"/>.</remarks>
+    /// <exception cref="NullReferenceException">Thrown when <paramref name="description"/> is <c>null</c>.</exception>
+    /// <param name="description">The description to set.</param>
+    public void SetDescription(string description) {
+      if (description == null)
+        throw new NullReferenceException("description must not be null");
+
+      if (description != myDescription) {
+        myDescription = description;
+        OnDescriptionChanged();
+      }
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBase.Clone
+    /// (System.Collections.Generic.IDictionary&lt;System.Guid, object&gt;)"/> 
+    /// of base class <see cref="DelegatingOperator"/>.<br/>
+    /// Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="CombinedOperator"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      CombinedOperator clone = (CombinedOperator)base.Clone(clonedObjects);
+      clone.myDescription = Description;
+      clone.myOperatorGraph = (IOperatorGraph)Auxiliary.Clone(OperatorGraph, clonedObjects);
+      return clone;
+    }
+
+    /// <summary>
+    /// Adds all sub operators to the specified <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to inject the sub operators.</param>
+    /// <returns><c>null</c> if the initial operator is <c>nulll</c>, else a new 
+    /// <see cref="AtomicOperation"/> with the initial operator and the given <paramref name="scope"/>.</returns>
+    public override IOperation Apply(IScope scope) {
+      if (OperatorGraph.InitialOperator != null) {
+        for (int i = 0; i < SubOperators.Count; i++) {
+          if (scope.GetVariable(SubOperators[i].Name) != null)
+            scope.RemoveVariable(SubOperators[i].Name);
+          scope.AddVariable(new Variable(SubOperators[i].Name, SubOperators[i]));
+        }
+        return new AtomicOperation(OperatorGraph.InitialOperator, scope);
+      } else {
+        return null;
+      }
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="CombinedOperatorView"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created view as <see cref="CombinedOperatorView"/>.</returns>
+    public override IView CreateView() {
+      return new CombinedOperatorView(this);
+    }
+
+    /// <summary>
+    /// Occurs when the description of the current instance has been changed.
+    /// </summary>
+    public event EventHandler DescriptionChanged;
+    /// <summary>
+    /// Fires a new <c>DescriptionChanged</c> event.
+    /// </summary>
+    protected virtual void OnDescriptionChanged() {
+      if (DescriptionChanged != null)
+        DescriptionChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The description and the operator graph of the current instance are saved as child 
+    /// nodes with tag names <c>Description</c> <c>OperatorGraph</c>.<br/>
+    /// Calls <see cref="OperatorBase.GetXmlNode"/> of base class <see cref="DelegatingOperator"/>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlNode descriptionNode = document.CreateNode(XmlNodeType.Element, "Description", null);
+      descriptionNode.InnerText = myDescription;
+      node.AppendChild(descriptionNode);
+      node.AppendChild(PersistenceManager.Persist("OperatorGraph", OperatorGraph, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted instance from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBase.Populate"/> of base class <see cref="DelegatingOperator"/>.
+    /// <br/> See <see cref="GetXmlNode"/> for further information on how the data must be saved.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the operator is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode descriptionNode = node.SelectSingleNode("Description");
+      if (descriptionNode != null) myDescription = descriptionNode.InnerText;
+      myOperatorGraph = (IOperatorGraph)PersistenceManager.Restore(node.SelectSingleNode("OperatorGraph"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.Designer.cs	(revision 1270)
@@ -0,0 +1,252 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators {
+  partial class CombinedOperatorView {
+    /// <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.tabControl = new System.Windows.Forms.TabControl();
+      this.operatorGraphTabPage = new System.Windows.Forms.TabPage();
+      this.operatorGraphView = new HeuristicLab.Core.OperatorGraphView();
+      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.variablesTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariablesView = new HeuristicLab.Core.OperatorBaseVariablesView();
+      this.constraintsTabPage = new System.Windows.Forms.TabPage();
+      this.constrainedItemBaseView = new HeuristicLab.Core.ConstrainedItemBaseView();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.descriptionTextBox = new System.Windows.Forms.TextBox();
+      this.removeVariableInfoButton = new System.Windows.Forms.Button();
+      this.addVariableInfoButton = new System.Windows.Forms.Button();
+      this.tabControl.SuspendLayout();
+      this.operatorGraphTabPage.SuspendLayout();
+      this.variableInfosTabPage.SuspendLayout();
+      this.variablesTabPage.SuspendLayout();
+      this.constraintsTabPage.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.operatorGraphTabPage);
+      this.tabControl.Controls.Add(this.variableInfosTabPage);
+      this.tabControl.Controls.Add(this.variablesTabPage);
+      this.tabControl.Controls.Add(this.constraintsTabPage);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(397, 335);
+      this.tabControl.TabIndex = 0;
+      // 
+      // operatorGraphTabPage
+      // 
+      this.operatorGraphTabPage.Controls.Add(this.operatorGraphView);
+      this.operatorGraphTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorGraphTabPage.Name = "operatorGraphTabPage";
+      this.operatorGraphTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorGraphTabPage.Size = new System.Drawing.Size(389, 309);
+      this.operatorGraphTabPage.TabIndex = 0;
+      this.operatorGraphTabPage.Text = "Operator Graph";
+      this.operatorGraphTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorGraphView
+      // 
+      this.operatorGraphView.Caption = "Operator Graph";
+      this.operatorGraphView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorGraphView.Location = new System.Drawing.Point(3, 3);
+      this.operatorGraphView.Name = "operatorGraphView";
+      this.operatorGraphView.OperatorGraph = null;
+      this.operatorGraphView.Size = new System.Drawing.Size(383, 303);
+      this.operatorGraphView.TabIndex = 0;
+      // 
+      // variableInfosTabPage
+      // 
+      this.variableInfosTabPage.Controls.Add(this.removeVariableInfoButton);
+      this.variableInfosTabPage.Controls.Add(this.addVariableInfoButton);
+      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfosTabPage.Name = "variableInfosTabPage";
+      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfosTabPage.Size = new System.Drawing.Size(389, 309);
+      this.variableInfosTabPage.TabIndex = 1;
+      this.variableInfosTabPage.Text = "Variable Infos";
+      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.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.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(383, 274);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      this.operatorBaseVariableInfosView.SelectedVariableInfosChanged += new System.EventHandler(this.operatorBaseVariableInfosView_SelectedVariableInfosChanged);
+      // 
+      // variablesTabPage
+      // 
+      this.variablesTabPage.Controls.Add(this.operatorBaseVariablesView);
+      this.variablesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variablesTabPage.Name = "variablesTabPage";
+      this.variablesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variablesTabPage.Size = new System.Drawing.Size(389, 309);
+      this.variablesTabPage.TabIndex = 2;
+      this.variablesTabPage.Text = "Local Variables";
+      this.variablesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariablesView
+      // 
+      this.operatorBaseVariablesView.Caption = "Operator";
+      this.operatorBaseVariablesView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariablesView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariablesView.Name = "operatorBaseVariablesView";
+      this.operatorBaseVariablesView.Operator = null;
+      this.operatorBaseVariablesView.Size = new System.Drawing.Size(383, 303);
+      this.operatorBaseVariablesView.TabIndex = 0;
+      // 
+      // constraintsTabPage
+      // 
+      this.constraintsTabPage.Controls.Add(this.constrainedItemBaseView);
+      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(389, 309);
+      this.constraintsTabPage.TabIndex = 3;
+      this.constraintsTabPage.Text = "Constraints";
+      this.constraintsTabPage.UseVisualStyleBackColor = true;
+      // 
+      // constrainedItemBaseView
+      // 
+      this.constrainedItemBaseView.Caption = "Constrained Item";
+      this.constrainedItemBaseView.ConstrainedItem = null;
+      this.constrainedItemBaseView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.constrainedItemBaseView.Location = new System.Drawing.Point(3, 3);
+      this.constrainedItemBaseView.Name = "constrainedItemBaseView";
+      this.constrainedItemBaseView.Size = new System.Drawing.Size(383, 303);
+      this.constrainedItemBaseView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.descriptionTextBox);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(389, 309);
+      this.descriptionTabPage.TabIndex = 4;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.descriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.descriptionTextBox.Location = new System.Drawing.Point(3, 3);
+      this.descriptionTextBox.Multiline = true;
+      this.descriptionTextBox.Name = "descriptionTextBox";
+      this.descriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.descriptionTextBox.Size = new System.Drawing.Size(383, 303);
+      this.descriptionTextBox.TabIndex = 0;
+      this.descriptionTextBox.Validated += new System.EventHandler(this.descriptionTextBox_Validated);
+      // 
+      // removeVariableInfoButton
+      // 
+      this.removeVariableInfoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.removeVariableInfoButton.Enabled = false;
+      this.removeVariableInfoButton.Location = new System.Drawing.Point(84, 283);
+      this.removeVariableInfoButton.Name = "removeVariableInfoButton";
+      this.removeVariableInfoButton.Size = new System.Drawing.Size(75, 23);
+      this.removeVariableInfoButton.TabIndex = 2;
+      this.removeVariableInfoButton.Text = "&Remove";
+      this.removeVariableInfoButton.UseVisualStyleBackColor = true;
+      this.removeVariableInfoButton.Click += new System.EventHandler(this.removeVariableInfoButton_Click);
+      // 
+      // addVariableInfoButton
+      // 
+      this.addVariableInfoButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.addVariableInfoButton.Location = new System.Drawing.Point(3, 283);
+      this.addVariableInfoButton.Name = "addVariableInfoButton";
+      this.addVariableInfoButton.Size = new System.Drawing.Size(75, 23);
+      this.addVariableInfoButton.TabIndex = 1;
+      this.addVariableInfoButton.Text = "&Add...";
+      this.addVariableInfoButton.UseVisualStyleBackColor = true;
+      this.addVariableInfoButton.Click += new System.EventHandler(this.addVariableInfoButton_Click);
+      // 
+      // CombinedOperatorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "CombinedOperatorView";
+      this.Size = new System.Drawing.Size(397, 335);
+      this.tabControl.ResumeLayout(false);
+      this.operatorGraphTabPage.ResumeLayout(false);
+      this.variableInfosTabPage.ResumeLayout(false);
+      this.variablesTabPage.ResumeLayout(false);
+      this.constraintsTabPage.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.descriptionTabPage.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage operatorGraphTabPage;
+    private System.Windows.Forms.TabPage variableInfosTabPage;
+    private System.Windows.Forms.TabPage variablesTabPage;
+    private System.Windows.Forms.TabPage constraintsTabPage;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private System.Windows.Forms.TextBox descriptionTextBox;
+    private HeuristicLab.Core.OperatorGraphView operatorGraphView;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private HeuristicLab.Core.OperatorBaseVariablesView operatorBaseVariablesView;
+    private HeuristicLab.Core.ConstrainedItemBaseView constrainedItemBaseView;
+    private System.Windows.Forms.Button removeVariableInfoButton;
+    private System.Windows.Forms.Button addVariableInfoButton;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.cs	(revision 1270)
@@ -0,0 +1,132 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// The visual representation of a <see cref="CombinedOperator"/>.
+  /// </summary>
+  public partial class CombinedOperatorView : ViewBase {
+    /// <summary>
+    /// Gets or sets the combined operator to display.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public CombinedOperator CombinedOperator {
+      get { return (CombinedOperator)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers in all children and from the underlying <see cref="CombinedOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      operatorGraphView.OperatorGraph = null;
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseVariablesView.Operator = null;
+      constrainedItemBaseView.ConstrainedItem = null;
+      CombinedOperator.DescriptionChanged -= new EventHandler(CombinedOperator_DescriptionChanged);
+      base.RemoveItemEvents();
+    }
+    
+    /// <summary>
+    /// Adds event handlers in all children and to the underlying <see cref="CombinedOperator"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorGraphView.OperatorGraph = CombinedOperator.OperatorGraph;
+      operatorBaseVariableInfosView.Operator = CombinedOperator;
+      operatorBaseVariablesView.Operator = CombinedOperator;
+      constrainedItemBaseView.ConstrainedItem = CombinedOperator;
+      CombinedOperator.DescriptionChanged += new EventHandler(CombinedOperator_DescriptionChanged);
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="CombinedOperatorView"/>.
+    /// </summary>
+    public CombinedOperatorView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="CombinedOperatorView"/> with the specified 
+    /// <paramref name="combinedOperator"/>.
+    /// </summary>
+    /// <param name="combinedOperator">The combined operator to display.</param>
+    public CombinedOperatorView(CombinedOperator combinedOperator)
+      : this() {
+      CombinedOperator = combinedOperator;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (CombinedOperator == null) {
+        descriptionTextBox.Text = "";
+        descriptionTextBox.Enabled = false;
+      } else {
+        descriptionTextBox.Text = CombinedOperator.Description;
+        descriptionTextBox.Enabled = true;
+      }
+    }
+
+    private void CombinedOperator_DescriptionChanged(object sender, EventArgs e) {
+      descriptionTextBox.Text = CombinedOperator.Description;
+    }
+    private void descriptionTextBox_Validated(object sender, EventArgs e) {
+      CombinedOperator.SetDescription(descriptionTextBox.Text);
+    }
+
+    private void operatorBaseVariableInfosView_SelectedVariableInfosChanged(object sender, EventArgs e) {
+      removeVariableInfoButton.Enabled = operatorBaseVariableInfosView.SelectedVariableInfos.Count > 0;
+    }
+
+    #region Click Events
+    private void addVariableInfoButton_Click(object sender, EventArgs e) {
+      AddVariableInfoDialog dialog = new AddVariableInfoDialog();
+      if (dialog.ShowDialog(this) == DialogResult.OK) {
+        if (CombinedOperator.GetVariableInfo(dialog.VariableInfo.FormalName) != null)
+          Auxiliary.ShowErrorMessageBox("A variable info with the same formal name already exists.");
+        else
+          CombinedOperator.AddVariableInfo(dialog.VariableInfo);
+      }
+      dialog.Dispose();
+    }
+    private void removeVariableInfoButton_Click(object sender, EventArgs e) {
+      IVariableInfo[] selected = new IVariableInfo[operatorBaseVariableInfosView.SelectedVariableInfos.Count];
+      operatorBaseVariableInfosView.SelectedVariableInfos.CopyTo(selected, 0);
+      for (int i = 0; i < selected.Length; i++)
+        CombinedOperator.RemoveVariableInfo(selected[i].FormalName);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/CombinedOperatorView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ComparatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ComparatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ComparatorBase.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Base class for operators which perform comparisons between two items.
+  /// </summary>
+  public abstract class ComparatorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="ComparatorBase"/> with three 
+    /// variable infos (<c>LeftSide</c>, <c>RightSide</c> and <c>Result</c>).
+    /// </summary>
+    protected ComparatorBase() {
+      AddVariableInfo(new VariableInfo("LeftSide", "Variable on the left side of the comparison", typeof(IItem), VariableKind.In));
+      AddVariableInfo(new VariableInfo("RightSide", "Variable on the right side of the comparison", typeof(IItem), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Result", "Result of the comparison", typeof(BoolData), VariableKind.Out | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Compares two items with each other and injects the <c>Result</c> variable - if it is no local one - into
+    /// the specified <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Compare"/>.</remarks>
+    /// <exception cref="InvalidOperationException">Thrown when left side of the comparison does not
+    /// implement <see cref="IComparable"/>.</exception>
+    /// <param name="scope">The scope where to apply the compare operation.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      BoolData result = GetVariableValue<BoolData>("Result", scope, false, false);
+      if (result == null) {
+        result = new BoolData(true);
+        IVariableInfo info = GetVariableInfo("Result");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, result));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), result));
+      }
+      IItem leftSide = GetVariableValue<IItem>("LeftSide", scope, true);
+      if (!(leftSide is IComparable)) throw new InvalidOperationException("Comparator: Left side needs to be of type IComparable");
+      IComparable left = (IComparable)leftSide;
+      IItem rightSide = GetVariableValue<IItem>("RightSide", scope, true);
+      result.Data = Compare(left, rightSide);
+      return null;
+    }
+
+    /// <summary>
+    /// Compares two variables with each other.
+    /// </summary>
+    /// <param name="left">The variable on the left side of the comparison.</param>
+    /// <param name="right">The variable on the right side of the comparison.</param>
+    /// <returns><c>true</c> if the comparison query was successful, <c>false</c> otherwise.</returns>
+    protected abstract bool Compare(IComparable left, IItem right);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ConditionalBranch.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ConditionalBranch.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ConditionalBranch.cs	(revision 1270)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Branch of (one or)two operators whose executions depend on a specific condition.
+  /// </summary>
+  public class ConditionalBranch : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"ConditionalBranch expects to have 1 or 2 sub-operators.
+It will return the 1st sub-operator if ""Condition"" is true and the 2nd sub-operator if ""Condition"" equals to false.
+
+In case a 2nd sub-operator does not exist and ""Condition"" would equal to false, Conditional Branch will not return a new operation."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ConditionalBranch"/> with one variable info 
+    /// (<c>Condition</c>).
+    /// </summary>
+    public ConditionalBranch()
+      : base() {
+      AddVariableInfo(new VariableInfo("Condition", "A boolean variable that decides the branch", typeof(BoolData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Applies the operator of branch one under a specific condition on the given 
+    /// <paramref name="scope"/>, or - if existent - operator of branch two if the condition could not
+    /// be fulfilled. 
+    /// </summary>
+    /// <param name="scope">The scope to apply the operators on.</param>
+    /// <returns>A new <see cref="AtomicOperation"/> with either operator 1 or operator 2 applied
+    /// to the given <paramref name="scope"/> or <c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      BoolData resultData = GetVariableValue<BoolData>("Condition", scope, true);
+      bool result = resultData.Data;
+
+      if ((result) && (SubOperators.Count > 0) && (SubOperators[0] != null))
+        return new AtomicOperation(SubOperators[0], scope);
+      else if ((!result) && (SubOperators.Count > 1) && (SubOperators[1] != null))
+        return new AtomicOperation(SubOperators[1], scope);
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Counter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Counter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Counter.cs	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Class to increment an int variable by 1.
+  /// </summary>
+  public class Counter : OperatorBase {
+    /// <summary>
+    /// Gets the description of the current instance.
+    /// </summary>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Counter"/> with one variable info (<c>Value</c>).
+    /// </summary>
+    public Counter()
+      : base() {
+      AddVariableInfo(new VariableInfo("Value", "Counter value", typeof(IntData), VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Increments an int value of the specified <paramref name="scope"/> by one.
+    /// </summary>
+    /// <param name="scope">The scope whose variable should be incremented.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IntData value = GetVariableValue<IntData>("Value", scope, true);
+      value.Data++;
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DataCollector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DataCollector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DataCollector.cs	(revision 1270)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Collects values of specific variable names in a given scope.
+  /// </summary>
+  public class DataCollector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DataCollector"/> with two variable infos 
+    /// (<c>VariableNames</c> and <c>Values</c>).
+    /// </summary>
+    public DataCollector() {
+      IVariableInfo variableNamesVariableInfo = new VariableInfo("VariableNames", "Names of variables whose values should be collected", typeof(ItemList<StringData>), VariableKind.In);
+      variableNamesVariableInfo.Local = true;
+      AddVariableInfo(variableNamesVariableInfo);
+      ItemList<StringData> variableNames = new ItemList<StringData>();
+      AddVariable(new Variable("VariableNames", variableNames));
+      AddVariableInfo(new VariableInfo("Values", "Collected values", typeof(ItemList), VariableKind.New | VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Collects the values of a specified list of variable names in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to collect the values from.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      ItemList<StringData> names = GetVariableValue<ItemList<StringData>>("VariableNames", scope, false);
+      ItemList values = GetVariableValue<ItemList>("Values", scope, true, false);
+      if (values == null) {
+        values = new ItemList();
+        IVariableInfo info = GetVariableInfo("Values");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, values));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), values));
+      }
+
+      ItemList currentValues = new ItemList();
+      for (int i = 0; i < names.Count; i++)
+        currentValues.Add((IItem)scope.GetVariableValue(names[i].Data, true).Clone());
+      values.Add(currentValues);
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DelegatingOperator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DelegatingOperator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DelegatingOperator.cs	(revision 1270)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Base class for operators that call other operators.
+  /// </summary>
+  public abstract class DelegatingOperator : OperatorBase {
+    /// <summary>
+    /// Executes the specified operator in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBase.OnExecuted"/>.<br/>
+    /// Will be executed two times: First to execute the operation where the local variables 
+    /// are added to the global scope and a second time to remove the local variables again.</remarks>
+    /// <param name="scope">The scope where to apply the operation.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Execute(IScope scope) {
+      myCanceled = false;
+
+      if(scope.GetVariable(Guid.ToString()) == null) { // contained operator not yet executed
+        // add marker
+        scope.AddVariable(new Variable(Guid.ToString(), new NullData()));
+
+        // add aliases and local variables
+        foreach (IVariableInfo variableInfo in VariableInfos) {
+          scope.AddAlias(variableInfo.FormalName, variableInfo.ActualName);
+          if (variableInfo.Local)
+            scope.AddVariable(GetVariable(variableInfo.ActualName));
+        }
+
+        CompositeOperation next = new CompositeOperation();
+        next.AddOperation(Apply(scope));
+        // execute combined operator again after contained operators have been executed
+        next.AddOperation(new AtomicOperation(this, scope));
+
+        OnExecuted();
+        return next;
+      } else {  // contained operator already executed
+        // remove marker
+        scope.RemoveVariable(Guid.ToString());
+
+        // remove aliases and local variables
+        foreach (IVariableInfo variableInfo in VariableInfos) {
+          scope.RemoveAlias(variableInfo.FormalName);
+          if (variableInfo.Local)
+            scope.RemoveVariable(variableInfo.ActualName);
+        }
+
+        OnExecuted();
+        return null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DoubleCounter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DoubleCounter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/DoubleCounter.cs	(revision 1270)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Class to add a specified interval to a double value.
+  /// </summary>
+  public class DoubleCounter : OperatorBase {
+    /// <summary>
+    /// Gets the description of the current instance.
+    /// </summary>
+    public override string Description {
+      get { return @"Adds a given interval to a double value"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DoubleCounter"/>, including two variable infos 
+    /// (<c>Value</c> and <c>Interval</c>).
+    /// </summary>
+    public DoubleCounter()
+      : base() {
+      AddVariableInfo(new VariableInfo("Value", "Counter value", typeof(DoubleData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("Interval", "Interval value", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Adds to a double value of the given <paramref name="scope"/> a specified interval.
+    /// </summary>
+    /// <param name="scope">The scope whose variable should be incremented.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      DoubleData value = GetVariableValue<DoubleData>("Value", scope, true);
+      double interval = GetVariableValue<DoubleData>("Interval", scope, true).Data;
+      value.Data += interval;
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/EmptyOperator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/EmptyOperator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/EmptyOperator.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Placeholder and also used for testing; Does nothing.
+  /// </summary>
+  public class EmptyOperator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "An empty operator just does nothing. Useful for testing and as a place holder for sub-operators of SequentialSubScopesProcessor and ParallelSubScopesProcessor."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EmptyOperator"/>.
+    /// </summary>
+    public EmptyOperator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Does nothing.
+    /// </summary>
+    /// <param name="scope">The scope to apply the operator on.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/EqualToComparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/EqualToComparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/EqualToComparator.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to check whether two items are equal to each other.
+  /// </summary>
+  public class EqualToComparator : ComparatorBase {
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="EqualToComparator"/>.
+    /// </summary>
+    public EqualToComparator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the two specified items are equal to each other.
+    /// </summary>
+    /// <param name="left">The left side of the comparison.</param>
+    /// <param name="right">The right side of the comparison.</param>
+    /// <returns><c>true</c> if the two elements are equal to each other, <c>false otherwise</c>.</returns>
+    protected override bool Compare(IComparable left, IItem right) {
+      return left.CompareTo(right) == 0;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/GreaterOrEqualThanComparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/GreaterOrEqualThanComparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/GreaterOrEqualThanComparator.cs	(revision 1270)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to check whether one item is equal or greater than another.
+  /// </summary>
+  public class GreaterOrEqualThanComparator : ComparatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="GreaterOrEqualThanComparator"/>.
+    /// </summary>
+    public GreaterOrEqualThanComparator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the <paramref name="left"/> item is greater or equal to the <paramref name="right"/>.
+    /// </summary>
+    /// <param name="left">The left side of the comparison.</param>
+    /// <param name="right">The right side of the comparison.</param>
+    /// <returns><c>true</c> if the <paramref name="left"/> item is greater or equal to the 
+    /// <paramref name="right"/>, <c>false</c> otherwise.</returns>
+    protected override bool Compare(IComparable left, IItem right) {
+      return left.CompareTo(right) >= 0;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/GreaterThanComparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/GreaterThanComparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/GreaterThanComparator.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to check whether an item is greater than another one.
+  /// </summary>
+  public class GreaterThanComparator : ComparatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="GreaterThanComparator"/>.
+    /// </summary>
+    public GreaterThanComparator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the <paramref name="left"/> item is greater than the <paramref name="right"/>.
+    /// </summary>
+    /// <param name="left">The left side of the comparison.</param>
+    /// <param name="right">The right side of the comparison.</param>
+    /// <returns><c>true</c> if the <paramref name="left"/> item is greater than the 
+    /// <paramref name="right"/>, <c>false</c> otherwise.</returns>
+    protected override bool Compare(IComparable left, IItem right) {
+      return left.CompareTo(right) > 0;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/HeuristicLab.Operators.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/HeuristicLab.Operators.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/HeuristicLab.Operators.csproj	(revision 1270)
@@ -0,0 +1,167 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Operators</RootNamespace>
+    <AssemblyName>HeuristicLab.Operators-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Operators-3.2.XML</DocumentationFile>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Operators-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AddVariableInfoDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AddVariableInfoDialog.Designer.cs">
+      <DependentUpon>AddVariableInfoDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="CombinedOperator.cs" />
+    <Compile Include="CombinedOperatorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="CombinedOperatorView.Designer.cs">
+      <DependentUpon>CombinedOperatorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ComparatorBase.cs" />
+    <Compile Include="ConditionalBranch.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="DelegatingOperator.cs" />
+    <Compile Include="DoubleCounter.cs" />
+    <Compile Include="ScopeCleaner.cs" />
+    <Compile Include="StochasticMultiBranch.cs" />
+    <Compile Include="SubScopesMixer.cs" />
+    <Compile Include="DataCollector.cs" />
+    <Compile Include="EqualToComparator.cs" />
+    <Compile Include="GreaterOrEqualThanComparator.cs" />
+    <Compile Include="GreaterThanComparator.cs" />
+    <Compile Include="LessOrEqualThanComparator.cs" />
+    <Compile Include="LessThanComparator.cs" />
+    <Compile Include="OperatorExtractor.cs" />
+    <Compile Include="ParallelProcessor.cs" />
+    <Compile Include="EmptyOperator.cs" />
+    <Compile Include="SequentialProcessor.cs" />
+    <Compile Include="SingleObjectiveEvaluatorBase.cs" />
+    <Compile Include="Sorter.cs" />
+    <Compile Include="StochasticBranch.cs" />
+    <Compile Include="SubScopesRemover.cs" />
+    <Compile Include="UnequalToComparator.cs" />
+    <Compile Include="UniformSequentialSubScopesProcessor.cs" />
+    <Compile Include="UniformParallelSubScopesProcessor.cs" />
+    <Compile Include="ParallelSubScopesProcessor.cs" />
+    <Compile Include="SequentialSubScopesProcessor.cs" />
+    <Compile Include="SubScopesCreater.cs" />
+    <Compile Include="Counter.cs" />
+    <Compile Include="HeuristicLabOperatorsPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="VariableInjector.cs" />
+    <Compile Include="VariableInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="VariableInjectorView.Designer.cs">
+      <DependentUpon>VariableInjectorView.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AddVariableInfoDialog.resx">
+      <DependentUpon>AddVariableInfoDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="CombinedOperatorView.resx">
+      <DependentUpon>CombinedOperatorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/HeuristicLabOperatorsPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/HeuristicLabOperatorsPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/HeuristicLabOperatorsPlugin.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Operators plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Operators-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Operators-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  public class HeuristicLabOperatorsPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/LessOrEqualThanComparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/LessOrEqualThanComparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/LessOrEqualThanComparator.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to check whether an item is less or equal to another one.
+  /// </summary>
+  public class LessOrEqualThanComparator : ComparatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="LessOrEqualThanComparator"/>.
+    /// </summary>
+    public LessOrEqualThanComparator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the <paramref name="left"/> item is less or equal to the <paramref name="right"/>. 
+    /// </summary>
+    /// <param name="left">The left side of the comparison.</param>
+    /// <param name="right">The right side of the comparison.</param>
+    /// <returns><c>true</c> if the <paramref name="left"/> item is less or equal to the 
+    /// <paramref name="right"/>, <c>false</c> otherwise.</returns>
+    protected override bool Compare(IComparable left, IItem right) {
+      return left.CompareTo(right) <= 0;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/LessThanComparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/LessThanComparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/LessThanComparator.cs	(revision 1270)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to check whether an item is less than another one.
+  /// </summary>
+  public class LessThanComparator : ComparatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="LessThanComparator"/>.
+    /// </summary>
+    public LessThanComparator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the <paramref name="left"/> item is less than the <paramref name="right"/>.
+    /// </summary>
+    /// <param name="left">The left side of the comparison.</param>
+    /// <param name="right">The right side of the comparison.</param>
+    /// <returns><c>true</c> if the <paramref name="left"/> item is less than the 
+    /// <paramref name="right"/>, <c>false</c> otherwise.</returns>
+    protected override bool Compare(IComparable left, IItem right) {
+      return left.CompareTo(right) < 0;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/OperatorExtractor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/OperatorExtractor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/OperatorExtractor.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Retrieves an operator from a specified scope and returns a successor operation with this operation
+  /// and scope.
+  /// </summary>
+  public class OperatorExtractor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"An operator extractor retrievs an operator from the scope it is applied on and returns a successor operation containing this operator and the current scope. Lookup for the operator is done recursively.
+
+Operator extractors can be used to get those operators again that have been injected by combined operators."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OperatorExtractor"/> with 
+    /// one variable info (<c>Operator</c>).
+    /// </summary>
+    public OperatorExtractor()
+      : base() {
+      AddVariableInfo(new VariableInfo("Operator", "Extracted operator", typeof(IOperator), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Gets an operator from the specified <paramref name="scope"/> and returns an 
+    /// <see cref="AtomicOperation"/> containing this operator and scope.
+    /// </summary>
+    /// <param name="scope">The scope where to apply the operator on.</param>
+    /// <returns>A new <see cref="AtomicOperation"/> containing the operator and the given
+    /// <paramref name="scope"/>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IOperator op = GetVariableValue<IOperator>("Operator", scope, true, true);
+      return new AtomicOperation(op, scope);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ParallelProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ParallelProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ParallelProcessor.cs	(revision 1270)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Performs <c>n</c> operators on the given scope; operations can be executed in parallel.
+  /// </summary>
+  public class ParallelProcessor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Applies <c>n</c> operators on the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope to apply the operators on.</param>
+    /// <returns>A new <see cref="CompositeOperation"/> with the <c>n</c> operators applied 
+    /// to the given <paramref name="scope"/> with the <c>ExecuteInParallel</c> set to <c>true</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      CompositeOperation next = new CompositeOperation();
+      next.ExecuteInParallel = true;
+      for (int i = 0; i < SubOperators.Count; i++)
+        next.AddOperation(new AtomicOperation(SubOperators[i], scope));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ParallelSubScopesProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ParallelSubScopesProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ParallelSubScopesProcessor.cs	(revision 1270)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Performs <c>n</c> operators on <c>n</c> subscopes, operations can be executed in parallel.
+  /// </summary>
+  public class ParallelSubScopesProcessor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Applies <c>n</c> operators on all the <c>n</c> sub scopes of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope on whose sub scopes the operators are applied.</param>
+    /// <returns>A new <see cref="CompositeOperation"/> with the <c>i</c>th operator applied
+    /// on the <c>i</c>th sub scope, the <c>ExecuteInParallel</c> flag set to <c>true</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      CompositeOperation next = new CompositeOperation();
+      next.ExecuteInParallel = true;
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        next.AddOperation(new AtomicOperation(SubOperators[i], scope.SubScopes[i]));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Operators")]
+[assembly: AssemblyDescription("Various HeuristicLab operator classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("72c5cb1e-abed-4a66-b520-8a6b6ad9fba1")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ScopeCleaner.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ScopeCleaner.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/ScopeCleaner.cs	(revision 1270)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator that removes all variables in the given scope and deletes also all subscopes.
+  /// </summary>
+  public class ScopeCleaner : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Removes all variables in the current scope and deletes all subscopes"; }
+    }
+
+    /// <summary>
+    /// Deletes all variable and sub scopes from the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="IScope.Clear"/> of interface <see cref="IScope"/>.</remarks>
+    /// <param name="scope">The scope to clear.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      scope.Clear();
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SequentialProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SequentialProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SequentialProcessor.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Performs <c>n</c> operators on the given scope sequentially.
+  /// </summary>
+  public class SequentialProcessor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Applies <c>n</c> operators on the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope to apply the operators on.</param>
+    /// <returns>A new <see cref="CompositeOperation"/> with the <c>n</c> operators applied 
+    /// to the given <paramref name="scope"/>.</returns>
+    public override IOperation Apply(IScope scope) {
+      CompositeOperation next = new CompositeOperation();
+      for (int i = 0; i < SubOperators.Count; i++)
+        next.AddOperation(new AtomicOperation(SubOperators[i], scope));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SequentialSubScopesProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SequentialSubScopesProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SequentialSubScopesProcessor.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Performs <c>n</c> operators on <c>n</c> subscopes, operations must be executed sequentially.
+  /// </summary>
+  public class SequentialSubScopesProcessor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Applies <c>n</c> operators on all the <c>n</c> sub scopes of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope on whose sub scopes the operators are applied.</param>
+    /// <returns>A new <see cref="CompositeOperation"/> with the <c>i</c>th operator applied
+    /// on the <c>i</c>th sub scope.</returns>
+    public override IOperation Apply(IScope scope) {
+      CompositeOperation next = new CompositeOperation();
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        next.AddOperation(new AtomicOperation(SubOperators[i], scope.SubScopes[i]));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SingleObjectiveEvaluatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SingleObjectiveEvaluatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SingleObjectiveEvaluatorBase.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Calculates the quality of a solution candidate.
+  /// </summary>
+  public abstract class SingleObjectiveEvaluatorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="SingleObjectiveEvaluatorBase"/> with one variable info
+    /// (<c>Quality</c>).
+    /// </summary>
+    public SingleObjectiveEvaluatorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Evaluates the quality of a solution candidate.
+    /// </summary>
+    /// <remarks>Creates a new variable with the calculated quality if it not already exists, and 
+    /// injects it in the given <paramref name="scope"/> if it is not a local one.</remarks>
+    /// <param name="scope">The scope where to evaluate the quality.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      double qualityValue = Evaluate(scope);
+      DoubleData quality = GetVariableValue<DoubleData>("Quality", scope, false, false);
+      if (quality == null) {
+        quality = new DoubleData(qualityValue);
+        IVariableInfo qualityInfo = GetVariableInfo("Quality");
+        if (qualityInfo.Local)
+          AddVariable(new Variable(qualityInfo.ActualName, quality));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(qualityInfo.FormalName), quality));
+      } else {
+        quality.Data = qualityValue;
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Calculates the quality of a solution candidate in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to calculate the quality.</param>
+    /// <returns>A double value that indicates the quality.</returns>
+    protected abstract double Evaluate(IScope scope);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Sorter.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Sorter.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/Sorter.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Sorts all sub scopes of a given scope.
+  /// </summary>
+  public class Sorter : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="Sorter"/> with two variable infos
+    /// (<c>Descending</c> and <c>Value</c>).
+    /// </summary>
+    public Sorter()
+      : base() {
+      AddVariableInfo(new VariableInfo("Descending", "Sort in descending order", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Value", "Sorting value", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Sorts all sub scopes of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="IScope.ReorderSubScopes"/>.</remarks>
+    /// <param name="scope">The scope where to apply the sorting.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      bool descending = GetVariableValue<BoolData>("Descending", scope, true).Data;
+      double[] keys = new double[scope.SubScopes.Count];
+      int[] sequence = new int[keys.Length];
+
+      for (int i = 0; i < keys.Length; i++) {
+        keys[i] = scope.SubScopes[i].GetVariableValue<DoubleData>("Value", false).Data;
+        sequence[i] = i;
+      }
+
+      Array.Sort<double, int>(keys, sequence);
+
+      if (descending) {
+        int temp;
+        for (int i = 0; i < sequence.Length / 2; i++) {
+          temp = sequence[i];
+          sequence[i] = sequence[sequence.Length - 1 - i];
+          sequence[sequence.Length - 1 - i] = temp;
+        }
+      }
+      scope.ReorderSubScopes(sequence);
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/StochasticBranch.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/StochasticBranch.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/StochasticBranch.cs	(revision 1270)
@@ -0,0 +1,67 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Branch of (one or) two operators that have different probabilities to get executed.
+  /// </summary>
+  public class StochasticBranch : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="StochasticBranch"/> with two variable infos
+    /// (<c>Random</c> and <c>Probability</c>).
+    /// </summary>
+    public StochasticBranch()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Probability", "Probability to choose first branch", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Applies the operator of branch one with a specific probability on the given 
+    /// <paramref name="scope"/>, or - if existent - with another probability operator of branch two.  
+    /// </summary>
+    /// <param name="scope">The scope to apply the operators on.</param>
+    /// <returns>A new <see cref="AtomicOperation"/> with either operator 1 or operator 2 applied
+    /// to the given <paramref name="scope"/> or <c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      DoubleData probability = GetVariableValue<DoubleData>("Probability", scope, true);
+
+      bool result = random.NextDouble() < probability.Data;
+      if ((result) && (SubOperators.Count > 0) && (SubOperators[0] != null))
+        return new AtomicOperation(SubOperators[0], scope);
+      else if ((!result) && (SubOperators.Count > 1) && (SubOperators[1] != null))
+        return new AtomicOperation(SubOperators[1], scope);
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/StochasticMultiBranch.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/StochasticMultiBranch.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/StochasticMultiBranch.cs	(revision 1270)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Branch of operators that have different probabilities to get executed.
+  /// </summary>
+  public class StochasticMultiBranch : OperatorBase {
+    ///<inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="StochasticMultiBranch"/> with two variable infos
+    /// (<c>Probabilities</c> and <c>Random</c>).
+    /// </summary>
+    public StochasticMultiBranch()
+      : base() {
+      AddVariableInfo(new VariableInfo("Probabilities", "The probabilities, that define how likely each suboperator/graph is executed. This array must sum to 1", typeof(DoubleArrayData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "The pseudo random-generator, used for any random-decision.", typeof(IRandom), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Applies an operator of the branches to the specified <paramref name="scope"/> with a 
+    /// specific probability.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the list of probabilites does not
+    /// match the number of operators or if there was another problem with the list of probabilities.</exception>
+    /// <param name="scope">The scope to apply the operators on.</param>
+    /// <returns>A new <see cref="AtomicOperation"/> with a specific operator, depending 
+    /// on its probability, applied on the given <paramref name="scope"/>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      DoubleArrayData probabilities = GetVariableValue<DoubleArrayData>("Probabilities", scope, true);
+      if(probabilities.Data.Length != SubOperators.Count) {
+        throw new InvalidOperationException("StochasticMultiBranch: The list of probabilities has to match the number of operators");
+      }
+      double sum = 0;
+      foreach(double prob in probabilities.Data) {
+        sum+=prob;
+      }
+      double r = random.NextDouble()*sum;
+      sum = 0;
+      IOperator successor = null;
+      for(int i = 0; i < SubOperators.Count; i++) {
+        sum += probabilities.Data[i];
+        if(sum > r) {
+          successor = SubOperators[i];
+          break;
+        }
+      }
+      if(successor == null) {
+        throw new InvalidOperationException("StochasticMultiBranch: There was a problem with the list of probabilities");
+      }
+      return new AtomicOperation(successor, scope);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesCreater.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesCreater.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesCreater.cs	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to create sub scopes in a given scope.
+  /// </summary>
+  public class SubScopesCreater : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubScopesCreater"/> with one variable info (<c>SubScopes</c>).
+    /// </summary>
+    public SubScopesCreater()
+      : base() {
+      AddVariableInfo(new VariableInfo("SubScopes", "Number of sub-scopes", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Creates a specified number of sub scopes in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to create the sub scopes.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IntData count = GetVariableValue<IntData>("SubScopes", scope, true);
+
+      for (int i = 0; i < count.Data; i++)
+        scope.AddSubScope(new Scope(i.ToString()));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesMixer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesMixer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesMixer.cs	(revision 1270)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Mixes the sub scopes of a specified scope according to a specified number of partitions.
+  /// </summary>
+  public class SubScopesMixer : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubScopesMixer"/> with one variable infos 
+    /// (<c>Partitions</c>) and the <c>Local</c> flag set to <c>true</c>.
+    /// </summary>
+    public SubScopesMixer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Partitions", "Number of partitions to mix", typeof(IntData), VariableKind.In));
+      GetVariableInfo("Partitions").Local = true;
+      AddVariable(new Variable("Partitions", new IntData(2)));
+    }
+
+    /// <summary>
+    /// Mixes the subscopes of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="IScope.ReorderSubScopes"/>.<br/>
+    /// Mixing of sub scopes is based on the number of partitions.
+    /// <example>12 sub scopes and 3 partitions:<br/>
+    /// Partition 1 contains sub scopes 1-4, partition 2 sub scopes 5-8 and partition 3 sub scopes 9-12. <br/>
+    /// Mixing is realized by selecting at the beginning the first sub scope from partition one, then the 
+    /// first sub scope from partition 2, afterwards first sub scope from partition 3, 
+    /// then the second sub scope from the first partition and so on. <br/>
+    /// In the end the new sorting of the sub scopes is 1-5-9-2-6-10-3-7-11-4-8-12. 
+    /// </example>
+    /// </remarks>
+    /// <exception cref="ArgumentException">Thrown when the number of sub scopes cannot be divided by
+    /// the number of partitions without remainder.</exception>
+    /// <param name="scope">The scope whose sub scopes should be mixed.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int partitions = GetVariableValue<IntData>("Partitions", scope, true).Data;
+      int[] sequence = new int[scope.SubScopes.Count];
+      if ((sequence.Length % partitions) != 0)
+        throw new ArgumentException("The number of subScopes is not divisible by the number of partitions without remainder.");
+      int partitionSize = sequence.Length / partitions;
+
+      // mix sub-scopes -> alternately take one sub-scope from each partition
+      for (int i = 0; i < partitionSize; i++) {
+        for (int j = 0; j < partitions; j++)
+          sequence[i * partitions + j] = j * partitionSize + i;
+      }
+      scope.ReorderSubScopes(sequence);
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesRemover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesRemover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/SubScopesRemover.cs	(revision 1270)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Removes one specified or - if nothing specified - all operators from the given scope.
+  /// </summary>
+  public class SubScopesRemover : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"This operator either removes the subscope specified in the variable SubScopeIndex or if this variable is absent, removes all subscopes.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SubScopesRemover"/> with one variable info
+    /// (<c>SubScopeIndex</c>).
+    /// </summary>
+    public SubScopesRemover()
+      : base() {
+      AddVariableInfo(new VariableInfo("SubScopeIndex", "(Optional) the index of the subscope to remove", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Removes one sub scope with a specified index from the given <paramref name="scope"/>, or if no
+    /// index has been specified, all sub scopes are removed.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when no sub scope with the specified index 
+    /// exists.</exception>
+    /// <param name="scope">The scope whose sub scope(s) to remove.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IntData index = GetVariableValue<IntData>("SubScopeIndex", scope, true, false);
+      if (index == null) { // remove all scopes
+        while (scope.SubScopes.Count > 0) {
+          scope.RemoveSubScope(scope.SubScopes[0]);
+        }
+      } else {
+        if (index.Data < 0 && index.Data >= scope.SubScopes.Count) throw new InvalidOperationException("ERROR: no scope with index " + index.Data + " exists");
+        scope.RemoveSubScope(scope.SubScopes[index.Data]);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UnequalToComparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UnequalToComparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UnequalToComparator.cs	(revision 1270)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Operator to check whether two items are not equal to each other.
+  /// </summary>
+  public class UnequalToComparator : ComparatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UnequalToComparator"/>.
+    /// </summary>
+    public UnequalToComparator()
+      : base() {
+    }
+
+    /// <summary>
+    /// Checks whether the <paramref name="left"/> item is not equal to the <paramref name="right"/>.
+    /// </summary>
+    /// <param name="left">The left side of the comparison.</param>
+    /// <param name="right">The right side of the comparison.</param>
+    /// <returns><c>true</c> if the <paramref name="left"/> item is not equal
+    /// to the <paramref name="right"/>, <c>false</c> otherwise.</returns>
+    protected override bool Compare(IComparable left, IItem right) {
+      return left.CompareTo(right) != 0;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UniformParallelSubScopesProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UniformParallelSubScopesProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UniformParallelSubScopesProcessor.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Performs the same operator on all <c>n</c> existing sub scopes of a given scope; 
+  /// operations can be executed in parallel.
+  /// </summary>
+  public class UniformParallelSubScopesProcessor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Applies one operator on all the sub scopes of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope on whose sub scopes the operator is applied.</param>
+    /// <returns>A new <see cref="CompositeOperation"/> with one operator and all sub scopes and
+    /// the <c>ExecuteInParallel</c> flag set to <c>true</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      CompositeOperation next = new CompositeOperation();
+      next.ExecuteInParallel = true;
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        next.AddOperation(new AtomicOperation(SubOperators[0], scope.SubScopes[i]));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UniformSequentialSubScopesProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UniformSequentialSubScopesProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/UniformSequentialSubScopesProcessor.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Performs the same operator on all existing sub scopes of a given scope, 
+  /// must be executed sequentially.
+  /// </summary>
+  public class UniformSequentialSubScopesProcessor : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Applies one operator on all the sub scopes of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope on whose sub scopes the operator is applied.</param>
+    /// <returns>A new <see cref="CompositeOperation"/> with one operator and all sub scopes.</returns>
+    public override IOperation Apply(IScope scope) {
+      CompositeOperation next = new CompositeOperation();
+      for (int i = 0; i < scope.SubScopes.Count; i++)
+        next.AddOperation(new AtomicOperation(SubOperators[0], scope.SubScopes[i]));
+      return next;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjector.cs	(revision 1270)
@@ -0,0 +1,164 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Class to inject local variables into the scope.
+  /// </summary>
+  public class VariableInjector : OperatorBase {
+    private Dictionary<IVariable, IVariableInfo> variableVariableInfoTable;
+    private Dictionary<IVariableInfo, IVariable> variableInfoVariableTable;
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInjector"/>.
+    /// </summary>
+    public VariableInjector()
+      : base() {
+      variableVariableInfoTable = new Dictionary<IVariable, IVariableInfo>();
+      variableInfoVariableTable = new Dictionary<IVariableInfo, IVariable>();
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone performed with <see cref="Auxiliary.Clone"/> of helper class
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="VariableInjector"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      VariableInjector clone = new VariableInjector();
+      clonedObjects.Add(Guid, clone);
+      clone.Name = Name;
+      foreach (IVariable variable in Variables)
+        clone.AddVariable((IVariable)Auxiliary.Clone(variable, clonedObjects));
+      return clone;
+    }
+
+    /// <summary>
+    /// Adds the specified <paramref name="variable"/> to the current instance to get injected.
+    /// </summary>
+    /// <param name="variable">The variable to add.</param>
+    /// <remarks>Calls private method <see cref="CreateVariableInfo"/> and <see cref="OperatorBase.AddVariable"/>
+    /// of base class <see cref="OperatorBase"/>.</remarks>
+    public override void AddVariable(IVariable variable) {
+      base.AddVariable(variable);
+      CreateVariableInfo(variable);
+    }
+
+    /// <summary>
+    /// Removes a variable with the specified <paramref name="name"/> from the current injector.
+    /// </summary>
+    /// <remarks>Calls private method <see cref="DeleteVariableInfo"/> and <see cref="OperatorBase.RemoveVariable"/>
+    /// of base class <see cref="OperatorBase"/>.</remarks>
+    /// <param name="name">The name of the </param>
+    public override void RemoveVariable(string name) {
+      DeleteVariableInfo(name);
+      base.RemoveVariable(name);
+    }
+
+    /// <summary>
+    /// Adds the specified variables to the given <paramref name="scope"/> (and removes them first,
+    /// if they already exist in the current scope).
+    /// </summary>
+    /// <param name="scope">The scope where to inject the variables.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      foreach (IVariable variable in Variables) {
+        if (scope.GetVariable(variable.Name) != null)
+          scope.RemoveVariable(variable.Name);
+        scope.AddVariable((IVariable)variable.Clone());
+      }
+      return null;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="VariableInjectorView"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created view as <see cref="VariableInjectorView"/>.</returns>
+    public override IView CreateView() {
+      return new VariableInjectorView(this);
+    }
+
+    private void CreateVariableInfo(IVariable variable) {
+      IVariableInfo info = new VariableInfo(Guid.NewGuid().ToString(), "Injected variable", variable.Value.GetType(), VariableKind.New);
+      info.ActualName = variable.Name;
+      AddVariableInfo(info);
+      variableVariableInfoTable.Add(variable, info);
+      variableInfoVariableTable.Add(info, variable);
+      info.ActualNameChanged += new EventHandler(VariableInfo_ActualNameChanged);
+      variable.NameChanged += new EventHandler(Variable_NameChanged);
+    }
+    private void DeleteVariableInfo(string name) {
+      IVariable variable = GetVariable(name);
+      if (variable != null) {
+        IVariableInfo info = variableVariableInfoTable[variable];
+        RemoveVariableInfo(info.FormalName);
+        variableVariableInfoTable.Remove(variable);
+        variableInfoVariableTable.Remove(info);
+        info.ActualNameChanged -= new EventHandler(VariableInfo_ActualNameChanged);
+        variable.NameChanged -= new EventHandler(Variable_NameChanged);
+      }
+    }
+
+    #region VariableInfo and Variable Events
+    private void VariableInfo_ActualNameChanged(object sender, EventArgs e) {
+      IVariableInfo info = (IVariableInfo)sender;
+      IVariable variable = variableInfoVariableTable[info];
+      variable.Name = info.ActualName;
+    }
+    private void Variable_NameChanged(object sender, EventArgs e) {
+      IVariable variable = (IVariable)sender;
+      IVariableInfo info = variableVariableInfoTable[variable];
+      info.ActualName = variable.Name;
+    }
+    #endregion
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// <note type="caution"> Variable infos are not persisted!</note>
+    /// </summary>
+    /// <remarks>Calls <see cref="OperatorBase.GetXmlNode"/> of base class <see cref="OperatorBase"/>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      // variable infos should not be persisted
+      XmlNode infosNode = node.SelectSingleNode("VariableInfos");
+      infosNode.RemoveAll();
+      return node;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Operators {
+  partial class VariableInjectorView {
+    /// <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() {
+      components = new System.ComponentModel.Container();
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Operators/VariableInjectorView.cs	(revision 1270)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Operators {
+  /// <summary>
+  /// Visual representation of <see cref="VariableInjector"/>.
+  /// </summary>
+  public partial class VariableInjectorView : OperatorBaseView {
+    /// <summary>
+    /// Gets or sets the <see cref="HeuristicLab.Operators.VariableInjector"/> to display.
+    /// </summary>
+    /// <remarks>Uses property <see cref="OperatorBaseView.Operator"/> of base class
+    /// <see cref="OperatorBaseView"/>. No own data storage present.</remarks>
+    public VariableInjector VariableInjector {
+      get { return (VariableInjector)Operator; }
+      set { base.Operator = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInjectorView"/>.
+    /// </summary>
+    public VariableInjectorView() {
+      InitializeComponent();
+      tabControl.SelectedTab = variablesTabPage;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="VariableInjectorView"/> with the specified 
+    /// <paramref name="variableInjector"/>.
+    /// </summary>
+    /// <param name="variableInjector">The variable injector to display.</param>
+    public VariableInjectorView(VariableInjector variableInjector)
+      : this() {
+      VariableInjector = variableInjector;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,117 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.OptimizationFrontend {
+  partial class AboutDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.okButton = new System.Windows.Forms.Button();
+      this.pictureBox = new System.Windows.Forms.PictureBox();
+      this.textBox1 = new System.Windows.Forms.TextBox();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.Location = new System.Drawing.Point(295, 147);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 0;
+      this.okButton.Text = "&OK";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.pictureBox.Image = global::HeuristicLab.OptimizationFrontend.Properties.Resources.Logo_gray;
+      this.pictureBox.Location = new System.Drawing.Point(12, 12);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(159, 158);
+      this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+      this.pictureBox.TabIndex = 1;
+      this.pictureBox.TabStop = false;
+      // 
+      // textBox1
+      // 
+      this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
+      this.textBox1.Location = new System.Drawing.Point(177, 57);
+      this.textBox1.Multiline = true;
+      this.textBox1.Name = "textBox1";
+      this.textBox1.ReadOnly = true;
+      this.textBox1.Size = new System.Drawing.Size(193, 60);
+      this.textBox1.TabIndex = 3;
+      this.textBox1.Text = "HeuristicLab\r\nv. 3.0.0.0\r\n\r\n(c) 2002-2008 HEAL";
+      // 
+      // AboutDialog
+      // 
+      this.AcceptButton = this.okButton;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(382, 182);
+      this.Controls.Add(this.textBox1);
+      this.Controls.Add(this.pictureBox);
+      this.Controls.Add(this.okButton);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "AboutDialog";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "About HeuristicLab";
+      this.TopMost = true;
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button okButton;
+    private System.Windows.Forms.PictureBox pictureBox;
+    private System.Windows.Forms.TextBox textBox1;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.OptimizationFrontend {
+  public partial class AboutDialog : Form {
+    public AboutDialog() {
+      InitializeComponent();
+      textBox1.Text = @"HeuristicLab
+v." + Application.ProductVersion + @"
+
+(c) 2002-2008 HEAL";
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AboutDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.Designer.cs	(revision 1270)
@@ -0,0 +1,309 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.OptimizationFrontend {
+  partial class AvailableOperatorsForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AvailableOperatorsForm));
+      this.builtinOperatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+      this.builtinOperatorsTreeView = new System.Windows.Forms.TreeView();
+      this.builtinOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.operatorLibrariesTabPage = new System.Windows.Forms.TabPage();
+      this.operatorLibraryTextBox = new System.Windows.Forms.TextBox();
+      this.operatorLibraryLabel = new System.Windows.Forms.Label();
+      this.operatorLibraryOperatorsGroupBox = new System.Windows.Forms.GroupBox();
+      this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.operatorLibraryOperatorsTreeView = new System.Windows.Forms.TreeView();
+      this.operatorLibraryOperatorsDescriptionTextBox = new System.Windows.Forms.TextBox();
+      this.loadButton = new System.Windows.Forms.Button();
+      this.builtinTabPage = new System.Windows.Forms.TabPage();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.toolTip = new System.Windows.Forms.ToolTip(this.components);
+      this.builtinOperatorsGroupBox.SuspendLayout();
+      this.splitContainer2.Panel1.SuspendLayout();
+      this.splitContainer2.Panel2.SuspendLayout();
+      this.splitContainer2.SuspendLayout();
+      this.tabControl.SuspendLayout();
+      this.operatorLibrariesTabPage.SuspendLayout();
+      this.operatorLibraryOperatorsGroupBox.SuspendLayout();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.builtinTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // builtinOperatorsGroupBox
+      // 
+      this.builtinOperatorsGroupBox.Controls.Add(this.splitContainer2);
+      this.builtinOperatorsGroupBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsGroupBox.Location = new System.Drawing.Point(3, 3);
+      this.builtinOperatorsGroupBox.Name = "builtinOperatorsGroupBox";
+      this.builtinOperatorsGroupBox.Size = new System.Drawing.Size(594, 390);
+      this.builtinOperatorsGroupBox.TabIndex = 0;
+      this.builtinOperatorsGroupBox.TabStop = false;
+      this.builtinOperatorsGroupBox.Text = "&Available Operators";
+      // 
+      // splitContainer2
+      // 
+      this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer2.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer2.Name = "splitContainer2";
+      this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer2.Panel1
+      // 
+      this.splitContainer2.Panel1.Controls.Add(this.builtinOperatorsTreeView);
+      // 
+      // splitContainer2.Panel2
+      // 
+      this.splitContainer2.Panel2.Controls.Add(this.builtinOperatorsDescriptionTextBox);
+      this.splitContainer2.Size = new System.Drawing.Size(588, 371);
+      this.splitContainer2.SplitterDistance = 272;
+      this.splitContainer2.TabIndex = 2;
+      // 
+      // builtinOperatorsTreeView
+      // 
+      this.builtinOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsTreeView.HideSelection = false;
+      this.builtinOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
+      this.builtinOperatorsTreeView.Name = "builtinOperatorsTreeView";
+      this.builtinOperatorsTreeView.Size = new System.Drawing.Size(588, 272);
+      this.builtinOperatorsTreeView.TabIndex = 0;
+      this.builtinOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.builtinOperatorsTreeView_AfterSelect);
+      this.builtinOperatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.builtinOperatorsTreeView_ItemDrag);
+      // 
+      // builtinOperatorsDescriptionTextBox
+      // 
+      this.builtinOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.builtinOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.builtinOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.builtinOperatorsDescriptionTextBox.Multiline = true;
+      this.builtinOperatorsDescriptionTextBox.Name = "builtinOperatorsDescriptionTextBox";
+      this.builtinOperatorsDescriptionTextBox.ReadOnly = true;
+      this.builtinOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.builtinOperatorsDescriptionTextBox.Size = new System.Drawing.Size(588, 95);
+      this.builtinOperatorsDescriptionTextBox.TabIndex = 0;
+      // 
+      // 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.operatorLibrariesTabPage);
+      this.tabControl.Controls.Add(this.builtinTabPage);
+      this.tabControl.Location = new System.Drawing.Point(12, 12);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(608, 422);
+      this.tabControl.TabIndex = 0;
+      // 
+      // operatorLibrariesTabPage
+      // 
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryTextBox);
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryLabel);
+      this.operatorLibrariesTabPage.Controls.Add(this.operatorLibraryOperatorsGroupBox);
+      this.operatorLibrariesTabPage.Controls.Add(this.loadButton);
+      this.operatorLibrariesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.operatorLibrariesTabPage.Name = "operatorLibrariesTabPage";
+      this.operatorLibrariesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.operatorLibrariesTabPage.Size = new System.Drawing.Size(600, 396);
+      this.operatorLibrariesTabPage.TabIndex = 0;
+      this.operatorLibrariesTabPage.Text = "Operator Libraries";
+      this.operatorLibrariesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorLibraryTextBox
+      // 
+      this.operatorLibraryTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.operatorLibraryTextBox.Location = new System.Drawing.Point(97, 8);
+      this.operatorLibraryTextBox.Name = "operatorLibraryTextBox";
+      this.operatorLibraryTextBox.ReadOnly = true;
+      this.operatorLibraryTextBox.Size = new System.Drawing.Size(416, 20);
+      this.operatorLibraryTextBox.TabIndex = 2;
+      // 
+      // operatorLibraryLabel
+      // 
+      this.operatorLibraryLabel.AutoSize = true;
+      this.operatorLibraryLabel.Location = new System.Drawing.Point(6, 11);
+      this.operatorLibraryLabel.Name = "operatorLibraryLabel";
+      this.operatorLibraryLabel.Size = new System.Drawing.Size(85, 13);
+      this.operatorLibraryLabel.TabIndex = 1;
+      this.operatorLibraryLabel.Text = "&Operator Library:";
+      // 
+      // operatorLibraryOperatorsGroupBox
+      // 
+      this.operatorLibraryOperatorsGroupBox.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.operatorLibraryOperatorsGroupBox.Controls.Add(this.splitContainer1);
+      this.operatorLibraryOperatorsGroupBox.Enabled = false;
+      this.operatorLibraryOperatorsGroupBox.Location = new System.Drawing.Point(6, 35);
+      this.operatorLibraryOperatorsGroupBox.Name = "operatorLibraryOperatorsGroupBox";
+      this.operatorLibraryOperatorsGroupBox.Size = new System.Drawing.Size(588, 355);
+      this.operatorLibraryOperatorsGroupBox.TabIndex = 3;
+      this.operatorLibraryOperatorsGroupBox.TabStop = false;
+      this.operatorLibraryOperatorsGroupBox.Text = "&Available Operators";
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(3, 16);
+      this.splitContainer1.Name = "splitContainer1";
+      this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.operatorLibraryOperatorsTreeView);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.operatorLibraryOperatorsDescriptionTextBox);
+      this.splitContainer1.Size = new System.Drawing.Size(582, 336);
+      this.splitContainer1.SplitterDistance = 237;
+      this.splitContainer1.TabIndex = 1;
+      // 
+      // operatorLibraryOperatorsTreeView
+      // 
+      this.operatorLibraryOperatorsTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryOperatorsTreeView.HideSelection = false;
+      this.operatorLibraryOperatorsTreeView.Location = new System.Drawing.Point(0, 0);
+      this.operatorLibraryOperatorsTreeView.Name = "operatorLibraryOperatorsTreeView";
+      this.operatorLibraryOperatorsTreeView.ShowNodeToolTips = true;
+      this.operatorLibraryOperatorsTreeView.Size = new System.Drawing.Size(582, 237);
+      this.operatorLibraryOperatorsTreeView.TabIndex = 0;
+      this.operatorLibraryOperatorsTreeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.operatorsTreeView_AfterSelect);
+      this.operatorLibraryOperatorsTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.operatorLibraryOperatorsTreeView_ItemDrag);
+      // 
+      // operatorLibraryOperatorsDescriptionTextBox
+      // 
+      this.operatorLibraryOperatorsDescriptionTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorLibraryOperatorsDescriptionTextBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.operatorLibraryOperatorsDescriptionTextBox.Location = new System.Drawing.Point(0, 0);
+      this.operatorLibraryOperatorsDescriptionTextBox.Multiline = true;
+      this.operatorLibraryOperatorsDescriptionTextBox.Name = "operatorLibraryOperatorsDescriptionTextBox";
+      this.operatorLibraryOperatorsDescriptionTextBox.ReadOnly = true;
+      this.operatorLibraryOperatorsDescriptionTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+      this.operatorLibraryOperatorsDescriptionTextBox.Size = new System.Drawing.Size(582, 95);
+      this.operatorLibraryOperatorsDescriptionTextBox.TabIndex = 0;
+      // 
+      // loadButton
+      // 
+      this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.loadButton.Location = new System.Drawing.Point(519, 6);
+      this.loadButton.Name = "loadButton";
+      this.loadButton.Size = new System.Drawing.Size(75, 23);
+      this.loadButton.TabIndex = 0;
+      this.loadButton.Text = "&Load...";
+      this.loadButton.UseVisualStyleBackColor = true;
+      this.loadButton.Click += new System.EventHandler(this.loadButton_Click);
+      // 
+      // builtinTabPage
+      // 
+      this.builtinTabPage.Controls.Add(this.builtinOperatorsGroupBox);
+      this.builtinTabPage.Location = new System.Drawing.Point(4, 22);
+      this.builtinTabPage.Name = "builtinTabPage";
+      this.builtinTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.builtinTabPage.Size = new System.Drawing.Size(600, 396);
+      this.builtinTabPage.TabIndex = 1;
+      this.builtinTabPage.Text = "Built-In";
+      this.builtinTabPage.UseVisualStyleBackColor = true;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "library";
+      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.openFileDialog.Title = "Open file ...";
+      // 
+      // AvailableOperatorsForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.tabControl);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "AvailableOperatorsForm";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Available Operators";
+      this.builtinOperatorsGroupBox.ResumeLayout(false);
+      this.splitContainer2.Panel1.ResumeLayout(false);
+      this.splitContainer2.Panel2.ResumeLayout(false);
+      this.splitContainer2.Panel2.PerformLayout();
+      this.splitContainer2.ResumeLayout(false);
+      this.tabControl.ResumeLayout(false);
+      this.operatorLibrariesTabPage.ResumeLayout(false);
+      this.operatorLibrariesTabPage.PerformLayout();
+      this.operatorLibraryOperatorsGroupBox.ResumeLayout(false);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.Panel2.PerformLayout();
+      this.splitContainer1.ResumeLayout(false);
+      this.builtinTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox builtinOperatorsGroupBox;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage operatorLibrariesTabPage;
+    private System.Windows.Forms.TabPage builtinTabPage;
+    private System.Windows.Forms.TextBox operatorLibraryTextBox;
+    private System.Windows.Forms.Label operatorLibraryLabel;
+    private System.Windows.Forms.GroupBox operatorLibraryOperatorsGroupBox;
+    private System.Windows.Forms.TreeView operatorLibraryOperatorsTreeView;
+    private System.Windows.Forms.Button loadButton;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.ToolTip toolTip;
+    private System.Windows.Forms.TreeView builtinOperatorsTreeView;
+    private System.Windows.Forms.SplitContainer splitContainer2;
+    private System.Windows.Forms.TextBox builtinOperatorsDescriptionTextBox;
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private System.Windows.Forms.TextBox operatorLibraryOperatorsDescriptionTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.cs	(revision 1270)
@@ -0,0 +1,164 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.OptimizationFrontend {
+  public partial class AvailableOperatorsForm : Form {
+    #region Inner Class TreeNodeSorter
+    private class TreeNodeSorter : IComparer {
+      public int Compare(object x, object y) {
+        TreeNode tx = x as TreeNode;
+        TreeNode ty = y as TreeNode;
+
+        int result = string.Compare(tx.Text, ty.Text);
+        if (result == 0)
+          result = tx.Index.CompareTo(ty.Index);
+        return result;
+      }
+    }
+    #endregion
+
+    private IOperatorLibrary operatorLibrary;
+
+    public AvailableOperatorsForm() {
+      InitializeComponent();
+      operatorLibrary = null;
+      TreeNodeSorter nodeSorter = new TreeNodeSorter();
+      operatorLibraryOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
+      builtinOperatorsTreeView.TreeViewNodeSorter = nodeSorter;
+
+      DiscoveryService discoveryService = new DiscoveryService();
+      PluginInfo[] plugins = discoveryService.Plugins;
+      foreach(PluginInfo plugin in plugins) {
+        TreeNode pluginItem = new TreeNode();
+        pluginItem.Text = plugin.Name;
+        pluginItem.Tag = plugin;
+
+        Type[] operators = discoveryService.GetTypes(typeof(IOperator), plugin);
+        foreach(Type type in operators) {
+          if(!type.IsAbstract) {
+            TreeNode operatorItem = new TreeNode();
+            operatorItem.Text = type.Name;
+            operatorItem.Tag = type;
+            pluginItem.Nodes.Add(operatorItem);
+          }
+        }
+        // add plugin node only if it contains operators
+        if(pluginItem.Nodes.Count > 0) {
+          builtinOperatorsTreeView.Nodes.Add(pluginItem);
+        }
+      }
+      if (builtinOperatorsTreeView.Nodes.Count == 0) {
+        builtinOperatorsTreeView.Enabled = false;
+        builtinOperatorsTreeView.Nodes.Add("No operators available");
+      }
+      builtinOperatorsTreeView.Sort();
+    }
+
+    private void UpdateOperatorsTreeView() {
+      operatorLibraryOperatorsTreeView.Nodes.Clear();
+      operatorLibraryOperatorsTreeView.Nodes.Add(CreateTreeNode(operatorLibrary.Group));
+      operatorLibraryOperatorsTreeView.Sort();
+    }
+
+    private TreeNode CreateTreeNode(IOperatorGroup group) {
+      TreeNode node = new TreeNode();
+      node.Text = group.Name;
+      node.ForeColor = Color.LightGray;
+      node.Tag = group;
+
+      foreach (IOperator op in group.Operators)
+        node.Nodes.Add(CreateTreeNode(op));
+      foreach (IOperatorGroup subGroup in group.SubGroups)
+        node.Nodes.Add(CreateTreeNode(subGroup));
+      return node;
+    }
+    private TreeNode CreateTreeNode(IOperator op) {
+      TreeNode node = new TreeNode();
+      node.Text = op.Name;
+      node.ToolTipText = op.GetType().Name;
+      node.Tag = op;
+      return node;
+    }
+
+    #region Selection Events
+    private void operatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      operatorLibraryOperatorsDescriptionTextBox.Text = "";
+      if ((operatorLibraryOperatorsTreeView.SelectedNode != null) && (operatorLibraryOperatorsTreeView.SelectedNode.Tag is IOperator))
+        operatorLibraryOperatorsDescriptionTextBox.Text = ((IOperator)operatorLibraryOperatorsTreeView.SelectedNode.Tag).Description;
+    }
+    private void builtinOperatorsTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
+      builtinOperatorsDescriptionTextBox.Text = "";
+      if ((builtinOperatorsTreeView.SelectedNode != null) && (builtinOperatorsTreeView.SelectedNode.Tag is Type))
+        builtinOperatorsDescriptionTextBox.Text = ((IOperator)Activator.CreateInstance((Type)builtinOperatorsTreeView.SelectedNode.Tag)).Description;
+    }
+    #endregion
+
+    #region Click Events
+    private void loadButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        operatorLibrary = (IOperatorLibrary)PersistenceManager.Load(openFileDialog.FileName);
+        operatorLibraryTextBox.Text = openFileDialog.FileName;
+        toolTip.SetToolTip(operatorLibraryTextBox, openFileDialog.FileName);
+        operatorLibraryOperatorsGroupBox.Enabled = true;
+        UpdateOperatorsTreeView();
+      }
+    }
+    private void closeButton_Click(object sender, EventArgs e) {
+      this.Close();
+    }
+    #endregion
+
+    #region Drag and Drop Events
+    private void operatorLibraryOperatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = e.Item as TreeNode;
+      if ((node != null) && (node.Tag is IOperator)) {
+        IOperator op = (IOperator)node.Tag;
+        op = (IOperator)op.Clone();
+        DataObject data = new DataObject();
+        data.SetData("IOperator", op);
+        data.SetData("DragSource", operatorLibraryOperatorsTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    private void builtinOperatorsTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      TreeNode node = e.Item as TreeNode;
+      if ((node != null) && (node.Tag is Type)) {
+        IOperator op = (IOperator)Activator.CreateInstance((Type)node.Tag);
+        DataObject data = new DataObject();
+        data.SetData("IOperator", op);
+        data.SetData("DragSource", builtinOperatorsTreeView);
+        DoDragDrop(data, DragDropEffects.Copy);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/AvailableOperatorsForm.resx	(revision 1270)
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>141, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAQAEBAQAAAABAAoAQAARgAAACAgEAAAAAQA6AIAAG4BAAAQEAAAAAAYAGgDAABWBAAAICAAAAAA
+        GACoDAAAvgcAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAA
+        AAAAAHZgAREQAAAAeGAJERAAAAB4YAkREAAAAHhwBxEQAAAAeHAHERAAAAd4dwd3EAAAdwCHeHcQAACA
+        hwh4iBAAAICAeHF3EAAAeICHcIYAAAAAAAhwhwBwAAAACIeHd3AAAAAIBwiHgAAAAAiAd3gAAAAAAAAA
+        AAD//wAA8YcAAPGHAADxhwAA8YcAAPGHAADghwAAzAcAANIHAADUBwAAxE8AAP5FAAD+AQAA/qEAAP5D
+        AAD//wAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAIAAAIAAAACA
+        gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3AAAREREAAAAAAAAAAAcIhgAAkRERAAAAAAAAAAAHCI
+        YAAJeZEQAAAAAAAAAABwiGAACXmREAAAAAAAAAAAcIhwAAl5kRAAAAAAAAAAAHCIcAAJeZEQAAAAAAAA
+        AACAiHAACXmREAAAAAAAAAAAgIhwAAd5mRAAAAAAAAAAAICIcAAHd3cQAAAAAAAAAACAiHAAB4d3EAAA
+        AAAAAAAHgIh3AAeHdxAAAAAAAAAAd4CId3AHh3cQAAAAAAAAB3iACIdnB4h3UAAAAAAAAAeAAAAIdweI
+        h3AAAAAAAAAIAId3AHYIiIdwAAAAAAAACAh3B4CGCIiHcAAAAAAAAAgIcACAhwgACHAAAAAAAAAIAIcH
+        AIcId3RwAAAAAAAACIAHAAh3CHh0gAAAAAAAAAB4dwh3cAh4dIAAAAAAAAAAAAAAAAAAeHYAAGAAAAAA
+        AAAAAHd3BniHYGZgAAAAAAAAAAB4h3eIh3d3cAAAAAAAAAAAcIiIiId3h3AAAAAAAAAAAHAIiACIiHdw
+        AAAAAAAAAABwCIgAAAd3AAAAAAAAAAAAd3d4d3d3cAAAAAAAAAAAAAAAB3d3dwAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////weB//9Hgf//R4H//0eB//9Hgf//R4H//0eB//9H
+        gf//R4H//0eB//5Dgf/8QYH/+GCB//n4gf/7DIH/+iSB//p0uf/7LIH/+biB//whgf///8Pf//CBH//w
+        AB//9AAf//YwH//2Pj//8AB///+A////////////KAAAABAAAAAgAAAAAQAYAAAAAAAAAwAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAALVxT7FgOaVYMgAAAAAAAC8UjigRgCgRgC8UjgAAAAAAAAAAAAAAAAAAAAAAAAAAALtw
+        TP+zi6pdOAAAAAAAACwyzi0Tjy0Tjy4TjgAAAAAAAAAAAAAAAAAAAAAAAAAAAMR2Uf+4lK9iPAAAAAAA
+        AD9F0zMgnjMgni4TjgAAAAAAAAAAAAAAAAAAAAAAAAAAAMp9WP++nrZoQwAAAAAAAFJY2DgurTgurS4T
+        jgAAAAAAAAAAAAAAAAAAAAAAAAAAAM+DX/7Gqb5xSwAAAAAAAGds3z49vz49vy4TjgAAAAAAAAAAAAAA
+        AAAAAAAAALhvTdWKZv/NtLd0U7hvTQAAAHuA5ENMzkNMzjMgngAAAAAAAAAAAAAAAAAAALhvTdyTcf3h
+        0v3h0v3Uvq1pSLhvTY6T6UhZ3UhZ3TMgngAAAAAAAAAAAAAAAAAAAOagfv3y6/bVxNGLa/vu5v3Yw7hv
+        TZ6j7sPK+KGt9DMgngAAAAAAAAAAAAAAAAAAAOGff/vu5uGaeAAAANWLZ+XEs793Vi8UjntvZWNTQy8U
+        jgAAAAAAAAAAAAAAAAAAALhvTemhf+effQAAAOCZeL55WLhvTQAAAMG5sVlLPAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAK+jmX1tXwAAALSpoWNTQyojHAAAAG5cSwAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAMnAuLaqmmNTQ7a5spyUiVpVUW5cS6OalAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnAuPTw
+        6XxyaOrs5dHLwq2nonp1cb6soQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANnSzby0rAAAAKegl5CKgm1o
+        Yr6soQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+        AADxhwAA8YcAAPGHAADxhwAA8YcAAOCHAADABwAAwAcAAMQHAADETwAA/kUAAP4BAAD+AQAA/kMAAP//
+        AAAoAAAAIAAAAEAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAoYh4eWBNdlxIclhEoYh4AAAAAAAAAAAAAAAAGR+sLyVtKyFqKR5oJhtk
+        HBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnIFv7eXi
+        08K4vKSVZEk0AAAAAAAAAAAAAAAAISfKGR+sGB2rFxyqFhuqHBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoYd1AAAA08G5vKSVZ0w4AAAAAAAAAAAAAAAAJyzL
+        TFHWFx3HFBnGGiCtHBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAp418AAAA08G4vKOWalA8AAAAAAAAAAAAAAAALDLNU1fYHiTKGiDIICWwHBBaAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArpSEAAAA08G4vKOVb1RBAAAA
+        AAAAAAAAAAAAMzjPWl7ZJi3LISfKJiu0HBBaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAtZuMAAAA08K4vKOWdFpGAAAAAAAAAAAAAAAAOkDRYmbcMDbPKjDNLDK4
+        HhNcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKOXAAAA
+        08K4vKOWeGBMAAAAAAAAAAAAAAAAQUfTam/eOkDRNDnPNDm9IhdgAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwqygAAAA08G5u6SWf2VSAAAAAAAAAAAAAAAASE7V
+        dHjhRkvVP0XTOj/BJxxlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAybSpAAAA08G4vKOVg2tZAAAAAAAAAAAAAAAAUFXXfIDjUVfYS1DWQUfFLCNrAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0L20AAAA08G5vKOWinFgAAAA
+        AAAAAAAAAAAAV1zahormXmPbVlzaSU7KMilxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAoYh42Mi/AAAA2srDvKOVkHlnoYh4AAAAAAAAAAAAX2TckJPnaW/fY2jdUFXO
+        ODF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoYh4l39u2Mi/AAAA
+        4NLMxrGml39ufmNRoYh4AAAAAAAAZmzemp3rdnrjb3TgVlvTPzh/AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAoYh4l39uzLet2snDAAAA6+Lf39XQ1srDoIt8Y0gznIJwAAAAb3Th
+        oqbtgYbmeoDkW2HXRkCGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAp5WJ
+        yLeu7+nlAAAAAAAAAAAAAAAA7+nl0sa+n4h6jnprAAAAdnvjrK7vjJHphovoYGbaTUiOAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwK6k7eXiAAAA08G4iXNiiXNirZyP/Pz87+nl
+        qZOGaEw4AAAAfYPltLfylpvskJXqZWvcVVGWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAx7OpAAAA3tTPdVtHoYh4AAAAoYh44NfTAAAAtaCUblRAAAAAhYrnvL/0ubvytLfxZWvc
+        XFqeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzLmvAAAA2M3HdVtHAAAA
+        AAAAAAAAzsG4AAAAtaCUd11KAAAAhYrn7Oz74uP62tv4tLfxXFqeAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAxbClAAAAAAAAtaCUdVtHAAAAk3xrAAAAAAAAtaCUo5GDAAAAo6bu
+        jHt3qZ2WjIF7TD83fXy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuqKV
+        y7itAAAAAAAAdVtHAAAAAAAAAAAAxLetqZSGm4JxAAAAubvyh3Rp2NTRloyHTD83ubvyAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoYh4xrKnsZqNpIt7AAAAxrKnsZqNo4p6
+        oYh4AAAAAAAAubvyl4aC3NfVm5GKTEA5ubvyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouA4dvao5iQVEdA
+        AAAAAAAAAAAAAAAAT0I5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAnouAhHFlfWlfnouAAAAAT0I5ppOJz8bDrKCYYVNLT0I5AAAAT0I5T0I5WEk/AAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouA2tHNxr+5o46EkH1xp5iQ
+        sZ+U2M/JvK+pe2phW01EW01EW01EW01EXE9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAnouAAAAA5d7a0MS94dXOx7eu5tzX283G0L61o46EkH1xhHFlv7axZ1xV
+        XVZTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouAAAAA
+        7ejm4tzZ0MS94dXO/fz79fDu3tHKy7etv6ea49vXi3tydWpmbmZiAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnouAAAAAAAAArKShwrm03c/H+/n5/f388+/s8ezp
+        6+TgloqDkoR+fnVxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAnouAnouAnouAlI2KlY6K3dTQpZ6apJyYoZiUnpWRloyJiYF9hX15AAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlY6L
+        lo+LlY6LlI2KkoqHj4eEi4N/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
+        ////B4H//weB//9Hgf//R4H//0eB//9Hgf//R4H//0eB//9Hgf//R4H//kOB//xBgf/4QIH/+PCB//kA
+        gf/6JIH/+nSB//ssgf/5uIH//CGB////w9//8IEf//AAH//0AB//9AAf//YAP//wAH///4D/////////
+        //8=
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.Designer.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.OptimizationFrontend {
+  partial class EditorForm {
+    /// <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 (Editor != null) {
+        Editor.CaptionChanged -= new System.EventHandler(Editor_CaptionChanged);
+        Editor.FilenameChanged -= new System.EventHandler(Editor_FilenameChanged);
+      }
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditorForm));
+      this.editorPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // editorPanel
+      // 
+      this.editorPanel.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.editorPanel.Location = new System.Drawing.Point(12, 12);
+      this.editorPanel.Name = "editorPanel";
+      this.editorPanel.Size = new System.Drawing.Size(608, 422);
+      this.editorPanel.TabIndex = 0;
+      // 
+      // EditorForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.editorPanel);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "EditorForm";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "Editor";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel editorPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.cs	(revision 1270)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.OptimizationFrontend {
+  public partial class EditorForm : Form {
+    private IEditor myEditor;
+    public IEditor Editor {
+      get { return myEditor; }
+    }
+
+    public EditorForm() {
+      InitializeComponent();
+    }
+    public EditorForm(IEditor editor)
+      : this() {
+      myEditor = editor;
+      if (Editor != null) {
+        Control control = (Control)Editor;
+        control.Dock = DockStyle.Fill;
+        editorPanel.Controls.Add(control);
+        Editor.CaptionChanged += new EventHandler(Editor_CaptionChanged);
+        Editor.FilenameChanged += new EventHandler(Editor_FilenameChanged);
+        UpdateText();
+      } else {
+        Label errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No editor available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        editorPanel.Controls.Add(errorLabel);
+      }
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else {
+        if (Editor.Filename == null)
+          Text = "Untitled - " + Editor.Caption;
+        else
+          Text = Editor.Filename + " - " + Editor.Caption;
+      }
+    }
+
+    #region Editor Events
+    private void Editor_FilenameChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    private void Editor_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/EditorForm.resx	(revision 1270)
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLab.OptimizationFrontend.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLab.OptimizationFrontend.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLab.OptimizationFrontend.csproj	(revision 1270)
@@ -0,0 +1,166 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.OptimizationFrontend</RootNamespace>
+    <AssemblyName>HeuristicLab.OptimizationFrontend-3.2</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.OptimizationFrontend-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.OptimizationFrontend-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AboutDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AboutDialog.Designer.cs">
+      <DependentUpon>AboutDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="AvailableOperatorsForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AvailableOperatorsForm.Designer.cs">
+      <DependentUpon>AvailableOperatorsForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="EditorForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="EditorForm.Designer.cs">
+      <DependentUpon>EditorForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabOptimizationFrontendApplication.cs" />
+    <Compile Include="HeuristicLabOptimizationFrontendPlugin.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="ViewForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ViewForm.Designer.cs">
+      <DependentUpon>ViewForm.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Resources\HeuristicLab.ico" />
+    <Content Include="Resources\Logo_gray.gif" />
+    <Content Include="Resources\New.png" />
+    <Content Include="Resources\Open.png" />
+    <Content Include="Resources\Save.png" />
+    <Content Include="Resources\SaveAll.png" />
+    <Content Include="Resources\Tools.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="AboutDialog.resx">
+      <DependentUpon>AboutDialog.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="AvailableOperatorsForm.resx">
+      <DependentUpon>AvailableOperatorsForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="EditorForm.resx">
+      <DependentUpon>EditorForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ViewForm.resx">
+      <DependentUpon>ViewForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLabOptimizationFrontendApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLabOptimizationFrontendApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLabOptimizationFrontendApplication.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OptimizationFrontend {
+  [ClassInfo(Name = "HeuristicLab 3.2", Description="Next generation heuristic optimization environment.")]
+  class HeuristicLabOptimizationFrontendApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new MainForm();
+      PluginManager.ControlManager = (IControlManager)mainForm;
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLabOptimizationFrontendPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLabOptimizationFrontendPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/HeuristicLabOptimizationFrontendPlugin.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.OptimizationFrontend {
+  [ClassInfo(Name = "HeuristicLab.OptimizationFrontend-3.2")]
+  [PluginFile(Filename = "HeuristicLab.OptimizationFrontend-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabOptimizationFrontendPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.Designer.cs	(revision 1270)
@@ -0,0 +1,390 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.OptimizationFrontend {
+  partial class MainForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+      this.menuStrip = new System.Windows.Forms.MenuStrip();
+      this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.saveAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.closeAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
+      this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.availableOperatorsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.collectGarbageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.windowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.cascadeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.tileHorizontallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.tileVerticallyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.statusStrip = new System.Windows.Forms.StatusStrip();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+      this.toolStrip = new System.Windows.Forms.ToolStrip();
+      this.newToolStripDropDownButton = new System.Windows.Forms.ToolStripDropDownButton();
+      this.openToolStripButton = new System.Windows.Forms.ToolStripButton();
+      this.saveToolStripButton = new System.Windows.Forms.ToolStripButton();
+      this.saveAllToolStripButton = new System.Windows.Forms.ToolStripButton();
+      this.menuStrip.SuspendLayout();
+      this.toolStrip.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // menuStrip
+      // 
+      this.menuStrip.AllowMerge = false;
+      this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.fileToolStripMenuItem,
+            this.viewToolStripMenuItem,
+            this.toolsToolStripMenuItem,
+            this.windowToolStripMenuItem,
+            this.helpToolStripMenuItem});
+      this.menuStrip.Location = new System.Drawing.Point(0, 0);
+      this.menuStrip.Name = "menuStrip";
+      this.menuStrip.ShowItemToolTips = true;
+      this.menuStrip.Size = new System.Drawing.Size(792, 24);
+      this.menuStrip.TabIndex = 0;
+      // 
+      // fileToolStripMenuItem
+      // 
+      this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.newToolStripMenuItem,
+            this.openToolStripMenuItem,
+            this.saveToolStripMenuItem,
+            this.saveAsToolStripMenuItem,
+            this.saveAllToolStripMenuItem,
+            this.closeToolStripMenuItem,
+            this.closeAllToolStripMenuItem,
+            this.toolStripMenuItem1,
+            this.exitToolStripMenuItem});
+      this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
+      this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
+      this.fileToolStripMenuItem.Text = "&File";
+      // 
+      // newToolStripMenuItem
+      // 
+      this.newToolStripMenuItem.Name = "newToolStripMenuItem";
+      this.newToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.newToolStripMenuItem.Text = "&New";
+      // 
+      // openToolStripMenuItem
+      // 
+      this.openToolStripMenuItem.Name = "openToolStripMenuItem";
+      this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
+      this.openToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.openToolStripMenuItem.Text = "&Open...";
+      this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
+      // 
+      // saveToolStripMenuItem
+      // 
+      this.saveToolStripMenuItem.Enabled = false;
+      this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
+      this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
+      this.saveToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.saveToolStripMenuItem.Text = "&Save";
+      this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
+      // 
+      // saveAsToolStripMenuItem
+      // 
+      this.saveAsToolStripMenuItem.Enabled = false;
+      this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem";
+      this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.saveAsToolStripMenuItem.Text = "Save &As...";
+      this.saveAsToolStripMenuItem.Click += new System.EventHandler(this.saveAsToolStripMenuItem_Click);
+      // 
+      // saveAllToolStripMenuItem
+      // 
+      this.saveAllToolStripMenuItem.Enabled = false;
+      this.saveAllToolStripMenuItem.Name = "saveAllToolStripMenuItem";
+      this.saveAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
+                  | System.Windows.Forms.Keys.S)));
+      this.saveAllToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.saveAllToolStripMenuItem.Text = "Save Al&l";
+      this.saveAllToolStripMenuItem.Click += new System.EventHandler(this.saveAllToolStripMenuItem_Click);
+      // 
+      // closeToolStripMenuItem
+      // 
+      this.closeToolStripMenuItem.Enabled = false;
+      this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
+      this.closeToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.closeToolStripMenuItem.Text = "&Close";
+      this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+      // 
+      // closeAllToolStripMenuItem
+      // 
+      this.closeAllToolStripMenuItem.Enabled = false;
+      this.closeAllToolStripMenuItem.Name = "closeAllToolStripMenuItem";
+      this.closeAllToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.closeAllToolStripMenuItem.Text = "Clos&e All";
+      this.closeAllToolStripMenuItem.Click += new System.EventHandler(this.closeAllToolStripMenuItem_Click);
+      // 
+      // toolStripMenuItem1
+      // 
+      this.toolStripMenuItem1.Name = "toolStripMenuItem1";
+      this.toolStripMenuItem1.Size = new System.Drawing.Size(188, 6);
+      // 
+      // exitToolStripMenuItem
+      // 
+      this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+      this.exitToolStripMenuItem.Size = new System.Drawing.Size(191, 22);
+      this.exitToolStripMenuItem.Text = "E&xit";
+      this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
+      // 
+      // viewToolStripMenuItem
+      // 
+      this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.availableOperatorsToolStripMenuItem});
+      this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
+      this.viewToolStripMenuItem.Size = new System.Drawing.Size(41, 20);
+      this.viewToolStripMenuItem.Text = "&View";
+      // 
+      // availableOperatorsToolStripMenuItem
+      // 
+      this.availableOperatorsToolStripMenuItem.Name = "availableOperatorsToolStripMenuItem";
+      this.availableOperatorsToolStripMenuItem.Size = new System.Drawing.Size(192, 22);
+      this.availableOperatorsToolStripMenuItem.Text = "Available &Operators...";
+      this.availableOperatorsToolStripMenuItem.Click += new System.EventHandler(this.availableOperatorsToolStripMenuItem_Click);
+      // 
+      // toolsToolStripMenuItem
+      // 
+      this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.collectGarbageToolStripMenuItem});
+      this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem";
+      this.toolsToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
+      this.toolsToolStripMenuItem.Text = "&Tools";
+      // 
+      // collectGarbageToolStripMenuItem
+      // 
+      this.collectGarbageToolStripMenuItem.Name = "collectGarbageToolStripMenuItem";
+      this.collectGarbageToolStripMenuItem.Size = new System.Drawing.Size(161, 22);
+      this.collectGarbageToolStripMenuItem.Text = "Collect &Garbage";
+      this.collectGarbageToolStripMenuItem.Click += new System.EventHandler(this.collectGarbageToolStripMenuItem_Click);
+      // 
+      // windowToolStripMenuItem
+      // 
+      this.windowToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.cascadeToolStripMenuItem,
+            this.tileHorizontallyToolStripMenuItem,
+            this.tileVerticallyToolStripMenuItem});
+      this.windowToolStripMenuItem.Name = "windowToolStripMenuItem";
+      this.windowToolStripMenuItem.Size = new System.Drawing.Size(57, 20);
+      this.windowToolStripMenuItem.Text = "&Window";
+      // 
+      // cascadeToolStripMenuItem
+      // 
+      this.cascadeToolStripMenuItem.Enabled = false;
+      this.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem";
+      this.cascadeToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
+      this.cascadeToolStripMenuItem.Text = "&Cascade";
+      this.cascadeToolStripMenuItem.Click += new System.EventHandler(this.cascadeToolStripMenuItem_Click);
+      // 
+      // tileHorizontallyToolStripMenuItem
+      // 
+      this.tileHorizontallyToolStripMenuItem.Enabled = false;
+      this.tileHorizontallyToolStripMenuItem.Name = "tileHorizontallyToolStripMenuItem";
+      this.tileHorizontallyToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
+      this.tileHorizontallyToolStripMenuItem.Text = "Tile &Horizontally";
+      this.tileHorizontallyToolStripMenuItem.Click += new System.EventHandler(this.tileHorizontallyToolStripMenuItem_Click);
+      // 
+      // tileVerticallyToolStripMenuItem
+      // 
+      this.tileVerticallyToolStripMenuItem.Enabled = false;
+      this.tileVerticallyToolStripMenuItem.Name = "tileVerticallyToolStripMenuItem";
+      this.tileVerticallyToolStripMenuItem.Size = new System.Drawing.Size(160, 22);
+      this.tileVerticallyToolStripMenuItem.Text = "Tile &Vertically";
+      this.tileVerticallyToolStripMenuItem.Click += new System.EventHandler(this.tileVerticallyToolStripMenuItem_Click);
+      // 
+      // helpToolStripMenuItem
+      // 
+      this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.aboutToolStripMenuItem});
+      this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
+      this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
+      this.helpToolStripMenuItem.Text = "&Help";
+      // 
+      // aboutToolStripMenuItem
+      // 
+      this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
+      this.aboutToolStripMenuItem.Size = new System.Drawing.Size(114, 22);
+      this.aboutToolStripMenuItem.Text = "&About";
+      this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
+      // 
+      // statusStrip
+      // 
+      this.statusStrip.Location = new System.Drawing.Point(0, 544);
+      this.statusStrip.Name = "statusStrip";
+      this.statusStrip.Size = new System.Drawing.Size(792, 22);
+      this.statusStrip.TabIndex = 1;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "hl";
+      this.openFileDialog.FileName = "item";
+      this.openFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.openFileDialog.Title = "Open file ...";
+      // 
+      // saveFileDialog
+      // 
+      this.saveFileDialog.DefaultExt = "hl";
+      this.saveFileDialog.FileName = "item";
+      this.saveFileDialog.Filter = "HeuristicLab files|*.hl|All files|*.*";
+      this.saveFileDialog.Title = "Save file as ...";
+      // 
+      // toolStrip
+      // 
+      this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.newToolStripDropDownButton,
+            this.openToolStripButton,
+            this.saveToolStripButton,
+            this.saveAllToolStripButton});
+      this.toolStrip.Location = new System.Drawing.Point(0, 24);
+      this.toolStrip.Name = "toolStrip";
+      this.toolStrip.Size = new System.Drawing.Size(792, 25);
+      this.toolStrip.TabIndex = 3;
+      this.toolStrip.Text = "toolStrip";
+      // 
+      // newToolStripDropDownButton
+      // 
+      this.newToolStripDropDownButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.newToolStripDropDownButton.Image = global::HeuristicLab.OptimizationFrontend.Properties.Resources.New;
+      this.newToolStripDropDownButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.newToolStripDropDownButton.Name = "newToolStripDropDownButton";
+      this.newToolStripDropDownButton.Size = new System.Drawing.Size(29, 22);
+      this.newToolStripDropDownButton.Text = "New...";
+      // 
+      // openToolStripButton
+      // 
+      this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.openToolStripButton.Image = global::HeuristicLab.OptimizationFrontend.Properties.Resources.Open;
+      this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.openToolStripButton.Name = "openToolStripButton";
+      this.openToolStripButton.Size = new System.Drawing.Size(23, 22);
+      this.openToolStripButton.Text = "Open...";
+      this.openToolStripButton.Click += new System.EventHandler(this.openToolStripButton_Click);
+      // 
+      // saveToolStripButton
+      // 
+      this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.saveToolStripButton.Enabled = false;
+      this.saveToolStripButton.Image = global::HeuristicLab.OptimizationFrontend.Properties.Resources.Save;
+      this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.saveToolStripButton.Name = "saveToolStripButton";
+      this.saveToolStripButton.Size = new System.Drawing.Size(23, 22);
+      this.saveToolStripButton.Text = "Save";
+      this.saveToolStripButton.Click += new System.EventHandler(this.saveToolStripButton_Click);
+      // 
+      // saveAllToolStripButton
+      // 
+      this.saveAllToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+      this.saveAllToolStripButton.Enabled = false;
+      this.saveAllToolStripButton.Image = global::HeuristicLab.OptimizationFrontend.Properties.Resources.SaveAll;
+      this.saveAllToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.saveAllToolStripButton.Name = "saveAllToolStripButton";
+      this.saveAllToolStripButton.Size = new System.Drawing.Size(23, 22);
+      this.saveAllToolStripButton.Text = "Save all";
+      this.saveAllToolStripButton.Click += new System.EventHandler(this.saveAllToolStripButton_Click);
+      // 
+      // MainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(792, 566);
+      this.Controls.Add(this.toolStrip);
+      this.Controls.Add(this.statusStrip);
+      this.Controls.Add(this.menuStrip);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.IsMdiContainer = true;
+      this.MainMenuStrip = this.menuStrip;
+      this.Name = "MainForm";
+      this.Text = "HeuristicLab";
+      this.MdiChildActivate += new System.EventHandler(this.MainForm_MdiChildActivate);
+      this.menuStrip.ResumeLayout(false);
+      this.menuStrip.PerformLayout();
+      this.toolStrip.ResumeLayout(false);
+      this.toolStrip.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.MenuStrip menuStrip;
+    private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+    private System.Windows.Forms.StatusStrip statusStrip;
+    private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
+    private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem windowToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem cascadeToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem tileHorizontallyToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem tileVerticallyToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem closeAllToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.SaveFileDialog saveFileDialog;
+    private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem saveAllToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem collectGarbageToolStripMenuItem;
+    private System.Windows.Forms.ToolStrip toolStrip;
+    private System.Windows.Forms.ToolStripDropDownButton newToolStripDropDownButton;
+    private System.Windows.Forms.ToolStripButton openToolStripButton;
+    private System.Windows.Forms.ToolStripButton saveToolStripButton;
+    private System.Windows.Forms.ToolStripButton saveAllToolStripButton;
+    private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem availableOperatorsToolStripMenuItem;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.cs	(revision 1270)
@@ -0,0 +1,310 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+using System.IO;
+
+namespace HeuristicLab.OptimizationFrontend {
+  public partial class MainForm : Form, IControlManager {
+    #region Inner Types
+    private class Task {
+      public string filename;
+      public IStorable storable;
+      public IEditor editor;
+
+      private Task() { }
+      public Task(string filename, IStorable storable, IEditor editor) {
+        this.filename = filename;
+        this.storable = storable;
+        this.editor = editor;
+      }
+    }
+    #endregion
+
+    private object locker;
+    private int runningTasks;
+
+    public MainForm() {
+      InitializeComponent();
+
+      locker = new object();
+      runningTasks = 0;
+
+      DiscoveryService discoveryService = new DiscoveryService();
+
+      // discover creatable items
+      Type[] creatables = discoveryService.GetTypes(typeof(IEditable));
+      string[] names = new string[creatables.Length];
+      for(int i = 0; i < creatables.Length; i++)
+        names[i] = creatables[i].Name;
+      Array.Sort(names, creatables);
+      foreach(Type type in creatables) {
+        if(!type.IsAbstract) {
+          ToolStripMenuItem item = new ToolStripMenuItem();
+          item.Tag = type;
+          item.Text = "&" + type.Name + "...";
+          item.Click += new EventHandler(newToolStripMenuItem_Click);
+          newToolStripMenuItem.DropDownItems.Add(item);
+
+          item = new ToolStripMenuItem();
+          item.Tag = type;
+          item.Text = "&" + type.Name + "...";
+          item.Click += new EventHandler(newToolStripMenuItem_Click);
+          newToolStripDropDownButton.DropDownItems.Add(item);
+        }
+      }
+    }
+
+    #region IControlManager Members
+    public void ShowControl(IControl control) {
+      if(control is IEditor) {
+        EditorForm form = new EditorForm((IEditor)control);
+        form.MdiParent = this;
+        form.Show();
+      } else if(control is IView) {
+        ViewForm form = new ViewForm((IView)control);
+        form.MdiParent = this;
+        form.Show();
+      } else {
+        throw new InvalidOperationException("Control is neither a view nor an editor.");
+      }
+    }
+    #endregion
+
+    private void EnableDisableItems() {
+      closeToolStripMenuItem.Enabled = false;
+      closeAllToolStripMenuItem.Enabled = false;
+      saveToolStripMenuItem.Enabled = false;
+      saveToolStripButton.Enabled = false;
+      saveAsToolStripMenuItem.Enabled = false;
+      saveAllToolStripMenuItem.Enabled = false;
+      saveAllToolStripButton.Enabled = false;
+      cascadeToolStripMenuItem.Enabled = false;
+      tileHorizontallyToolStripMenuItem.Enabled = false;
+      tileVerticallyToolStripMenuItem.Enabled = false;
+
+      if(ActiveMdiChild != null) {
+        closeToolStripMenuItem.Enabled = true;
+        closeAllToolStripMenuItem.Enabled = true;
+        saveAllToolStripMenuItem.Enabled = true;
+        saveAllToolStripButton.Enabled = true;
+        cascadeToolStripMenuItem.Enabled = true;
+        tileHorizontallyToolStripMenuItem.Enabled = true;
+        tileVerticallyToolStripMenuItem.Enabled = true;
+        EditorForm form = ActiveMdiChild as EditorForm;
+        if(form != null) {
+          if(((Control)form.Editor).Enabled) {
+            saveToolStripMenuItem.Enabled = true;
+            saveToolStripButton.Enabled = true;
+            saveAsToolStripMenuItem.Enabled = true;
+          } else {
+            closeToolStripMenuItem.Enabled = false;
+            closeAllToolStripMenuItem.Enabled = false;
+          }
+        }
+      }
+    }
+
+    #region Open and Save Methods
+    private void Open() {
+      if(openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        lock(locker) runningTasks++;
+        Cursor = Cursors.AppStarting;
+        Task task = new Task(openFileDialog.FileName, null, null);
+        ThreadPool.QueueUserWorkItem(new WaitCallback(AsynchronousLoad), task);
+      }
+    }
+    private void AsynchronousLoad(object state) {
+      Task task = (Task)state;
+      try {
+        task.storable = PersistenceManager.Load(task.filename);
+      } catch(FileNotFoundException ex) {
+        MessageBox.Show("Sorry couldn't open file \"" + task.filename + "\".\nThe file or plugin \"" + ex.FileName + "\" is not available.\nPlease make sure you have all necessary plugins installed.",
+          "Reader Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } catch(TypeLoadException typeLoadEx) {
+        MessageBox.Show("Sorry couldn't open file \"" + task.filename + "\".\nThe type \"" + typeLoadEx.TypeName + "\" is not available.\nPlease make sure that you have the correct version the plugin installed.",
+          "Reader Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      }
+
+      LoadFinished(task);
+    }
+    private delegate void TaskFinishedDelegate(Task task);
+    private void LoadFinished(Task task) {
+      if(InvokeRequired)
+        Invoke(new TaskFinishedDelegate(LoadFinished), task);
+      else {
+        IEditor editor = null;
+        if(task.storable != null) {
+          IEditable editable = task.storable as IEditable;
+          if(editable != null)
+            editor = editable.CreateEditor();
+        }
+        if(editor == null)
+          MessageBox.Show("Could not open item. The selected item doesn't provide an editor.", "Editor Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        else {
+          editor.Filename = task.filename;
+          PluginManager.ControlManager.ShowControl(editor);
+        }
+        lock(locker) {
+          runningTasks--;
+          if(runningTasks == 0)
+            Cursor = Cursors.Default;
+        }
+      }
+    }
+    private void Save(EditorForm form) {
+      if(form.Editor.Filename == null)
+        SaveAs(form);
+      else {
+        lock(locker) runningTasks++;
+        Cursor = Cursors.AppStarting;
+        ((Control)form.Editor).Enabled = false;
+        EnableDisableItems();
+        Task task = new Task(form.Editor.Filename, form.Editor.Item, form.Editor);
+        ThreadPool.QueueUserWorkItem(new WaitCallback(AsynchronousSave), task);
+      }
+    }
+    private void SaveAs(EditorForm form) {
+      if(saveFileDialog.ShowDialog(this) == DialogResult.OK) {
+        form.Editor.Filename = saveFileDialog.FileName;
+        Save(form);
+      }
+    }
+    private void AsynchronousSave(object state) {
+      Task task = (Task)state;
+      PersistenceManager.Save(task.storable, task.filename);
+      SaveFinished(task);
+    }
+    private void SaveFinished(Task task) {
+      if(InvokeRequired)
+        Invoke(new TaskFinishedDelegate(SaveFinished), task);
+      else {
+        ((Control)task.editor).Enabled = true;
+        EnableDisableItems();
+        lock(locker) {
+          runningTasks--;
+          if(runningTasks == 0)
+            Cursor = Cursors.Default;
+        }
+      }
+    }
+    #endregion
+
+    private void MainForm_MdiChildActivate(object sender, EventArgs e) {
+      EnableDisableItems();
+    }
+
+    #region Menu Events
+    private void newToolStripMenuItem_Click(object sender, EventArgs e) {
+      ToolStripItem item = (ToolStripItem)sender;
+      Type type = (Type)item.Tag;
+      IEditable editable = (IEditable)Activator.CreateInstance(type);
+      if(editable == null) {
+        MessageBox.Show("The selected item is not editable.", "Editable Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+      } else {
+        IEditor editor = editable.CreateEditor();
+        if(editor == null) {
+          MessageBox.Show("The selected item doesn't provide an editor.", "Editor Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+        } else {
+          PluginManager.ControlManager.ShowControl(editor);
+          EnableDisableItems();
+        }
+      }
+    }
+    private void openToolStripMenuItem_Click(object sender, EventArgs e) {
+      Open();
+    }
+    private void saveToolStripMenuItem_Click(object sender, EventArgs e) {
+      EditorForm form = ActiveMdiChild as EditorForm;
+      Save(form);
+    }
+    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) {
+      EditorForm form = ActiveMdiChild as EditorForm;
+      SaveAs(form);
+    }
+    private void saveAllToolStripMenuItem_Click(object sender, EventArgs e) {
+      for(int i = 0; i < MdiChildren.Length; i++) {
+        EditorForm form = MdiChildren[i] as EditorForm;
+        if(((Control)form.Editor).Enabled) Save(form);
+      }
+    }
+    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
+      ActiveMdiChild.Close();
+      EnableDisableItems();
+    }
+    private void closeAllToolStripMenuItem_Click(object sender, EventArgs e) {
+      while(MdiChildren.Length > 0)
+        MdiChildren[0].Close();
+      EnableDisableItems();
+    }
+    private void exitToolStripMenuItem_Click(object sender, EventArgs e) {
+      Application.Exit();
+    }
+    private void availableOperatorsToolStripMenuItem_Click(object sender, EventArgs e) {
+      AvailableOperatorsForm form = new AvailableOperatorsForm();
+      form.MdiParent = this;
+      form.Show();
+    }
+    private void collectGarbageToolStripMenuItem_Click(object sender, EventArgs e) {
+      GC.Collect();
+    }
+    private void cascadeToolStripMenuItem_Click(object sender, EventArgs e) {
+      LayoutMdi(MdiLayout.Cascade);
+    }
+    private void tileHorizontallyToolStripMenuItem_Click(object sender, EventArgs e) {
+      LayoutMdi(MdiLayout.TileHorizontal);
+    }
+    private void tileVerticallyToolStripMenuItem_Click(object sender, EventArgs e) {
+      LayoutMdi(MdiLayout.TileVertical);
+    }
+    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
+      AboutDialog dialog = new AboutDialog();
+      dialog.ShowDialog(this);
+      dialog.Dispose();
+    }
+    #endregion
+
+    #region ToolStrip Events
+    private void openToolStripButton_Click(object sender, EventArgs e) {
+      Open();
+    }
+    private void saveToolStripButton_Click(object sender, EventArgs e) {
+      EditorForm form = ActiveMdiChild as EditorForm;
+      Save(form);
+    }
+    private void saveAllToolStripButton_Click(object sender, EventArgs e) {
+      for(int i = 0; i < MdiChildren.Length; i++) {
+        EditorForm form = MdiChildren[i] as EditorForm;
+        if(form != null && ((Control)form.Editor).Enabled) Save(form);
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/MainForm.resx	(revision 1270)
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>212, 17</value>
+  </metadata>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>316, 17</value>
+  </metadata>
+  <metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>440, 17</value>
+  </metadata>
+  <metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>119, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.OptimizationFrontend")]
+[assembly: AssemblyDescription("HeuristicLab application for heuristic optimization")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("ca725686-f020-4a7e-82c7-1b4d03e61bab")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.1433
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.OptimizationFrontend.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.OptimizationFrontend.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Logo_gray {
+            get {
+                object obj = ResourceManager.GetObject("Logo_gray", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap New {
+            get {
+                object obj = ResourceManager.GetObject("New", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Open {
+            get {
+                object obj = ResourceManager.GetObject("Open", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Save {
+            get {
+                object obj = ResourceManager.GetObject("Save", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap SaveAll {
+            get {
+                object obj = ResourceManager.GetObject("SaveAll", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,136 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Logo_gray" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Logo_gray.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="New" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Open" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Open.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Save" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Save.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="SaveAll" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\SaveAll.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.Designer.cs	(revision 1270)
@@ -0,0 +1,82 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.OptimizationFrontend {
+  partial class ViewForm {
+    /// <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 (View != null)
+        View.CaptionChanged -= new System.EventHandler(View_CaptionChanged);
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ViewForm));
+      this.viewPanel = new System.Windows.Forms.Panel();
+      this.SuspendLayout();
+      // 
+      // viewPanel
+      // 
+      this.viewPanel.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.viewPanel.Location = new System.Drawing.Point(12, 12);
+      this.viewPanel.Name = "viewPanel";
+      this.viewPanel.Size = new System.Drawing.Size(608, 422);
+      this.viewPanel.TabIndex = 0;
+      // 
+      // ViewForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(632, 446);
+      this.Controls.Add(this.viewPanel);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "ViewForm";
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "View";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel viewPanel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.cs	(revision 1270)
@@ -0,0 +1,73 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.OptimizationFrontend {
+  public partial class ViewForm : Form {
+    private IView myView;
+    public IView View {
+      get { return myView; }
+    }
+
+    public ViewForm() {
+      InitializeComponent();
+    }
+    public ViewForm(IView view)
+      : this() {
+      myView = view;
+      if (View != null) {
+        Control control = (Control)View;
+        control.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(control);
+        View.CaptionChanged += new EventHandler(View_CaptionChanged);
+        UpdateText();
+      } else {
+        Label errorLabel = new Label();
+        errorLabel.Name = "errorLabel";
+        errorLabel.Text = "No view available";
+        errorLabel.AutoSize = false;
+        errorLabel.Dock = DockStyle.Fill;
+        viewPanel.Controls.Add(errorLabel);
+      }
+    }
+
+    private void UpdateText() {
+      if (InvokeRequired)
+        Invoke(new MethodInvoker(UpdateText));
+      else
+        Text = View.Caption;
+    }
+
+    #region View Events
+    private void View_CaptionChanged(object sender, EventArgs e) {
+      UpdateText();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.OptimizationFrontend/ViewForm.resx	(revision 1270)
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/AbsolutePositionTopologicalCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/AbsolutePositionTopologicalCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/AbsolutePositionTopologicalCrossover.cs	(revision 1270)
@@ -0,0 +1,89 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permutation arrays by taking
+  /// the entries with the same index (starting at position 0) from both parents 
+  /// (minding already inserted values).
+  /// </summary>
+  /// <example>First take the value at position 0 from parent1 then take the value at position 0
+  /// from parent2 if it has not already been inserted, afterwards take the value at position 1 from
+  /// parent1 if it has not already been inserted, then from parent2 and so on.</example>
+  public class AbsolutePositionTopologicalCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="parent2"/>
+    /// by taking the values from both parents one by one with the same index starting at position 0.
+    /// </summary>
+    /// <example>First take the value at position 0 from parent1 then take the value at position 0
+    /// from parent2 if it has not already been inserted, afterwards take the value at position 1 from
+    /// parent1 if it has not already been inserted, then from parent2 and so on.</example>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      bool[] numberCopied = new bool[length];
+      int index;
+
+      index = 0;
+      for (int i = 0; i < length; i++) {  // copy numbers from both parent permutations
+        if (!numberCopied[parent1[i]]) {
+          result[index] = parent1[i];
+          numberCopied[parent1[i]] = true;
+          index++;
+        }
+        if (!numberCopied[parent2[i]]) {
+          result[index] = parent2[i];
+          numberCopied[parent2[i]] = true;
+          index++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs an absolute position topological crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in AbsolutePositionTopologicalCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/CosaCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/CosaCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/CosaCrossover.cs	(revision 1270)
@@ -0,0 +1,100 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permutation arrays by taking randomly chosen 
+  /// reverse and forward intervals from the first permutation array inserting 
+  /// it in the child on different positions depending on the second permutation array.
+  /// </summary>
+  public class CosaCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="parent2"/>
+    /// by taking first the reverse elements of a randomly chosen interval of parent1 
+    /// and inserting it in the result at a position specified by the permutation of parent2. 
+    /// The remaining elements to be inserted are taken again from parent1 in the forward direction.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      int crossPoint, startIndex, endIndex;
+
+      crossPoint = random.Next(length);
+      startIndex = (crossPoint + 1) % length;
+
+      int i = 0;
+      while ((i < parent2.Length) && (parent2[i] != parent1[startIndex])) {  // find index of start value in second permutation
+        i++;
+      }
+      i = (i + 1) % length;
+      int j = 0;
+      while ((j < parent1.Length) && (parent1[j] != parent2[i])) {  // find index of parent2[i] in first permutation
+        j++;
+      }
+      endIndex = (j - 1 + length) % length;
+
+      i = endIndex;
+      j = 0;
+      do {  // permutation from end to crosspoint (backwards)
+        result[j] = parent1[i];
+        i = (i - 1 + length) % length;
+        j++;
+      } while (i != crossPoint);
+
+      i = (endIndex + 1) % length;
+      while (i != crossPoint) {  // permutation from end to crosspoint (forwards)
+        result[j] = parent1[i];
+        i = (i + 1) % length;
+        j++;
+      }
+      result[j] = parent1[crossPoint];  // last station: crosspoint
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a COSA crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in CosaCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/CyclicCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/CyclicCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/CyclicCrossover.cs	(revision 1270)
@@ -0,0 +1,94 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two int arrays by taking first a whole cycle and then the
+  /// missing ones from the second parent.
+  /// </summary>
+  /// <remarks>A whole cycle means: <br/>
+  /// Start at a randomly chosen position x in parent1 and transfer it to the child at the same position.
+  /// Now this position x is no longer available for the node on position x in parent2, so
+  /// the value of the node at position x in parent2 is searched in parent1 and is then transferred
+  /// to the child preserving the position. Now this new position y is no longer available for the node in parent2 ....<br/>
+  /// This procedure is repeated till it is again at position x, then the cycle is over.
+  /// </remarks>
+  public class CyclicCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="parent2"/>
+    /// by copying a whole cycle starting at a randomly chosen position in parent1 and taking the rest
+    /// from parent2.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      bool[] indexCopied = new bool[length];
+      int j, number;
+
+      j = random.Next(length);  // get number to start cycle
+      while (!indexCopied[j]) {  // copy whole cycle to new permutation
+        result[j] = parent1[j];
+        number = parent2[j];
+        indexCopied[j] = true;
+
+        j = 0;
+        while ((j < length) && (parent1[j] != number)) {  // search copied number in second permutation
+          j++;
+        }
+      }
+
+      for (int i = 0; i < length; i++) {  // copy rest of secound permutation to new permutation
+        if (!indexCopied[i]) {
+          result[i] = parent2[i];
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a cyclic crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in CyclicCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/EdgeRecombinationCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/EdgeRecombinationCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/EdgeRecombinationCrossover.cs	(revision 1270)
@@ -0,0 +1,153 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permutation arrays by calculating the edges (neighbours)
+  /// of each element. Starts at a randomly chosen position, the next element is a neighbour with the least 
+  /// number of neighbours, the next again a neighbour and so on.
+  /// </summary>
+  public class EdgeRecombinationCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="2"/>
+    /// by calculating the edges of each element. Starts at a randomly chosen position, 
+    /// the next element is a neighbour with the least 
+    /// number of neighbours, the next again a neighbour and so on.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the permutation lacks a number.
+    /// </exception>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      int[,] edgeList = new int[length, 4];
+      bool[] remainingNumbers = new bool[length];
+      int index, currentEdge, currentNumber, nextNumber, currentEdgeCount, minEdgeCount;
+
+      for (int i = 0; i < length; i++) {  // generate edge list for every number
+        remainingNumbers[i] = true;
+
+        index = 0;
+        while ((index < length) && (parent1[index] != i)) {  // search edges in parent1
+          index++;
+        }
+        if (index == length) {
+          throw (new InvalidOperationException("Permutation doesn't contain number " + i + "."));
+        } else {
+          edgeList[i, 0] = parent1[(index - 1 + length) % length];
+          edgeList[i, 1] = parent1[(index + 1) % length];
+        }
+        index = 0;
+        while ((index < length) && (parent2[index] != i)) {  // search edges in parent2
+          index++;
+        }
+        if (index == length) {
+          throw (new InvalidOperationException("Permutation doesn't contain number " + i + "."));
+        } else {
+          currentEdge = parent2[(index - 1 + length) % length];
+          if ((edgeList[i, 0] != currentEdge) && (edgeList[i, 1] != currentEdge)) {  // new edge found ?
+            edgeList[i, 2] = currentEdge;
+          } else {
+            edgeList[i, 2] = -1;
+          }
+          currentEdge = parent2[(index + 1) % length];
+          if ((edgeList[i, 0] != currentEdge) && (edgeList[i, 1] != currentEdge)) {  // new edge found ?
+            edgeList[i, 3] = currentEdge;
+          } else {
+            edgeList[i, 3] = -1;
+          }
+        }
+      }
+
+      currentNumber = random.Next(length);  // get number to start
+      for (int i = 0; i < length; i++) {
+        result[i] = currentNumber;
+        remainingNumbers[currentNumber] = false;
+
+        for (int j = 0; j < 4; j++) {  // remove all edges to / from currentNumber
+          if (edgeList[currentNumber, j] != -1) {
+            for (int k = 0; k < 4; k++) {
+              if (edgeList[edgeList[currentNumber, j], k] == currentNumber) {
+                edgeList[edgeList[currentNumber, j], k] = -1;
+              }
+            }
+          }
+        }
+
+        minEdgeCount = 5;  // every number hasn't more than 4 edges
+        nextNumber = -1;
+        for (int j = 0; j < 4; j++) {  // find next number with least edges
+          if (edgeList[currentNumber, j] != -1) {  // next number found
+            currentEdgeCount = 0;
+            for (int k = 0; k < 4; k++) {  // count edges of next number
+              if (edgeList[edgeList[currentNumber, j], k] != -1) {
+                currentEdgeCount++;
+              }
+            }
+            if ((currentEdgeCount < minEdgeCount) ||
+              ((currentEdgeCount == minEdgeCount) && (random.NextDouble() < 0.5))) {
+              nextNumber = edgeList[currentNumber, j];
+              minEdgeCount = currentEdgeCount;
+            }
+          }
+        }
+        currentNumber = nextNumber;
+        if (currentNumber == -1) {  // current number has no more edge
+          index = 0;
+          while ((index < length) && (!remainingNumbers[index])) {  // choose next remaining number
+            index++;
+          }
+          if (index < length) {
+            currentNumber = index;
+          }
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs an edge recombination crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in EdgeRecombinationCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/HeuristicLab.Permutation.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/HeuristicLab.Permutation.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/HeuristicLab.Permutation.csproj	(revision 1270)
@@ -0,0 +1,143 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Permutation</RootNamespace>
+    <AssemblyName>HeuristicLab.Permutation-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Permutation-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Permutation-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AbsolutePositionTopologicalCrossover.cs" />
+    <Compile Include="CosaCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="CyclicCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="EdgeRecombinationCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="InsertionManipulator.cs" />
+    <Compile Include="InversionManipulator.cs" />
+    <Compile Include="MaximalPreservativeCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="OrderBasedCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="OrderCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="PartiallyMatchedCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="PermutationCrossoverBase.cs" />
+    <Compile Include="HeuristicLabPermutationPlugin.cs" />
+    <Compile Include="Permutation.cs" />
+    <Compile Include="PermutationManipulatorBase.cs" />
+    <Compile Include="PositionBasedCrossover.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RandomPermutationGenerator.cs" />
+    <Compile Include="ScrambleManipulator.cs" />
+    <Compile Include="Swap2Manipulator.cs" />
+    <Compile Include="Swap3Manipulator.cs" />
+    <Compile Include="TranslocationInversionManipulator.cs" />
+    <Compile Include="TranslocationManipulator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/HeuristicLabPermutationPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/HeuristicLabPermutationPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/HeuristicLabPermutationPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Permutation plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Permutation-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Permutation-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Evolutionary-3.2")]
+  public class HeuristicLabRandomPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/InsertionManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/InsertionManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/InsertionManipulator.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by moving randomly one element to another position in the array.
+  /// </summary>
+  public class InsertionManipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Moves an randomly chosen element in the specified <paramref name="permutation"/> array 
+    /// to another randomly generated position.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int cutIndex, insertIndex, number;
+
+      cutIndex = random.Next(permutation.Length);
+      insertIndex = random.Next(permutation.Length);
+      number = permutation[cutIndex];
+
+      int i = 0;  // index in new permutation
+      int j = 0;  // index in old permutation
+      while (i < permutation.Length) {
+        if (j == cutIndex) {
+          j++;
+        }
+        if (i == insertIndex) {
+          result[i] = number;
+          i++;
+        }
+        if ((i < permutation.Length) && (j < permutation.Length)) {
+          result[i] = permutation[j];
+          i++;
+          j++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Moves an randomly chosen element in the specified <paramref name="permutation"/> array 
+    /// to another randomly generated position.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/InversionManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/InversionManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/InversionManipulator.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by reversing a randomly chosen interval.
+  /// </summary>
+  public class InversionManipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Reverses the specified <paramref name="permutation"/> between two randomly generated positions.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int breakPoint1, breakPoint2;
+
+      breakPoint1 = random.Next(result.Length - 1);
+      do {
+        breakPoint2 = random.Next(result.Length - 1);
+      } while (breakPoint2 == breakPoint1);
+      if (breakPoint2 < breakPoint1) { int h = breakPoint1; breakPoint1 = breakPoint2; breakPoint2 = h; }
+
+      for (int i = 0; i <= (breakPoint2 - breakPoint1); i++) {  // reverse permutation between breakpoints
+        result[breakPoint1 + i] = permutation[breakPoint2 - i];
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Reverses the specified <paramref name="permutation"/> between two randomly generated positions.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/MaximalPreservativeCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/MaximalPreservativeCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/MaximalPreservativeCrossover.cs	(revision 1270)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permuation arrays by preserving a preferably big
+  /// region from one permutation array.
+  /// </summary>
+  public class MaximalPreservativeCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="parent2"/>
+    /// by preserving a preferably big randomly chosen region of one permutation and taking 
+    /// the missing ones from the other permuation array.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The permutation array of parent 1.</param>
+    /// <param name="parent2">The permutation array of parent 2.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      bool[] numberCopied = new bool[length];
+      int breakPoint1, breakPoint2, subsegmentLength, index;
+
+      if (length >= 20) {  // length of subsegment must be >= 10 and <= length / 2
+        breakPoint1 = random.Next(length - 9);
+        subsegmentLength = random.Next(10, Math.Min((int)(length / 2), length - breakPoint1) + 1);
+        breakPoint2 = breakPoint1 + subsegmentLength - 1;
+      } else {
+        breakPoint1 = random.Next(length - 1);
+        breakPoint2 = random.Next(breakPoint1 + 1, length);
+      }
+
+      index = 0;
+      for (int i = breakPoint1; i <= breakPoint2; i++) {  // copy part of first permutation
+        result[index] = parent1[i];
+        numberCopied[result[index]] = true;
+        index++;
+      }
+
+      for (int i = 0; i < parent2.Length; i++) {  // copy remaining part of second permutation
+        if (!numberCopied[parent2[i]]) {
+          result[index] = parent2[i];
+          index++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a maximal preservative crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in MaximalPreservativeCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/OrderBasedCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/OrderBasedCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/OrderBasedCrossover.cs	(revision 1270)
@@ -0,0 +1,106 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation of two permutation arrays by taking randomly a selection of values 
+  /// (not an interval!) from the first permutation keeping the correct order and filling 
+  /// the missing entries with the elements from the second permutation, also in the right order.
+  /// </summary>
+  public class OrderBasedCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="parent2"/> by
+    /// randomly selecting some values from the first permutation that will be inserted one after each 
+    /// other; the missing ones are picked in the correct order from the second permutation.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      int[] selectedNumbers = new int[random.Next(length + 1)];
+      bool[] numberSelected = new bool[length];
+      int index, selectedIndex, currentIndex;
+
+      for (int i = 0; i < selectedNumbers.Length; i++) {  // select numbers for array
+        index = 0;
+        while (numberSelected[parent1[index]]) {  // find first valid index
+          index++;
+        }
+
+        selectedIndex = random.Next(length - i);
+        currentIndex = 0;
+        while ((index < parent1.Length) && (currentIndex != selectedIndex)) {  // find selected number
+          index++;
+          if (!numberSelected[parent1[index]]) {
+            currentIndex++;
+          }
+        }
+        numberSelected[parent1[index]] = true;
+      }
+
+      index = 0;
+      for (int i = 0; i < parent1.Length; i++) {  // copy selected numbers in array
+        if (numberSelected[parent1[i]]) {
+          selectedNumbers[index] = parent1[i];
+          index++;
+        }
+      }
+
+      index = 0;
+      for (int i = 0; i < result.Length; i++) {  // copy rest of second permutation and selected numbers in order of first permutation
+        if (numberSelected[parent2[i]]) {
+          result[i] = selectedNumbers[index];
+          index++;
+        } else {
+          result[i] = parent2[i];
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs an order-based crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in OrderBasedCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/OrderCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/OrderCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/OrderCrossover.cs	(revision 1270)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permuation arrays
+  /// by taking a randomly chosen interval from the frist, preserving the positions,
+  /// then the missing values from the second array in the order they occur in the second array.
+  /// </summary>
+  public class OrderCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and 
+    /// <paramref name="parent2"/> by taking a randomly chosen interval from <paramref name="parent1"/>,
+    /// preserving the positions and then the missing values from <paramref name="parent2"/> in the 
+    /// order they occur in <paramref name="parent2"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int[] result = new int[parent1.Length];
+      bool[] copied = new bool[result.Length];
+
+      int breakPoint1 = random.Next(result.Length - 1);
+      int breakPoint2 = random.Next(breakPoint1 + 1, result.Length);
+
+      for (int i = breakPoint1; i <= breakPoint2; i++) {  // copy part of first permutation
+        result[i] = parent1[i];
+        copied[parent1[i]] = true;
+      }
+
+      int index = 0;
+      for (int i = 0; i < parent2.Length; i++) {  // copy remaining part of second permutation
+        if (index == breakPoint1) {  // skip already copied part
+          index = breakPoint2 + 1;
+        }
+        if (!copied[parent2[i]]) {
+          result[index] = parent2[i];
+          index++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs an order crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in OrderCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PartiallyMatchedCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PartiallyMatchedCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PartiallyMatchedCrossover.cs	(revision 1270)
@@ -0,0 +1,101 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permuation arrays
+  /// by taking a randomly chosen interval from the first, keeping the position, 
+  /// then all positions from the second permutation which are still free in the child 
+  /// (the position is free and the value is "free")
+  /// and then missing ones from the second array in the order they occur in the second array.
+  /// </summary>
+  public class PartiallyMatchedCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permuation of <paramref name="parent1"/> and <paramref name="parent2"/>
+    /// by taking a randomly chosen interval from <paramref name="parent1"/>, preserving the position, 
+    /// then all positions from <paramref name="parent2"/> which are still free in the child 
+    /// (the position is free and the value is "free")
+    /// and then missing ones from <paramref name="parent2"/> in the order they occur 
+    /// in <paramref name="parent2"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The parent scope 1 to cross over.</param>
+    /// <param name="parent2">The parent scope 2 to cross over.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      bool[] numbersCopied = new bool[length];
+
+      int breakPoint1 = random.Next(length - 1);
+      int breakPoint2 = random.Next(breakPoint1 + 1, length);
+
+      for (int j = breakPoint1; j <= breakPoint2; j++) {  // copy part of first permutation
+        result[j] = parent1[j];
+        numbersCopied[result[j]] = true;
+      }
+
+      int index = breakPoint1;
+      int i = (breakPoint1 == 0 ? (breakPoint2 + 1) : 0);
+      while (i < length) {  // copy rest from second permutation
+        if (!numbersCopied[parent2[i]]) {  // copy directly
+          result[i] = parent2[i];
+        } else {  // copy from area between breakpoints
+          while (numbersCopied[parent2[index]]) {  // find next valid index
+            index++;
+          }
+          result[i] = parent2[index];
+          index++;
+        }
+
+        i++;
+        if (i == breakPoint1) {  // skip area between breakpoints
+          i = breakPoint2 + 1;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a partially matched crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in PartiallyMatchedCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Permutation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Permutation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Permutation.cs	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// The base class for a permutation, which is an ordered combination. 
+  /// </summary>
+  public class Permutation : IntArrayData {
+    /// <summary>
+    /// Initializes a new instance of <see cref="Permutation"/>.
+    /// </summary>
+    public Permutation()
+      : base() {
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="Permutation"/> with the given 
+    /// <paramref name="permutation"/> array.
+    /// </summary>
+    /// <param name="permutation">The permutation array to assign.</param>
+    public Permutation(int[] permutation)
+      : base(permutation) {
+    }
+
+    /// <summary>
+    /// Clones the current instance.
+    /// </summary>
+    /// <param name="clonedObjects">A dictionary of all already cloned objects. (Needed to 
+    /// avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="Permutation"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Permutation clone = new Permutation((int[])Data.Clone());
+      clonedObjects.Add(Guid, clone);
+      return clone;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PermutationCrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PermutationCrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PermutationCrossoverBase.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Base class for all permutation crossover operators.
+  /// </summary>
+  public abstract class PermutationCrossoverBase : CrossoverBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="PermutationCrossoverBase"/> with one variable info
+    /// (<c>Permutation</c>).
+    /// </summary>
+    public PermutationCrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Permutation", "Parent and child permutations", typeof(Permutation), VariableKind.In | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Performs a crossover by calling <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom, int[][]"/>
+    /// and adds the created permutation to the current scope.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if the parents have different lengths.</exception>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <param name="random">A random number generator.</param>
+    protected sealed override void Cross(IScope scope, IRandom random) {
+      int[][] parents = new int[scope.SubScopes.Count][];
+      int length = -1;
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        parents[i] = scope.SubScopes[i].GetVariableValue<Permutation>("Permutation", false).Data;
+        if (i == 0) length = parents[i].Length;
+        else if (parents[i].Length != length) throw new InvalidOperationException("ERROR in PermutationCrossoverBase: Cannot apply crossover to permutations of different length");
+      }
+
+      int[] result = Cross(scope, random, parents);
+      scope.AddVariable(new Variable(scope.TranslateName("Permutation"), new Permutation(result)));
+    }
+
+    /// <summary>
+    /// Performs a crossover of multiple permutations.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing all parent permutations.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected abstract int[] Cross(IScope scope, IRandom random, int[][] parents);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PermutationManipulatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PermutationManipulatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PermutationManipulatorBase.cs	(revision 1270)
@@ -0,0 +1,66 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Base class for manipulation permutation.
+  /// </summary>
+  public abstract class PermutationManipulatorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="PermutationManipulatorBase"/> with two variable infos
+    /// (<c>Random</c> and <c>Permutation</c>).
+    /// </summary>
+    public PermutationManipulatorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Permutation", "Permutation to manipulate", typeof(Permutation), VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Manipulates the permutation data of the given <paramref name="scope"/> according to a
+    /// specified random number generator.
+    /// </summary>
+    /// <remarks>Calls <see cref="Manipulate"/>.</remarks>
+    /// <param name="scope">The scope of the permutation data and the random number generator.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      Permutation perm = GetVariableValue<Permutation>("Permutation", scope, false);
+      perm.Data = Manipulate(scope, random, perm.Data);
+      return null;
+    }
+
+    /// <summary>
+    /// Manipulates the given <paramref name="permutation"/> with the specified <paramref name="random"/> 
+    /// number generator.
+    /// </summary>
+    /// <param name="scope">The scope of the variables.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation to manipulate.</param>
+    /// <returns>The manipulated permutation as int array.</returns>
+    protected abstract int[] Manipulate(IScope scope, IRandom random, int[] permutation);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PositionBasedCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PositionBasedCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/PositionBasedCrossover.cs	(revision 1270)
@@ -0,0 +1,92 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Performs a cross over permutation between two permutation arrays based on randomly chosen positions.
+  /// </summary>
+  public class PositionBasedCrossover : PermutationCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Performs a cross over permutation of <paramref name="parent1"/> and <paramref name="parent2"/>
+    /// based on randomly chosen positions to define which position to take from where.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The permutation array of parent 1.</param>
+    /// <param name="parent2">The permutation array of parent 2.</param>
+    /// <returns>The created cross over permutation as int array.</returns>
+    public static int[] Apply(IRandom random, int[] parent1, int[] parent2) {
+      int length = parent1.Length;
+      int[] result = new int[length];
+      bool[] randomPosition = new bool[length];
+      bool[] numberCopied = new bool[length];
+      int randomPosNumber = random.Next(length);
+
+      for (int i = 0; i < randomPosNumber; i++) {  // generate random bit mask
+        randomPosition[random.Next(length)] = true;
+      }
+
+      for (int i = 0; i < length; i++) {  // copy numbers masked as true from second permutation
+        if (randomPosition[i]) {
+          result[i] = parent2[i];
+          numberCopied[parent2[i]] = true;
+        }
+      }
+
+      int index = 0;
+      for (int i = 0; i < length; i++) {  // copy numbers masked as false from first permutation
+        if (!numberCopied[parent1[i]]) {
+          if (randomPosition[index]) {
+            while (randomPosition[index]) {
+              index++;
+            }
+          }
+          result[index] = parent1[i];
+          index++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a position-based crossover operation for two given parent permutations.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two permutations that should be crossed.</param>
+    /// <returns>The newly created permutation, resulting from the crossover operation.</returns>
+    protected override int[] Cross(IScope scope, IRandom random, int[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in PositionBasedCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Permutation")]
+[assembly: AssemblyDescription("HeuristicLab permutation operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("8819e533-c557-42e0-8cee-09dda7686cd2")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/RandomPermutationGenerator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/RandomPermutationGenerator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/RandomPermutationGenerator.cs	(revision 1270)
@@ -0,0 +1,88 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Generates a randomly shuffled permuation.
+  /// </summary>
+  public class RandomPermutationGenerator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="RandomPermutationGenerator"/> with three variable infos
+    /// (<c>Length</c>, <c>Random</c> and <c>Permutation</c>).
+    /// </summary>
+    public RandomPermutationGenerator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Length", "Permutation length", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Permutation", "Created random permutation", typeof(Permutation), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Generates a randomly shuffled permutation.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="length">The length of the permutation to create.</param>
+    /// <returns>The generated permuation as int array.</returns>
+    public static int[] Apply(IRandom random, int length) {
+      int[] perm = new int[length];
+
+      for (int i = 0; i < length; i++)
+        perm[i] = i;
+
+      // Knuth shuffle
+      int index, tmp;
+      for (int i = 0; i < length - 1; i++) {
+        index = random.Next(i, length);
+        tmp = perm[i];
+        perm[i] = perm[index];
+        perm[index] = tmp;
+      }
+      return perm;
+    }
+
+    /// <summary>
+    /// Generates a randomly shuffled permutation.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply(HeuristicLab.Core.IRandom, int)"/>.</remarks>
+    /// <param name="scope">The current scope with the variables.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      IntData length = GetVariableValue<IntData>("Length", scope, true);
+
+      int[] perm = Apply(random, length.Data);
+      scope.AddVariable(new Variable(scope.TranslateName("Permutation"), new Permutation(perm)));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/ScrambleManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/ScrambleManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/ScrambleManipulator.cs	(revision 1270)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by randomly scrambling the elements in a randomly chosen interval.
+  /// </summary>
+  public class ScrambleManipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Mixes the elements of the given <paramref name="permutation"/> randomly 
+    /// in a randomly chosen interval.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int breakPoint1, breakPoint2;
+      int[] scrambledIndices, remainingIndices, temp;
+      int selectedIndex, index;
+
+      breakPoint1 = random.Next(permutation.Length - 1);
+      breakPoint2 = random.Next(breakPoint1 + 1, permutation.Length);
+
+      scrambledIndices = new int[breakPoint2 - breakPoint1 + 1];
+      remainingIndices = new int[breakPoint2 - breakPoint1 + 1];
+      for (int i = 0; i < remainingIndices.Length; i++) {  // initialise indices
+        remainingIndices[i] = i;
+      }
+      for (int i = 0; i < scrambledIndices.Length; i++) {  // generate permutation of indices
+        selectedIndex = random.Next(remainingIndices.Length);
+        scrambledIndices[i] = remainingIndices[selectedIndex];
+
+        temp = remainingIndices;
+        remainingIndices = new int[temp.Length - 1];
+        index = 0;
+        for (int j = 0; j < remainingIndices.Length; j++) {
+          if (index == selectedIndex) {
+            index++;
+          }
+          remainingIndices[j] = temp[index];
+          index++;
+        }
+      }
+
+      for (int i = 0; i <= (breakPoint2 - breakPoint1); i++) {  // scramble permutation between breakpoints
+        result[breakPoint1 + i] = permutation[breakPoint1 + scrambledIndices[i]];
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Mixes the elements of the given <paramref name="permutation"/> randomly 
+    /// in a randomly chosen interval.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Swap2Manipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Swap2Manipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Swap2Manipulator.cs	(revision 1270)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by swapping to randomly chosen elements.
+  /// </summary>
+  public class Swap2Manipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Swaps two randomly chosen elements in the given <paramref name="permutation"/> array.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int index1, index2, temp;
+
+      index1 = random.Next(result.Length);
+      index2 = random.Next(result.Length);
+
+      temp = result[index1];
+      result[index1] = result[index2];
+      result[index2] = temp;
+
+      return result;
+    }
+
+    /// <summary>
+    /// Swaps two randomly chosen elements in the given <paramref name="permutation"/> array.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Swap3Manipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Swap3Manipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/Swap3Manipulator.cs	(revision 1270)
@@ -0,0 +1,85 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by swaping three randomly chosen elements.
+  /// </summary>
+  public class Swap3Manipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Swaps three randomly chosen elements of the given <paramref name="permutation"/> array.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int index1, index2, index3, temp;
+
+      index1 = random.Next(result.Length);
+      index2 = random.Next(result.Length);
+      index3 = random.Next(result.Length);
+
+      if (random.NextDouble() < 0.5) {
+        // swap edges 1 and 2
+        temp = result[index1];
+        result[index1] = result[index2];
+        result[index2] = temp;
+        // swap edges 2 and 3
+        temp = result[index2];
+        result[index2] = result[index3];
+        result[index3] = temp;
+      } else {
+        // swap edges 1 and 3
+        temp = result[index1];
+        result[index1] = result[index3];
+        result[index3] = temp;
+        // swap edges 2 and 3
+        temp = result[index2];
+        result[index2] = result[index3];
+        result[index3] = temp;
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Swaps three randomly chosen elements of the given <paramref name="permutation"/> array.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/TranslocationInversionManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/TranslocationInversionManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/TranslocationInversionManipulator.cs	(revision 1270)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by moving and reversing a randomly chosen interval of elements to another 
+  /// (randomly chosen) position in the array.
+  /// </summary>
+  public class TranslocationInversionManipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Moves a randomly chosen interval of elements to another (randomly chosen) position in the given
+    /// <paramref name="permutation"/> array and reverses it.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int breakPoint1, breakPoint2, insertPoint, insertPointLimit;
+
+      breakPoint1 = random.Next(permutation.Length - 1);
+      breakPoint2 = random.Next(breakPoint1 + 1, permutation.Length);
+      insertPointLimit = permutation.Length - breakPoint2 + breakPoint1 - 1;  // get insertion point in remaining part
+      if (insertPointLimit > 0)
+        insertPoint = random.Next(insertPointLimit);
+      else
+        insertPoint = 0;
+
+      int i = 0;  // index in new permutation
+      int j = 0;  // index in old permutation
+      while (i < permutation.Length) {
+        if (i == insertPoint) {  // copy translocated area
+          for (int k = breakPoint2; k >= breakPoint1; k--) {
+            result[i] = permutation[k];
+            i++;
+          }
+        }
+        if (j == breakPoint1) {  // skip area between breakpoints
+          j = breakPoint2 + 1;
+        }
+        if ((i < permutation.Length) && (j < permutation.Length)) {
+          result[i] = permutation[j];
+          i++;
+          j++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Moves a randomly chosen interval of elements to another (randomly chosen) position in the given
+    /// <paramref name="permutation"/> array and reverses it.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/TranslocationManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/TranslocationManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Permutation/TranslocationManipulator.cs	(revision 1270)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Permutation {
+  /// <summary>
+  /// Manipulates a permutation array by moving a randomly chosen interval of elements to another 
+  /// (randomly chosen) position in the array.
+  /// </summary>
+  public class TranslocationManipulator : PermutationManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Moves a randomly chosen interval of elements to another (randomly chosen) position in the given
+    /// <paramref name="permutation"/> array.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    public static int[] Apply(IRandom random, int[] permutation) {
+      int[] result = (int[])permutation.Clone();
+      int breakPoint1, breakPoint2, insertPoint, insertPointLimit;
+
+      breakPoint1 = random.Next(permutation.Length - 1);
+      breakPoint2 = random.Next(breakPoint1 + 1, permutation.Length);
+      insertPointLimit = permutation.Length - breakPoint2 + breakPoint1 - 1;  // get insertion point in remaining part
+      if (insertPointLimit > 0)
+        insertPoint = random.Next(insertPointLimit);
+      else
+        insertPoint = 0;
+
+      int i = 0;  // index in new permutation
+      int j = 0;  // index in old permutation
+      while (i < permutation.Length) {
+        if (i == insertPoint) {  // copy translocated area
+          for (int k = breakPoint1; k <= breakPoint2; k++) {
+            result[i] = permutation[k];
+            i++;
+          }
+        }
+        if (j == breakPoint1) {  // skip area between breakpoints
+          j = breakPoint2 + 1;
+        }
+        if ((i < permutation.Length) && (j < permutation.Length)) {
+          result[i] = permutation[j];
+          i++;
+          j++;
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Moves a randomly chosen interval of elements to another (randomly chosen) position in the given
+    /// <paramref name="permutation"/> array.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="permutation">The permutation array to manipulate.</param>
+    /// <returns>The new permuation array with the manipulated data.</returns>
+    protected override int[] Manipulate(IScope scope, IRandom random, int[] permutation) {
+      return Apply(random, permutation);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.Designer.cs	(revision 1270)
@@ -0,0 +1,204 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  partial class AboutBox {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    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.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
+      this.logoPictureBox = new System.Windows.Forms.PictureBox();
+      this.labelProductName = new System.Windows.Forms.Label();
+      this.labelVersion = new System.Windows.Forms.Label();
+      this.labelCopyright = new System.Windows.Forms.Label();
+      this.labelCompanyName = new System.Windows.Forms.Label();
+      this.textBoxDescription = new System.Windows.Forms.TextBox();
+      this.okButton = new System.Windows.Forms.Button();
+      this.tableLayoutPanel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // tableLayoutPanel
+      // 
+      this.tableLayoutPanel.ColumnCount = 2;
+      this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F));
+      this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F));
+      this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0);
+      this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0);
+      this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1);
+      this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2);
+      this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3);
+      this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4);
+      this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5);
+      this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9);
+      this.tableLayoutPanel.Name = "tableLayoutPanel";
+      this.tableLayoutPanel.RowCount = 6;
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+      this.tableLayoutPanel.Size = new System.Drawing.Size(482, 250);
+      this.tableLayoutPanel.TabIndex = 0;
+      // 
+      // logoPictureBox
+      // 
+      this.logoPictureBox.Image = global::HeuristicLab.PluginInfrastructure.GUI.Properties.Resources.Logo_gray;
+      this.logoPictureBox.Location = new System.Drawing.Point(3, 3);
+      this.logoPictureBox.Name = "logoPictureBox";
+      this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);
+      this.logoPictureBox.Size = new System.Drawing.Size(150, 150);
+      this.logoPictureBox.TabIndex = 12;
+      this.logoPictureBox.TabStop = false;
+      // 
+      // labelProductName
+      // 
+      this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.labelProductName.Location = new System.Drawing.Point(165, 0);
+      this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+      this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17);
+      this.labelProductName.Name = "labelProductName";
+      this.labelProductName.Size = new System.Drawing.Size(314, 17);
+      this.labelProductName.TabIndex = 19;
+      this.labelProductName.Text = "Product Name";
+      this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // labelVersion
+      // 
+      this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.labelVersion.Location = new System.Drawing.Point(165, 25);
+      this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+      this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17);
+      this.labelVersion.Name = "labelVersion";
+      this.labelVersion.Size = new System.Drawing.Size(314, 17);
+      this.labelVersion.TabIndex = 0;
+      this.labelVersion.Text = "Version";
+      this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // labelCopyright
+      // 
+      this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.labelCopyright.Location = new System.Drawing.Point(165, 50);
+      this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+      this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17);
+      this.labelCopyright.Name = "labelCopyright";
+      this.labelCopyright.Size = new System.Drawing.Size(314, 17);
+      this.labelCopyright.TabIndex = 21;
+      this.labelCopyright.Text = "Copyright";
+      this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // labelCompanyName
+      // 
+      this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.labelCompanyName.Location = new System.Drawing.Point(165, 75);
+      this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
+      this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17);
+      this.labelCompanyName.Name = "labelCompanyName";
+      this.labelCompanyName.Size = new System.Drawing.Size(314, 17);
+      this.labelCompanyName.TabIndex = 22;
+      this.labelCompanyName.Text = "Company Name";
+      this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // textBoxDescription
+      // 
+      this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.textBoxDescription.Location = new System.Drawing.Point(165, 103);
+      this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
+      this.textBoxDescription.Multiline = true;
+      this.textBoxDescription.Name = "textBoxDescription";
+      this.textBoxDescription.ReadOnly = true;
+      this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;
+      this.textBoxDescription.Size = new System.Drawing.Size(314, 119);
+      this.textBoxDescription.TabIndex = 23;
+      this.textBoxDescription.TabStop = false;
+      this.textBoxDescription.Text = "Description";
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+      this.okButton.Location = new System.Drawing.Point(404, 228);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 19);
+      this.okButton.TabIndex = 24;
+      this.okButton.Text = "&OK";
+      // 
+      // AboutBox
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(500, 268);
+      this.Controls.Add(this.tableLayoutPanel);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "AboutBox";
+      this.Padding = new System.Windows.Forms.Padding(9);
+      this.ShowIcon = false;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+      this.Text = "AboutBox";
+      this.tableLayoutPanel.ResumeLayout(false);
+      this.tableLayoutPanel.PerformLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
+    private System.Windows.Forms.PictureBox logoPictureBox;
+    private System.Windows.Forms.Label labelProductName;
+    private System.Windows.Forms.Label labelVersion;
+    private System.Windows.Forms.Label labelCopyright;
+    private System.Windows.Forms.Label labelCompanyName;
+    private System.Windows.Forms.TextBox textBoxDescription;
+    private System.Windows.Forms.Button okButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.cs	(revision 1270)
@@ -0,0 +1,120 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Reflection;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  partial class AboutBox : Form {
+    public AboutBox() {
+      InitializeComponent();
+
+      //  Initialize the AboutBox to display the product information from the assembly information.
+      //  Change assembly information settings for your application through either:
+      //  - Project->Properties->Application->Assembly Information
+      //  - AssemblyInfo.cs
+      this.Text = String.Format("About {0}", AssemblyTitle);
+      this.labelProductName.Text = AssemblyProduct;
+      this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion);
+      this.labelCopyright.Text = AssemblyCopyright;
+      this.labelCompanyName.Text = AssemblyCompany;
+      this.textBoxDescription.Text = AssemblyDescription;
+    }
+
+    #region Assembly Attribute Accessors
+
+    public string AssemblyTitle {
+      get {
+        // Get all Title attributes on this assembly
+        object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
+        // If there is at least one Title attribute
+        if(attributes.Length > 0) {
+          // Select the first one
+          AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
+          // If it is not an empty string, return it
+          if(titleAttribute.Title != "")
+            return titleAttribute.Title;
+        }
+        // If there was no Title attribute, or if the Title attribute was the empty string, return the .exe name
+        return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
+      }
+    }
+
+    public string AssemblyVersion {
+      get {
+        return Assembly.GetExecutingAssembly().GetName().Version.ToString();
+      }
+    }
+
+    public string AssemblyDescription {
+      get {
+        // Get all Description attributes on this assembly
+        object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
+        // If there aren't any Description attributes, return an empty string
+        if(attributes.Length == 0)
+          return "";
+        // If there is a Description attribute, return its value
+        return ((AssemblyDescriptionAttribute)attributes[0]).Description;
+      }
+    }
+
+    public string AssemblyProduct {
+      get {
+        // Get all Product attributes on this assembly
+        object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
+        // If there aren't any Product attributes, return an empty string
+        if(attributes.Length == 0)
+          return "";
+        // If there is a Product attribute, return its value
+        return ((AssemblyProductAttribute)attributes[0]).Product;
+      }
+    }
+
+    public string AssemblyCopyright {
+      get {
+        // Get all Copyright attributes on this assembly
+        object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
+        // If there aren't any Copyright attributes, return an empty string
+        if(attributes.Length == 0)
+          return "";
+        // If there is a Copyright attribute, return its value
+        return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
+      }
+    }
+
+    public string AssemblyCompany {
+      get {
+        // Get all Company attributes on this assembly
+        object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
+        // If there aren't any Company attributes, return an empty string
+        if(attributes.Length == 0)
+          return "";
+        // If there is a Company attribute, return its value
+        return ((AssemblyCompanyAttribute)attributes[0]).Company;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/AboutBox.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,102 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  partial class DownloaderDialog {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DownloaderDialog));
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.downloadProgressBar = new System.Windows.Forms.ProgressBar();
+      this.downloadDescription = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cancelButton.Location = new System.Drawing.Point(303, 99);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 0;
+      this.cancelButton.Text = "Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // downloadProgressBar
+      // 
+      this.downloadProgressBar.Location = new System.Drawing.Point(15, 25);
+      this.downloadProgressBar.Name = "downloadProgressBar";
+      this.downloadProgressBar.Size = new System.Drawing.Size(363, 23);
+      this.downloadProgressBar.TabIndex = 1;
+      // 
+      // downloadDescription
+      // 
+      this.downloadDescription.AutoSize = true;
+      this.downloadDescription.Location = new System.Drawing.Point(12, 9);
+      this.downloadDescription.Name = "downloadDescription";
+      this.downloadDescription.Size = new System.Drawing.Size(35, 13);
+      this.downloadDescription.TabIndex = 2;
+      this.downloadDescription.Text = "label1";
+      // 
+      // DownloaderDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(390, 134);
+      this.Controls.Add(this.downloadDescription);
+      this.Controls.Add(this.downloadProgressBar);
+      this.Controls.Add(this.cancelButton);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "DownloaderDialog";
+      this.Text = "DownloaderDialog";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button cancelButton;
+    private System.Windows.Forms.ProgressBar downloadProgressBar;
+    private System.Windows.Forms.Label downloadDescription;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.cs	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+
+  public partial class DownloaderDialog : Form {
+
+    public event MethodInvoker OnCancel;
+
+    public DownloaderDialog() {
+      InitializeComponent();
+    }
+
+    public void SetDownloadDescription(string description) {
+      Invoke((MethodInvoker)delegate() {
+        downloadDescription.Text = description;
+      });
+    }
+
+    public void SetProgress(int progress) {
+      Invoke((MethodInvoker)delegate() {
+        downloadProgressBar.Value = progress;
+      });
+    }
+
+    private void cancelButton_Click(object sender, EventArgs e)
+    {
+      if(OnCancel!=null) OnCancel();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/DownloaderDialog.resx	(revision 1270)
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  partial class ErrorDialog {
+    /// <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.messageTextBox = new System.Windows.Forms.TextBox();
+      this.okButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // messageTextBox
+      // 
+      this.messageTextBox.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.messageTextBox.Location = new System.Drawing.Point(12, 12);
+      this.messageTextBox.Multiline = true;
+      this.messageTextBox.Name = "messageTextBox";
+      this.messageTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Horizontal;
+      this.messageTextBox.Size = new System.Drawing.Size(392, 232);
+      this.messageTextBox.TabIndex = 0;
+      // 
+      // okButton
+      // 
+      this.okButton.Anchor = System.Windows.Forms.AnchorStyles.Bottom;
+      this.okButton.Location = new System.Drawing.Point(165, 250);
+      this.okButton.Name = "okButton";
+      this.okButton.Size = new System.Drawing.Size(75, 23);
+      this.okButton.TabIndex = 1;
+      this.okButton.Text = "Ok";
+      this.okButton.UseVisualStyleBackColor = true;
+      this.okButton.Click += new System.EventHandler(this.okButton_Click);
+      // 
+      // ErrorDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(416, 285);
+      this.Controls.Add(this.okButton);
+      this.Controls.Add(this.messageTextBox);
+      this.Name = "ErrorDialog";
+      this.Text = "ErrorDialog";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox messageTextBox;
+    private System.Windows.Forms.Button okButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  public partial class ErrorDialog : Form {
+    public ErrorDialog(string message, string caption) {
+      InitializeComponent();
+
+      messageTextBox.Text = message;
+      this.Text = caption;
+    }
+
+    private void okButton_Click(object sender, EventArgs e) {
+      this.DialogResult = DialogResult.OK;
+      Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ErrorDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/HeuristicLab.PluginInfrastructure.GUI.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/HeuristicLab.PluginInfrastructure.GUI.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/HeuristicLab.PluginInfrastructure.GUI.csproj	(revision 1270)
@@ -0,0 +1,181 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.PluginInfrastructure.GUI</RootNamespace>
+    <AssemblyName>HeuristicLab.PluginInfrastructure.GUI</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.PluginInfrastructure.GUI.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.PluginInfrastructure.GUI.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="ICSharpCode.SharpZipLib, Version=0.85.4.369, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>.\ICSharpCode.SharpZipLib.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AboutBox.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="AboutBox.Designer.cs">
+      <DependentUpon>AboutBox.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DownloaderDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="DownloaderDialog.Designer.cs">
+      <DependentUpon>DownloaderDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ErrorDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ErrorDialog.Designer.cs">
+      <DependentUpon>ErrorDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ManagerForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ManagerForm.designer.cs">
+      <DependentUpon>ManagerForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PluginAction.cs" />
+    <Compile Include="PluginDescription.cs" />
+    <Compile Include="PluginNameTransform.cs" />
+    <Compile Include="PluginSource.cs" />
+    <Compile Include="PluginSourceEditor.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="PluginSourceEditor.Designer.cs">
+      <DependentUpon>PluginSourceEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PluginTag.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="AboutBox.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>AboutBox.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DownloaderDialog.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>DownloaderDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ErrorDialog.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>ErrorDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="ManagerForm.resx">
+      <DependentUpon>ManagerForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="PluginSourceEditor.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>PluginSourceEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\Logo_gray.gif" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Resources\HeuristicLab.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="ICSharpCode.SharpZipLib License.txt" />
+    <Content Include="ICSharpCode.SharpZipLib.dll" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ICSharpCode.SharpZipLib License.txt
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ICSharpCode.SharpZipLib License.txt	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ICSharpCode.SharpZipLib License.txt	(revision 1270)
@@ -0,0 +1,13 @@
+#ziplib (SharpZipLib, formerly NZipLib) is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. It is implemented as an assembly (installable in the GAC), and thus can easily be incorporated into other projects (in any .NET language). The creator of #ziplib put it this way: "I've ported the zip library over to C# because I needed gzip/zip compression and I didn't want to use libzip.dll or something like this. I want all in pure C#."
+
+License
+
+The library is released under the GPL with the following exception:
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+
+Note: The exception is changed to reflect the latest GNU Classpath exception. Older versions of #ziplib did have another exception, but the new one is clearer and it doesn't break compatibility with the old one.
+
+Bottom line: In plain English this means you can use this library in commercial closed-source applications.
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.cs	(revision 1270)
@@ -0,0 +1,1020 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Diagnostics;
+using System.Net;
+using System.IO;
+using ICSharpCode.SharpZipLib.Zip;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  public partial class ManagerForm : Form {
+    private List<PluginTag> allTags = new List<PluginTag>();
+    private Dictionary<PluginTag, PluginAction> actions = new Dictionary<PluginTag, PluginAction>();
+    private List<PluginDescription> allAvailablePlugins = new List<PluginDescription>();
+    private string pluginDir = Application.StartupPath + "/" + HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir;
+    private string cacheDir = Application.StartupPath + "/" + HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.CacheDir;
+    private string backupDir = Application.StartupPath + "/" + HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.BackupDir;
+    private string tempDir = Application.StartupPath + "/" + HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.TempDir;
+    private const string AVAILABLE_PLUGINS = "Available plugins";
+    private const string DISABLED_PLUGINS = "Disabled plugins";
+    private const string INSTALLED_PLUGINS = "Installed plugins";
+
+    public ManagerForm() {
+      InitializeComponent();
+      InitializePlugins();
+    }
+
+    private void InitializePlugins() {
+      listView.View = View.Details;
+      listView.FullRowSelect = true;
+      listView.Items.Clear();
+      allTags.Clear();
+      actions.Clear();
+
+      publishButton.Enabled = false;
+      publishMenuItem.Enabled = false;
+      installButton.Enabled = false;
+      installButton.Checked = false;
+      installMenuItem.Enabled = false;
+      installMenuItem.Checked = false;
+      deleteButton.Enabled = false;
+      deleteButton.Checked = false;
+      deleteMenuItem.Enabled = false;
+      deleteMenuItem.Checked = false;
+
+      foreach(PluginInfo pluginInfo in PluginManager.Manager.ActivePlugins) {
+        // create a new PluginAction tag for the plugin
+        PluginTag tag = new PluginTag(allTags, pluginInfo, PluginState.Installed);
+        allTags.Add(tag);
+        // add to "installed plugins" item
+        ListViewItem installedPluginsItem = new ListViewItem(pluginInfo.Name);
+        installedPluginsItem.Tag = tag;
+        installedPluginsItem.ImageIndex = 0;
+        installedPluginsItem.Group = listView.Groups[INSTALLED_PLUGINS];
+        installedPluginsItem.SubItems.Add(pluginInfo.Version.ToString());
+        listView.Items.Add(installedPluginsItem);
+      }
+      foreach(PluginInfo pluginInfo in PluginManager.Manager.DisabledPlugins) {
+        PluginTag tag = new PluginTag(allTags, pluginInfo, PluginState.Disabled);
+        allTags.Add(tag);
+        ListViewItem disabledPluginsItem = new ListViewItem(pluginInfo.Name);
+        disabledPluginsItem.Tag = tag;
+        disabledPluginsItem.ImageIndex = 0;
+        disabledPluginsItem.Group = listView.Groups[DISABLED_PLUGINS];
+        disabledPluginsItem.SubItems.Add(pluginInfo.Version.ToString());
+        listView.Items.Add(disabledPluginsItem);
+      }
+
+      allAvailablePlugins = FilterMostRecentPluginVersions(allAvailablePlugins);
+      // find all plugins that are installed for which a new version is available
+      List<PluginDescription> upgrades = FindUpgrades(allTags, allAvailablePlugins);
+      // find all available plugins that are not installed and new (= new name not new version) since the last update
+      List<PluginDescription> newPlugins = FindNewPlugins(allTags, allAvailablePlugins);
+      // find all plugins that are available (not installed) for which a new version has been released since the last update
+      List<PluginDescription> overridingPlugins = FindOverridingPlugins(allTags, allAvailablePlugins);
+      newPlugins.ForEach(delegate(PluginDescription plugin) {
+        PluginTag tag = new PluginTag(allTags, plugin, PluginState.Available);
+        allTags.Add(tag);
+        ListViewItem availableItem = new ListViewItem(plugin.Name);
+        availableItem.Tag = tag;
+        availableItem.ImageIndex = 0;
+        availableItem.Group = listView.Groups[AVAILABLE_PLUGINS];
+        availableItem.SubItems.Add(plugin.Version.ToString());
+        listView.Items.Add(availableItem);
+      });
+      upgrades.ForEach(delegate(PluginDescription upgrade) {
+        // find the installed plugins that have the same name
+        List<PluginTag> oldPlugins = allTags.FindAll(delegate(PluginTag tag) {
+          return tag.PluginName == upgrade.Name;
+        });
+        PluginTag oldPlugin = oldPlugins[0];
+        // store the upgrade in the old plugin
+        oldPlugin.UpgradePluginDescription = upgrade;
+        UpdateTreeNodes(oldPlugins);
+      });
+      overridingPlugins.ForEach(delegate(PluginDescription overridingPlugin) {
+        List<PluginTag> currentPlugins = allTags.FindAll(delegate(PluginTag tag) {
+          return tag.PluginName == overridingPlugin.Name;
+        });
+        PluginTag currentPlugin = currentPlugins[0];
+        // replace the plugin description of the available plugin to point to the overriding plugin
+        currentPlugin.PluginDescription = overridingPlugin;
+      });
+      toolStripStatusLabel.Text = "Installed: " + listView.Groups[INSTALLED_PLUGINS].Items.Count +
+        " Updates: " + upgrades.Count + " Available: " + listView.Groups[AVAILABLE_PLUGINS].Items.Count;
+      RebuildActionHulls();
+
+      listView.Sort();
+    }
+
+    private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
+      AboutBox box = new AboutBox();
+      box.ShowDialog();
+    }
+
+    private void publishButton_Click(object sender, EventArgs args) {
+      if(listView.SelectedItems.Count == 0) return;
+      List<PluginInfo> plugins = new List<PluginInfo>();
+      foreach(ListViewItem item in listView.SelectedItems) {
+        plugins.Add(((PluginTag)item.Tag).Plugin);
+      }
+      PublishPlugin(plugins);
+    }
+
+    private void PublishPlugin(List<PluginInfo> plugins) {
+      StringBuilder xmlEntries = new StringBuilder();
+      try {
+        infoTextBox.Text = "Publishing plugin:\n";
+        foreach(PluginInfo plugin in plugins) {
+          string packageFileName = plugin.Name + "-" + plugin.Version + ".zip";
+          ZipFile zipFile = ZipFile.Create(packageFileName);
+          zipFile.NameTransform = new PluginNameTransform();
+          zipFile.BeginUpdate();
+
+          infoTextBox.Text+="Creating " + packageFileName + "...\n";
+          foreach(string filename in plugin.Files) {
+            infoTextBox.Text += "Adding " + filename + "\n";
+            zipFile.Add(filename);
+          }
+
+          zipFile.CommitUpdate();
+          zipFile.Close();
+          FileInfo fileInfo = new FileInfo(packageFileName);
+          infoTextBox.Text += "Created " + packageFileName + " (" + fileInfo.Length + " bytes)\n";
+          xmlEntries.Append("  <Plugin Name=\"").Append(plugin.Name).Append("\" Version=\"").Append(plugin.Version)
+            .Append("\" Build=\"").Append(plugin.BuildDate.ToUniversalTime().ToString(System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat))
+            .Append("\">").AppendLine();
+          foreach(PluginInfo dependency in plugin.Dependencies) {
+            xmlEntries.Append("    <Dependency Name=\"").Append(dependency.Name).Append("\" />").AppendLine();
+          }
+          xmlEntries.Append("  </Plugin>").AppendLine();
+        }
+
+        infoTextBox.Text += "Upload the zip files to your plugin source and add the following to" +
+" the file plugins.xml residing in the base directory of your plugin source.\n\n";
+        infoTextBox.Text += xmlEntries.ToString();
+      } catch(Exception exception) {
+        infoTextBox.Text += "\nThere was an error!\n" + exception;
+      }
+    }
+
+    private void updateButton_Click(object sender, EventArgs e) {
+      // connect to all plugin sources and get a list of available plugins
+      // log progress in the infoPane
+      BackgroundWorker worker = new BackgroundWorker();
+      worker.WorkerSupportsCancellation = true;
+      worker.WorkerReportsProgress = true;
+
+      DownloaderDialog dialog = new DownloaderDialog();
+      dialog.OnCancel += delegate() {
+        worker.CancelAsync();
+      };
+
+      worker.ProgressChanged += delegate(object progressChangedSender, ProgressChangedEventArgs args) {
+        dialog.SetProgress(args.ProgressPercentage);
+      };
+
+      worker.DoWork += delegate(object doWorkSender, DoWorkEventArgs args) {
+        allAvailablePlugins.Clear();
+        dialog.SetDownloadDescription("Updating available plugins...");
+        int i = 0;
+        int n = HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.PluginSources.Count;
+        foreach(string pluginSourceUrl in HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.PluginSources) {
+          if(!worker.CancellationPending) {
+            dialog.SetDownloadDescription("Connecting to " + pluginSourceUrl + "...");
+            PluginSource source = PluginSource.TryCreate(pluginSourceUrl);
+            if(source == null) {
+              Invoke((MethodInvoker)delegate() {
+                infoTextBox.Text += "Error! Couldn't access the plugin source " + pluginSourceUrl + ".\n";
+              });
+            } else {
+              dialog.SetDownloadDescription("Getting list of available plugins from " + pluginSourceUrl + "...");
+              List<PluginDescription> availablePlugins = source.AvailablePlugins();
+              allAvailablePlugins.AddRange(availablePlugins);
+              Invoke((MethodInvoker)delegate() {
+                infoTextBox.Text += pluginSourceUrl + " " + availablePlugins.Count + " plugins available.\n";
+              });
+
+              worker.ReportProgress((int)((++i / (double)n) * 100.0));
+            }
+          }
+        }
+        if(worker.CancellationPending) {
+          args.Cancel = true;
+        } else {
+          args.Cancel = false;
+          args.Result = allAvailablePlugins;
+        }
+      };
+
+      worker.RunWorkerCompleted += delegate(object runWorkerCompletedSender, RunWorkerCompletedEventArgs args) {
+        if(!args.Cancelled && args.Error == null) {
+          InitializePlugins();
+        }
+        dialog.Close();
+      };
+
+      dialog.Show();
+      worker.RunWorkerAsync();
+    }
+
+
+    private List<PluginDescription> FilterMostRecentPluginVersions(List<PluginDescription> list) {
+      List<PluginDescription> newList = new List<PluginDescription>();
+
+      list.ForEach(delegate(PluginDescription tag) {
+        // find all entries with the same plugin name
+        List<PluginDescription> samePlugins = list.FindAll(delegate(PluginDescription otherTag) {
+          return tag.Name == otherTag.Name;
+        });
+
+        // keep only the most recent one
+        PluginDescription mostRecentVersion = samePlugins[0];
+        if(samePlugins.Count > 1) {
+          samePlugins.ForEach(delegate(PluginDescription tag2) {
+            if(tag2.Version > mostRecentVersion.Version || 
+              (tag2.Version == mostRecentVersion.Version && tag2.BuildDate>mostRecentVersion.BuildDate)) {
+              mostRecentVersion = tag2;
+            }
+          });
+        }
+        if(!newList.Contains(mostRecentVersion)) {
+          newList.Add(mostRecentVersion);
+        }
+
+      });
+
+      return newList;
+    }
+
+    private List<PluginDescription> FindNewPlugins(List<PluginTag> allTags, List<PluginDescription> allAvailablePlugins) {
+      List<PluginDescription> newPlugins = new List<PluginDescription>();
+      // for each of the available plugins check if there is an installed plugin that has the same name
+      // only if there is no installed plugin with the same name then it is a new plugin
+      // NOTE: make sure to keep only the most recent entry of a plugin in the allAvailablePlugins list
+      allAvailablePlugins.ForEach(delegate(PluginDescription availablePlugin) {
+        if(!allTags.Exists(delegate(PluginTag tag2) {
+          return availablePlugin.Name == tag2.PluginName;
+        })) {
+          newPlugins.Add(availablePlugin);
+        }
+      });
+
+      return newPlugins;
+    }
+
+    private List<PluginDescription> FindUpgrades(List<PluginTag> allTags, List<PluginDescription> allAvailablePlugins) {
+      List<PluginDescription> upgrades = new List<PluginDescription>();
+      // for each of the available plugins check if there is an installed plugin that has the same name
+      // only if there is an installed plugin with the same name and the available plugin has a more recent version it is an upgrade
+      // NOTE: make sure to keep only the most recent entry of a plugin in the allAvailablePlugins list
+      allAvailablePlugins.ForEach(delegate(PluginDescription availablePlugin) {
+        List<PluginTag> oldPlugins = allTags.FindAll(delegate(PluginTag currentPlugin) {
+          return currentPlugin.PluginName == availablePlugin.Name &&
+            (currentPlugin.State & (PluginState.Installed | PluginState.Disabled)) != 0;
+        });
+
+        if(oldPlugins.Count == 1) {
+          if(oldPlugins[0].PluginVersion < availablePlugin.Version ||
+            (oldPlugins[0].PluginVersion == availablePlugin.Version && oldPlugins[0].PluginBuildDate<availablePlugin.BuildDate)) {
+            upgrades.Add(availablePlugin);
+          }
+        }
+      });
+
+      return upgrades;
+    }
+
+    private List<PluginDescription> FindOverridingPlugins(List<PluginTag> allTags, List<PluginDescription> allAvailablePlugins) {
+      List<PluginDescription> overrides = new List<PluginDescription>();
+      allAvailablePlugins.ForEach(delegate(PluginDescription availablePlugin) {
+        List<PluginTag> currentPlugins = allTags.FindAll(delegate(PluginTag currentPlugin) {
+          return currentPlugin.PluginName == availablePlugin.Name && currentPlugin.State == PluginState.Available;
+        });
+
+        if(currentPlugins.Count == 1 && (currentPlugins[0].PluginVersion < availablePlugin.Version ||
+          (currentPlugins[0].PluginVersion==availablePlugin.Version && currentPlugins[0].PluginBuildDate<availablePlugin.BuildDate))) {
+          overrides.Add(availablePlugin);
+        }
+      });
+
+      return overrides;
+    }
+
+    private void RebuildActionHulls() {
+      Dictionary<PluginTag, PluginAction> oldActions = new Dictionary<PluginTag, PluginAction>(actions);
+      actions.Clear();
+
+      foreach(PluginAction action in oldActions.Values) {
+        if(action.Action == ManagerAction.Install) {
+          MarkInstall(action.Plugin);
+        } else if(action.Action == ManagerAction.Remove) {
+          MarkRemove(action.Plugin);
+        } else
+          throw new InvalidOperationException();
+      }
+
+      // update the GUI to represent new state of the selected plugin
+      if(listView.SelectedItems.Count>0 && listView.SelectedItems[0].Tag is PluginTag) {
+        UpdateActionButtons((PluginTag)listView.SelectedItems[0].Tag);
+        DisplayPluginInfo(((PluginTag)listView.SelectedItems[0].Tag).GetPluginDetails());
+      }
+    }
+
+    private void MarkInstall(PluginTag actionTag) {
+      if(!CheckInstallConflicts(actionTag)) {
+        CreateNewInstallAction(actionTag);
+      } else {
+        HandleInstallConflict(actionTag);
+      }
+    }
+
+    private void UnmarkInstall(PluginTag actionTag) {
+      if(!CheckNoActionConflict(actionTag)) {
+        List<PluginAction> rootActions = GetActionsInvolving(actionTag);
+        PluginAction rootAction = rootActions[0];
+        actions.Remove(rootAction.Plugin);
+        UpdateTreeNodes(rootAction.Hull);
+      } else {
+        HandleNoActionConflict(actionTag);
+      }
+    }
+
+    private void HandleNoActionConflict(PluginTag actionTag) {
+      List<PluginAction> conflictingActions = GetOverlappingActions(actionTag, ManagerAction.Any);
+      PluginAction theAction = GetSmallestActionInvolving(actionTag, conflictingActions);
+      conflictingActions.Remove(theAction);
+      string action = theAction.GetInverseActionString();
+      DialogResult userResult = ShowGenericConflictDialog(action, theAction, conflictingActions);
+      if(userResult == DialogResult.OK) {
+        conflictingActions.ForEach(delegate(PluginAction conflictingAction) {
+          actions.Remove(conflictingAction.Plugin);
+          UpdateTreeNodes(conflictingAction.Hull);
+        });
+
+        PluginAction rootAction = GetSmallestActionInvolving(actionTag, GetOverlappingActions(actionTag, ManagerAction.Any));
+        actions.Remove(rootAction.Plugin);
+        UpdateTreeNodes(rootAction.Hull);
+      }
+    }
+
+    private bool CheckNoActionConflict(PluginTag actionTag) {
+      return GetOverlappingActions(actionTag, ManagerAction.Any).Count > 1;
+    }
+
+    private void MarkRemove(PluginTag actionTag) {
+      if(!CheckRemoveConflicts(actionTag)) {
+        CreateNewRemoveAction(actionTag);
+      } else {
+        HandleRemoveConflict(actionTag);
+      }
+    }
+
+    private void UnmarkRemove(PluginTag pluginTag) {
+      if(!CheckNoActionConflict(pluginTag)) {
+        List<PluginAction> rootActions = GetActionsInvolving(pluginTag);
+        // if there is no conflict then there can only be one action connected to the pluginTag
+        PluginAction rootAction = rootActions[0];
+        // kill the root action
+        actions.Remove(rootAction.Plugin);
+        UpdateTreeNodes(rootAction.Hull);
+      } else {
+        HandleNoActionConflict(pluginTag);
+      }
+    }
+
+    private void CreateNewRemoveAction(PluginTag actionTag) {
+      CreateNewAction(actionTag, ManagerAction.Remove, actionTag.GetDependentTags());
+    }
+
+    private void CreateNewInstallAction(PluginTag actionTag) {
+      CreateNewAction(actionTag, ManagerAction.Install, actionTag.GetDependencyTags());
+    }
+
+    private void CreateNewAction(PluginTag actionTag, ManagerAction action, List<PluginTag> hull) {
+      PluginAction newAction = new PluginAction();
+      newAction.Action = action;
+      newAction.Plugin = actionTag;
+      newAction.Hull = hull;
+      newAction.Hull.Add(actionTag);
+      actions[actionTag] = newAction;
+      UpdateTreeNodes(newAction.Hull);
+    }
+
+    private bool CheckRemoveConflicts(PluginTag actionTag) {
+      return GetOverlappingActions(actionTag, ManagerAction.Install).Count > 0;
+    }
+
+    private void HandleRemoveConflict(PluginTag actionTag) {
+      List<PluginAction> conflictingActions = GetOverlappingActions(actionTag, ManagerAction.Install);
+
+      // create a planned action to display in the conflict message box
+      PluginAction plannedRemoveAction = new PluginAction();
+      plannedRemoveAction.Action = ManagerAction.Remove;
+      plannedRemoveAction.Plugin = actionTag;
+
+      DialogResult userResult = ShowGenericConflictDialog("Remove", plannedRemoveAction, conflictingActions);
+      if(userResult == DialogResult.OK) {
+        // if user says ok then remove the old actions and create a new remove action
+        conflictingActions.ForEach(delegate(PluginAction conflictingAction) {
+          actions.Remove(conflictingAction.Plugin);
+          UpdateTreeNodes(conflictingAction.Hull);
+        });
+
+        CreateNewRemoveAction(actionTag);
+      }
+    }
+
+    private bool CheckInstallConflicts(PluginTag actionTag) {
+      return GetOverlappingActions(actionTag, ManagerAction.Remove).Count > 0;
+    }
+
+    private void HandleInstallConflict(PluginTag actionTag) {
+      List<PluginAction> conflictingActions = GetOverlappingActions(actionTag, ManagerAction.Remove);
+
+      // create a planned action to display in the conflict message box
+      PluginAction plannedInstallAction = new PluginAction();
+      plannedInstallAction.Action = ManagerAction.Install;
+      plannedInstallAction.Plugin = actionTag;
+
+      DialogResult userResult = ShowGenericConflictDialog("Install", plannedInstallAction, conflictingActions);
+
+      if(userResult == DialogResult.OK) {
+        conflictingActions.ForEach(delegate(PluginAction conflictingAction) {
+          actions.Remove(conflictingAction.Plugin);
+          UpdateTreeNodes(conflictingAction.Hull);
+        });
+
+        CreateNewInstallAction(actionTag);
+      }
+    }
+
+    private DialogResult ShowGenericConflictDialog(string action, PluginAction theAction, List<PluginAction> conflictingActions) {
+      string message = "The actions:\n\n";
+      conflictingActions.ForEach(delegate(PluginAction conflictingAction) {
+        message += " - " + conflictingAction.Action + " " + conflictingAction.Plugin.PluginName + "\n";
+      });
+      message += "\nconflict with the action: " + action + " " + theAction.Plugin.PluginName + ".\n\n";
+      message += "\nSolution:\n";
+      conflictingActions.ForEach(delegate(PluginAction conflictingAction) {
+        message += " - " + conflictingAction.GetInverseActionString() + " " + conflictingAction.Plugin.PluginName + "\n";
+      });
+      message += " - " + action + " " + theAction.Plugin.PluginName + "\n\n";
+      message += "Do you want to continue?";
+
+      return MessageBox.Show(message, "Resolve conflicting actions", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
+
+    }
+
+    private List<PluginAction> GetActionsInvolving(PluginTag actionTag) {
+      List<PluginAction> filteredActions = new List<PluginAction>();
+      foreach(PluginAction action in actions.Values) {
+        if(action.Hull.Contains(actionTag)) {
+          filteredActions.Add(action);
+        }
+      }
+      return filteredActions;
+    }
+
+    private PluginAction GetSmallestActionInvolving(PluginTag actionTag, List<PluginAction> actions) {
+      PluginAction smallestAction;
+      // if there is an action defined for which actionTag is the root then us it as root tag
+      // otherwise use the root of the action that contains pluginTag in its hull and has the smallest hull of all actions
+      smallestAction = actions.Find(delegate(PluginAction action) {
+        return action.Plugin == actionTag;
+      });
+      // if nothing is found then get the action with the smallest hull
+      if(smallestAction == null) {
+        // find the action with the smallest hull
+        smallestAction = actions[0];
+        actions.ForEach(delegate(PluginAction action) {
+          if(action.Hull.Count < smallestAction.Hull.Count)
+            smallestAction = action;
+        });
+      }
+
+      return smallestAction;
+    }
+
+    /// <summary>
+    /// Similar to GetRootActions but filter only specific ManagerActions 
+    /// </summary>
+    /// <param name="pluginTag"></param>
+    /// <param name="overlapAction"></param>
+    /// <returns></returns>
+    private List<PluginAction> GetOverlappingActions(PluginTag actionTag, ManagerAction overlapAction) {
+      List<PluginAction> overlappingActions = new List<PluginAction>();
+      foreach(PluginAction action in actions.Values) {
+        if(((action.Action & overlapAction) > 0) &&
+          action.Hull.Contains(actionTag)) {
+          overlappingActions.Add(action);
+        }
+      }
+
+      return overlappingActions;
+    }
+
+    private void UpdateTreeNodes(List<PluginTag> hull) {
+      hull.ForEach(delegate(PluginTag tag) {
+        FindPluginItems(tag).ForEach(delegate(ListViewItem item) {
+          ManagerAction action = GetAction(tag);
+          if(action != ManagerAction.None) {
+            item.Text = tag.PluginName + " - Action: " + action;
+            if(action == ManagerAction.Remove) {
+              item.ImageIndex = 3;
+            } else if(action == ManagerAction.Install) {
+              item.ImageIndex = 2;
+            }
+          } else if(tag.State == PluginState.Upgradeable) {
+            item.Text = tag.PluginName + " - Upgrade: " + tag.PluginVersion + " -> " + tag.UpgradePluginDescription.Version;
+            item.ImageIndex = 2;
+          } else {
+            item.Text = tag.PluginName;
+            item.ImageIndex = 0;
+          }
+        });
+      });
+    }
+
+    private void UpdateActionButtons(PluginTag tag) {
+      publishButton.Enabled = (tag.State & PluginState.Installed) == PluginState.Installed;
+      installButton.Enabled = (tag.State & PluginState.Available) == PluginState.Available;
+      deleteButton.Enabled = (tag.State & (PluginState.Installed | PluginState.Upgradeable | PluginState.Disabled)) != 0;
+
+      installButton.Checked = GetAction(tag) == ManagerAction.Install;
+      deleteButton.Checked = GetAction(tag) == ManagerAction.Remove;
+
+      publishMenuItem.Enabled = publishButton.Enabled;
+      installMenuItem.Enabled = installButton.Enabled;
+      deleteMenuItem.Enabled = deleteButton.Enabled;
+      installMenuItem.Checked = installButton.Checked;
+      deleteMenuItem.Checked = deleteButton.Checked;
+    }
+
+    private ManagerAction GetAction(PluginTag tag) {
+      ManagerAction plannedAction = ManagerAction.None;
+      if(actions.ContainsKey(tag)) {
+        plannedAction = actions[tag].Action;
+      } else {
+        foreach(PluginAction action in actions.Values) {
+          if(action.Hull.Contains(tag)) {
+            plannedAction = action.Action;
+          }
+        }
+      }
+
+      if(plannedAction == ManagerAction.Install
+        && (tag.State == PluginState.Installed || tag.State == PluginState.Upgradeable)) {
+        return ManagerAction.None;
+      } else if(plannedAction == ManagerAction.Remove
+        && tag.State == PluginState.Available) {
+        return ManagerAction.None;
+      } else {
+        return plannedAction;
+      }
+    }
+
+    private List<ListViewItem> FindPluginItems(PluginTag pluginTag) {
+      List<ListViewItem> items = new List<ListViewItem>();
+      foreach(ListViewGroup group in listView.Groups) {
+        foreach(ListViewItem item in group.Items) {
+          if(pluginTag.Equals(item.Tag)) {
+            items.Add(item);
+          }
+        }
+      }
+      return items;
+    }
+    private void DisplayPluginInfo(string pluginInformation) {
+      infoTextBox.Text = pluginInformation;
+    }
+    private void upgradeButton_Click(object sender, EventArgs args) {
+      try {
+        ClearTemporaryFiles();
+        if(!DownloadFiles()) {
+          return;
+        }
+        OnDeletePlugins();
+        OnPreUpgradePlugins();
+        PluginManager.Manager.UnloadAllPlugins();
+        BackupOldFiles();
+        DeleteOldFiles();
+        InstallNewFiles();
+        PluginManager.Manager.LoadAllPlugins();
+        InitializePlugins();
+        OnPostUpgradePlugins();
+        OnInstallPlugins();
+        ClearTemporaryFiles();
+      } catch(Exception e) {
+        ShowErrorDialog(e + "");
+      }
+    }
+    private void OnDeletePlugins() {
+      allTags.ForEach(delegate(PluginTag tag) {
+        if(tag.State == PluginState.Installed) {
+          List<PluginAction> actions = GetActionsInvolving(tag);
+          if(actions.Count > 0 && actions[0].Action == ManagerAction.Remove) {
+            PluginManager.Manager.OnDelete(tag.Plugin);
+          }
+        }
+      });
+    }
+    private void OnInstallPlugins() {
+      allTags.ForEach(delegate(PluginTag tag) {
+        if(tag.State == PluginState.Available) {
+          List<PluginAction> actions = GetActionsInvolving(tag);
+          if(actions.Count > 0 && actions[0].Action == ManagerAction.Install) {
+            PluginManager.Manager.OnInstall(tag.Plugin);
+          }
+        }
+      });
+    }
+    private List<string> upgradedPlugins = new List<string>();
+    private void OnPreUpgradePlugins() {
+      upgradedPlugins.Clear();
+      allTags.ForEach(delegate(PluginTag tag) {
+        if(tag.State == PluginState.Upgradeable) {
+          PluginManager.Manager.OnPreUpdate(tag.Plugin);
+
+          // save the name of the plugin in  a list that is used later to call OnPostUpdate for all plugins
+          upgradedPlugins.Add(tag.PluginName);
+        }
+      });
+    }
+    private void OnPostUpgradePlugins() {
+      allTags.ForEach(delegate(PluginTag tag) {
+        if(upgradedPlugins.Contains(tag.PluginName)) {
+          PluginManager.Manager.OnPostUpdate(tag.Plugin);
+        }
+      });
+      upgradedPlugins.Clear();
+    }
+    /// <summary>
+    /// Deletes all files in the directories cacheDir, backupDir, tempDir
+    /// </summary>
+    private void ClearTemporaryFiles() {
+      // can't really handle exceptions here -> let higher layer handle them
+      string[] filenames = Directory.GetFiles(cacheDir, "*", SearchOption.AllDirectories);
+      foreach(string filename in filenames) {
+        File.Delete(filename);
+      }
+      filenames = Directory.GetFiles(backupDir, "*", SearchOption.AllDirectories);
+      foreach(string filename in filenames) {
+        File.Delete(filename);
+      }
+      filenames = Directory.GetFiles(tempDir, "*", SearchOption.AllDirectories);
+      foreach(string filename in filenames) {
+        File.Delete(filename);
+      }
+    }
+
+    /// <summary>
+    /// Extracts zip packages in cacheDir to tempDir and then copies the files from tempDir to pluginDir
+    /// When there is a problem on extraction or later when copying the files to the pluginDir the method 
+    /// delets all files that have already been copied from tempDir to pluginDir (the filename exists in both
+    /// locations) and then copies all files in the backup directory back to the plugin directory.
+    /// </summary>
+    /// <returns></returns>
+    private void InstallNewFiles() {
+      try {
+        // extract all packages
+        string[] packages = Directory.GetFiles(cacheDir, "*", SearchOption.AllDirectories);
+        FastZip fastZip = new FastZip();
+        foreach(string package in packages) {
+          fastZip.ExtractZip(package, tempDir, String.Empty);
+        }
+
+        // copy extracted files to plugin dir
+        string[] extractedFiles = Directory.GetFiles(tempDir, "*", SearchOption.AllDirectories);
+        foreach(string extractedFile in extractedFiles) {
+          File.Copy(extractedFile, pluginDir + extractedFile.Remove(0, tempDir.Length));
+        }
+      } catch(Exception e) {
+        infoTextBox.Text = e + "";
+        // remove already copied files
+        string[] extractedFiles = Directory.GetFiles(tempDir, "*", SearchOption.AllDirectories);
+        foreach(string extractedFile in extractedFiles) {
+          string filename = pluginDir + extractedFile.Remove(0, tempDir.Length);
+          if(File.Exists(filename)) {
+            File.Delete(filename);
+          }
+        }
+
+        // restore files from backup
+        string[] backupFiles = Directory.GetFiles(backupDir, "*", SearchOption.AllDirectories);
+        foreach(string backupFile in backupFiles) {
+          File.Copy(backupFile, pluginDir + backupFile.Remove(0, backupDir.Length));
+        }
+
+        throw e;
+      }
+    }
+
+    /// <summary>
+    /// Deletes all files of plugins that have been marked as 'Remove' or 'Upgrade'.
+    /// If there is a problem when removing the files then all files that have been removed earlier
+    /// (the filename existis in backupDir but not in pluginDir) are copied from the backupDir to the pluginDir
+    /// </summary>
+    /// <returns></returns>
+    private void DeleteOldFiles() {
+      try {
+        allTags.ForEach(delegate(PluginTag tag) {
+          List<PluginAction> involvingActions = GetActionsInvolving(tag);
+
+          if(tag.State == PluginState.Upgradeable || (involvingActions.Count > 0 && involvingActions[0].Action == ManagerAction.Remove)) {
+            tag.Plugin.Files.ForEach(delegate(string filename) {
+              File.Delete(filename);
+            });
+          }
+        });
+      } catch(Exception e) {
+        infoTextBox.Text = e + "";
+        // restore deleted files from backup
+        string[] backupFiles = Directory.GetFiles(backupDir, "*", SearchOption.AllDirectories);
+        foreach(string backupFile in backupFiles) {
+          string oldFileName = pluginDir + backupFile.Remove(0, backupDir.Length);
+          if(!File.Exists(oldFileName)) {
+            File.Move(backupFile, oldFileName);
+          }
+        }
+        throw e;
+      }
+    }
+
+    /// <summary>
+    /// Copies all files of plugins that are marked with 'Remove' or 'Upgrade' to the backup directory.
+    /// When there is a problem all files in the backup directory are deleted.
+    /// </summary>
+    /// <returns></returns>
+    private void BackupOldFiles() {
+      try {
+        allTags.ForEach(delegate(PluginTag tag) {
+          List<PluginAction> actionsInvolving = GetActionsInvolving(tag);
+
+          if(tag.State == PluginState.Upgradeable || (actionsInvolving.Count > 0 && actionsInvolving[0].Action == ManagerAction.Remove)) {
+            tag.Plugin.Files.ForEach(delegate(string filename) {
+              File.Copy(filename, backupDir + filename.Remove(0, pluginDir.Length));
+            });
+          }
+        });
+      } catch(Exception e) {
+        infoTextBox.Text = e + "";
+        // delete all files in the backup directory
+        string[] copiedFiles = Directory.GetFiles(backupDir, "*", SearchOption.AllDirectories);
+        string filesString = "";
+        foreach(string fs in copiedFiles) {
+          filesString += fs + "\n";
+        }
+        foreach(string copiedFile in copiedFiles) {
+          File.Delete(copiedFile);
+        }
+        throw e;
+      }
+    }
+
+    private bool DownloadFiles() {
+      DownloaderDialog dialog = new DownloaderDialog();
+      IEnumerator<PluginTag> pluginEnumerator = allTags.GetEnumerator();
+      BackgroundWorker worker = new BackgroundWorker();
+      worker.WorkerReportsProgress = true;
+      worker.WorkerSupportsCancellation = true;
+
+      worker.DoWork += delegate(object sender, DoWorkEventArgs args) {
+        // count number of plugins to download
+        int numberOfPlugins = 0;
+        allTags.ForEach(delegate(PluginTag current) {
+          if(current.UpgradeAvailable()) {
+            numberOfPlugins++;
+          } else {
+            List<PluginAction> actionsInvolving = GetActionsInvolving(current);
+
+            if(actionsInvolving.Count > 0 && actionsInvolving[0].Action == ManagerAction.Install && current.State == PluginState.Available) {
+              numberOfPlugins++;
+            }
+          }
+        });
+
+        // download
+        int downloaded = 0;
+        Invoke((MethodInvoker)delegate() {
+          infoTextBox.Text = "Downloading " + numberOfPlugins + " plugins.\n";
+        });
+
+        allTags.ForEach(delegate(PluginTag current) {
+          if(worker.CancellationPending) {
+            args.Cancel = true;
+            return;
+          }
+          List<PluginAction> actionsInvolving = GetActionsInvolving(current);
+          if(current.UpgradeAvailable() ||
+            (actionsInvolving.Count > 0 && actionsInvolving[0].Action == ManagerAction.Install && current.State == PluginState.Available)) {
+            dialog.SetDownloadDescription("Downloading " + current.PluginName + " ...");
+            Invoke((MethodInvoker)delegate() { infoTextBox.Text += "Downloading " + current.PluginName + " ..."; });
+
+            long nBytes = 0;
+            if(current.UpgradeAvailable()) {
+              nBytes = current.UpgradePluginDescription.Source.DownloadPlugin(current.UpgradePluginDescription);
+            } else {
+              nBytes = current.PluginDescription.Source.DownloadPlugin(current.PluginDescription);
+            }
+
+            worker.ReportProgress(downloaded / numberOfPlugins);
+            Invoke((MethodInvoker)delegate() { infoTextBox.Text += " " + nBytes + " bytes.\n"; });
+          }
+        });
+      };
+
+      worker.ProgressChanged += delegate(object sender, ProgressChangedEventArgs args) {
+        dialog.SetProgress(args.ProgressPercentage);
+      };
+
+      worker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs args) {
+        if(args.Cancelled) {
+          infoTextBox.Text += "Cancelled downloading plugins";
+          dialog.DialogResult = DialogResult.Cancel;
+        } else if(args.Error != null) {
+          infoTextBox.Text += "Error while downloading plugins:\n" + args.Error;
+          dialog.DialogResult = DialogResult.Cancel;
+        }
+        dialog.DialogResult = DialogResult.OK;
+        dialog.Close();
+      };
+
+
+      dialog.Shown += delegate(object sender, EventArgs args) {
+        worker.RunWorkerAsync();
+      };
+
+      dialog.OnCancel += delegate() {
+        worker.CancelAsync();
+        dialog.SetDownloadDescription("Cancelling download...");
+        infoTextBox.Text += "Cancelled!\n";
+      };
+
+      if(dialog.ShowDialog() == DialogResult.Cancel) {
+        return false;
+      } else {
+        return true;
+      }
+    }
+
+    private void removeButton_Clicked(object sender, EventArgs e) {
+      // get the tag of the selected listViewItem
+      PluginTag actionTag = (PluginTag)listView.SelectedItems[0].Tag;
+      List<PluginAction> rootActions = GetActionsInvolving(actionTag);
+      if(rootActions.Count > 0) {
+        UnmarkRemove(actionTag);
+      } else {
+        MarkRemove(actionTag);
+      }
+
+      // reflect the change of plugin actions in the install/remove buttons
+      UpdateActionButtons(actionTag);
+      // update the plugin detail information of the selected plugin
+      DisplayPluginInfo(actionTag.GetPluginDetails());
+    }
+
+    private void installButton_Clicked(object sender, EventArgs e) {
+      // get the tag of the selected listViewItem
+      PluginTag actionTag = (PluginTag)listView.SelectedItems[0].Tag;
+      List<PluginAction> rootActions = GetActionsInvolving(actionTag);
+
+      if(rootActions.Count > 0) {
+        UnmarkInstall(actionTag);
+      } else {
+        MarkInstall(actionTag);
+      }
+
+      // reflect the change of plugin actions in the install/remove buttons
+      UpdateActionButtons(actionTag);
+      // update the plugin detail information of the selected plugin
+      DisplayPluginInfo(actionTag.GetPluginDetails());
+    }
+
+    private void ShowErrorDialog(string message) {
+      ErrorDialog dialog = new ErrorDialog(message, "Exception");
+      dialog.ShowDialog();
+    }
+
+    private void managePluginSourcesToolStripMenuItem_Click(object sender, EventArgs e) {
+      PluginSourceEditor sourceEditor = new PluginSourceEditor();
+      sourceEditor.ShowDialog();
+    }
+
+    private void refreshPluginListToolStripMenuItem_Click(object sender, EventArgs e) {
+      PluginManager.Manager.UnloadAllPlugins();
+      PluginManager.Manager.LoadAllPlugins();
+
+      InitializePlugins();
+    }
+
+    private void closeToolStripMenuItem_Click(object sender, EventArgs e) {
+      Close();
+    }
+
+    private void installPluginFromFileToolStripMenuItem_Click(object sender, EventArgs args) {
+      OpenFileDialog dialog = new OpenFileDialog();
+      dialog.Multiselect = false;
+      DialogResult result = dialog.ShowDialog();
+      if(result == DialogResult.OK) {
+        string packageName = dialog.FileName;
+        try {
+          ClearTemporaryFiles();
+
+          FastZip fastZip = new FastZip();
+          fastZip.ExtractZip(packageName, cacheDir, String.Empty);
+
+          // check if none of the files exist
+          foreach(string filename in Directory.GetFiles(cacheDir)) {
+            if(File.Exists(pluginDir + filename.Remove(0, cacheDir.Length))) {
+              ShowErrorDialog("Sorry can't install the plugin " + packageName + "\nThe file: " + filename.Remove(0, cacheDir.Length) + " already exist in " + pluginDir + "\nIt seems the plugin is already installed.");
+              ClearTemporaryFiles();
+              return;
+            }
+          }
+
+          PluginManager.Manager.UnloadAllPlugins();
+          // move the files
+          foreach(string filename in Directory.GetFiles(cacheDir)) {
+            File.Move(filename, pluginDir + filename.Remove(0, cacheDir.Length));
+          }
+          PluginManager.Manager.LoadAllPlugins();
+          InitializePlugins();
+
+        } catch(Exception e) {
+          ShowErrorDialog(e + "");
+        } finally {
+          ClearTemporaryFiles();
+        }
+      }
+    }
+
+    private void pluginTreeView_KeyDown(object sender, KeyEventArgs e) {
+      if(e.KeyData == Keys.I && installButton.Enabled) {
+        e.Handled = true;
+        e.SuppressKeyPress = true;
+        installButton_Clicked(sender, e);
+      } else if((e.KeyData == Keys.D || e.KeyData == Keys.Delete) && deleteButton.Enabled) {
+        e.Handled = true;
+        e.SuppressKeyPress = true;
+        removeButton_Clicked(sender, e);
+      }
+    }
+
+    private void listView_MouseDown(object sender, MouseEventArgs e) {
+      // dumb solution to automatically select the node on right clicks which opens the context menu because 
+      // per default the treeview doesn't select nodes on right click
+      if(e.Button == MouseButtons.Right) {
+        ListViewItem clickedItem = listView.GetItemAt(e.X, e.Y);
+        if (clickedItem != null) {
+          // clear previous selection
+          while (listView.SelectedItems.Count > 0)
+            listView.SelectedItems[0].Selected = false;
+          // select clicked item
+          clickedItem.Selected = true;
+        }
+      }
+    }
+
+    private void listView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
+      if(e.Item.Tag != null && e.IsSelected) {
+        UpdateActionButtons((PluginTag)e.Item.Tag);
+        // display the plugin details in the lower pane
+        DisplayPluginInfo(((PluginTag)e.Item.Tag).GetPluginDetails());
+      } else if(e.Item.Tag!=null) {
+        // when an item was 'unselected' or was selected but doesn't represent a plugin then install and remove are not possible
+        publishButton.Enabled = false;
+        installButton.Enabled = false;
+        deleteButton.Enabled = false;
+        publishMenuItem.Enabled = false;
+        installMenuItem.Enabled = false;
+        deleteMenuItem.Enabled = false;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.designer.cs	(revision 1270)
@@ -0,0 +1,449 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  partial class ManagerForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Available plugins", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Disabled plugins", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewGroup listViewGroup3 = new System.Windows.Forms.ListViewGroup("Installed plugins", System.Windows.Forms.HorizontalAlignment.Left);
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ManagerForm));
+      this.menuStrip = new System.Windows.Forms.MenuStrip();
+      this.pluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.managePluginSourcesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.installPluginFromFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+      this.installedPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.installNewPluginsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
+      this.refreshPluginListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.splitContainer = new System.Windows.Forms.SplitContainer();
+      this.listView = new System.Windows.Forms.ListView();
+      this.nameHeader = new System.Windows.Forms.ColumnHeader();
+      this.versionHeader = new System.Windows.Forms.ColumnHeader();
+      this.infoTextBox = new System.Windows.Forms.RichTextBox();
+      this.pluginIcons = new System.Windows.Forms.ImageList(this.components);
+      this.toolStrip = new System.Windows.Forms.ToolStrip();
+      this.updateButton = new System.Windows.Forms.ToolStripButton();
+      this.upgradeButton = new System.Windows.Forms.ToolStripButton();
+      this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator();
+      this.installButton = new System.Windows.Forms.ToolStripButton();
+      this.deleteButton = new System.Windows.Forms.ToolStripButton();
+      this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+      this.publishButton = new System.Windows.Forms.ToolStripButton();
+      this.pluginContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
+      this.installMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.deleteMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.publishMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+      this.statusStrip1 = new System.Windows.Forms.StatusStrip();
+      this.toolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
+      this.menuStrip.SuspendLayout();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.toolStrip.SuspendLayout();
+      this.pluginContextMenuStrip.SuspendLayout();
+      this.statusStrip1.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // menuStrip
+      // 
+      this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.pluginsToolStripMenuItem,
+            this.helpToolStripMenuItem});
+      this.menuStrip.Location = new System.Drawing.Point(0, 0);
+      this.menuStrip.Name = "menuStrip";
+      this.menuStrip.Size = new System.Drawing.Size(828, 24);
+      this.menuStrip.TabIndex = 0;
+      this.menuStrip.Text = "menuStrip";
+      // 
+      // pluginsToolStripMenuItem
+      // 
+      this.pluginsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.managePluginSourcesToolStripMenuItem,
+            this.installPluginFromFileToolStripMenuItem,
+            this.toolStripSeparator2,
+            this.installedPluginsToolStripMenuItem,
+            this.installNewPluginsToolStripMenuItem,
+            this.toolStripSeparator3,
+            this.refreshPluginListToolStripMenuItem,
+            this.exitToolStripMenuItem});
+      this.pluginsToolStripMenuItem.Name = "pluginsToolStripMenuItem";
+      this.pluginsToolStripMenuItem.Size = new System.Drawing.Size(52, 20);
+      this.pluginsToolStripMenuItem.Text = "Plugins";
+      // 
+      // managePluginSourcesToolStripMenuItem
+      // 
+      this.managePluginSourcesToolStripMenuItem.Name = "managePluginSourcesToolStripMenuItem";
+      this.managePluginSourcesToolStripMenuItem.Size = new System.Drawing.Size(206, 22);
+      this.managePluginSourcesToolStripMenuItem.Text = "Edit plugin sources...";
+      this.managePluginSourcesToolStripMenuItem.Click += new System.EventHandler(this.managePluginSourcesToolStripMenuItem_Click);
+      // 
+      // installPluginFromFileToolStripMenuItem
+      // 
+      this.installPluginFromFileToolStripMenuItem.Name = "installPluginFromFileToolStripMenuItem";
+      this.installPluginFromFileToolStripMenuItem.Size = new System.Drawing.Size(206, 22);
+      this.installPluginFromFileToolStripMenuItem.Text = "Install plugin from file...";
+      this.installPluginFromFileToolStripMenuItem.Click += new System.EventHandler(this.installPluginFromFileToolStripMenuItem_Click);
+      // 
+      // toolStripSeparator2
+      // 
+      this.toolStripSeparator2.Name = "toolStripSeparator2";
+      this.toolStripSeparator2.Size = new System.Drawing.Size(203, 6);
+      // 
+      // installedPluginsToolStripMenuItem
+      // 
+      this.installedPluginsToolStripMenuItem.Name = "installedPluginsToolStripMenuItem";
+      this.installedPluginsToolStripMenuItem.Size = new System.Drawing.Size(206, 22);
+      this.installedPluginsToolStripMenuItem.Text = "Update";
+      this.installedPluginsToolStripMenuItem.Click += new System.EventHandler(this.updateButton_Click);
+      // 
+      // installNewPluginsToolStripMenuItem
+      // 
+      this.installNewPluginsToolStripMenuItem.Name = "installNewPluginsToolStripMenuItem";
+      this.installNewPluginsToolStripMenuItem.Size = new System.Drawing.Size(206, 22);
+      this.installNewPluginsToolStripMenuItem.Text = "Delete/Upgrade/Install...";
+      this.installNewPluginsToolStripMenuItem.Click += new System.EventHandler(this.upgradeButton_Click);
+      // 
+      // toolStripSeparator3
+      // 
+      this.toolStripSeparator3.Name = "toolStripSeparator3";
+      this.toolStripSeparator3.Size = new System.Drawing.Size(203, 6);
+      // 
+      // refreshPluginListToolStripMenuItem
+      // 
+      this.refreshPluginListToolStripMenuItem.Name = "refreshPluginListToolStripMenuItem";
+      this.refreshPluginListToolStripMenuItem.Size = new System.Drawing.Size(206, 22);
+      this.refreshPluginListToolStripMenuItem.Text = "Refresh plugin list";
+      this.refreshPluginListToolStripMenuItem.Click += new System.EventHandler(this.refreshPluginListToolStripMenuItem_Click);
+      // 
+      // exitToolStripMenuItem
+      // 
+      this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
+      this.exitToolStripMenuItem.Size = new System.Drawing.Size(206, 22);
+      this.exitToolStripMenuItem.Text = "Close";
+      this.exitToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
+      // 
+      // helpToolStripMenuItem
+      // 
+      this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.aboutToolStripMenuItem});
+      this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
+      this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
+      this.helpToolStripMenuItem.Text = "Help";
+      // 
+      // aboutToolStripMenuItem
+      // 
+      this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
+      this.aboutToolStripMenuItem.Size = new System.Drawing.Size(126, 22);
+      this.aboutToolStripMenuItem.Text = "About...";
+      this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
+      // 
+      // 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, 52);
+      this.splitContainer.Name = "splitContainer";
+      this.splitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Panel1.Controls.Add(this.listView);
+      // 
+      // splitContainer.Panel2
+      // 
+      this.splitContainer.Panel2.Controls.Add(this.infoTextBox);
+      this.splitContainer.Size = new System.Drawing.Size(828, 473);
+      this.splitContainer.SplitterDistance = 220;
+      this.splitContainer.TabIndex = 1;
+      // 
+      // listView
+      // 
+      this.listView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameHeader,
+            this.versionHeader});
+      this.listView.ContextMenuStrip = this.pluginContextMenuStrip;
+      this.listView.Dock = System.Windows.Forms.DockStyle.Fill;
+      listViewGroup1.Header = "Available plugins";
+      listViewGroup1.Name = "Available plugins";
+      listViewGroup2.Header = "Disabled plugins";
+      listViewGroup2.Name = "Disabled plugins";
+      listViewGroup3.Header = "Installed plugins";
+      listViewGroup3.Name = "Installed plugins";
+      this.listView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+            listViewGroup1,
+            listViewGroup2,
+            listViewGroup3});
+      this.listView.Location = new System.Drawing.Point(0, 0);
+      this.listView.Name = "listView";
+      this.listView.Size = new System.Drawing.Size(828, 220);
+      this.listView.SmallImageList = this.pluginIcons;
+      this.listView.TabIndex = 0;
+      this.listView.UseCompatibleStateImageBehavior = false;
+      this.listView.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listView_MouseDown);
+      this.listView.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.listView_ItemSelectionChanged);
+      this.listView.KeyDown += new System.Windows.Forms.KeyEventHandler(this.pluginTreeView_KeyDown);
+      // 
+      // nameHeader
+      // 
+      this.nameHeader.Text = "Name";
+      this.nameHeader.Width = 400;
+      // 
+      // versionHeader
+      // 
+      this.versionHeader.Text = "Version";
+      // 
+      // infoTextBox
+      // 
+      this.infoTextBox.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.infoTextBox.Location = new System.Drawing.Point(0, 0);
+      this.infoTextBox.Name = "infoTextBox";
+      this.infoTextBox.Size = new System.Drawing.Size(828, 249);
+      this.infoTextBox.TabIndex = 0;
+      this.infoTextBox.Text = "";
+      // 
+      // pluginIcons
+      // 
+      this.pluginIcons.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("pluginIcons.ImageStream")));
+      this.pluginIcons.TransparentColor = System.Drawing.Color.Magenta;
+      this.pluginIcons.Images.SetKeyName(0, "VSObject_Module.bmp");
+      this.pluginIcons.Images.SetKeyName(1, "VSObject_Namespace.bmp");
+      this.pluginIcons.Images.SetKeyName(2, "install.bmp");
+      this.pluginIcons.Images.SetKeyName(3, "delete.bmp");
+      this.pluginIcons.Images.SetKeyName(4, "genericInternet.bmp");
+      // 
+      // toolStrip
+      // 
+      this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.updateButton,
+            this.upgradeButton,
+            this.toolStripSeparator,
+            this.installButton,
+            this.deleteButton,
+            this.toolStripSeparator1,
+            this.publishButton});
+      this.toolStrip.Location = new System.Drawing.Point(0, 24);
+      this.toolStrip.Name = "toolStrip";
+      this.toolStrip.Size = new System.Drawing.Size(828, 25);
+      this.toolStrip.TabIndex = 2;
+      this.toolStrip.Text = "toolStrip";
+      // 
+      // updateButton
+      // 
+      this.updateButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+      this.updateButton.Image = ((System.Drawing.Image)(resources.GetObject("updateButton.Image")));
+      this.updateButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.updateButton.Name = "updateButton";
+      this.updateButton.Size = new System.Drawing.Size(46, 22);
+      this.updateButton.Text = "Update";
+      this.updateButton.Click += new System.EventHandler(this.updateButton_Click);
+      // 
+      // upgradeButton
+      // 
+      this.upgradeButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+      this.upgradeButton.Image = ((System.Drawing.Image)(resources.GetObject("upgradeButton.Image")));
+      this.upgradeButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.upgradeButton.Name = "upgradeButton";
+      this.upgradeButton.Size = new System.Drawing.Size(132, 22);
+      this.upgradeButton.Text = "Delete/Upgrade/Install...";
+      this.upgradeButton.Click += new System.EventHandler(this.upgradeButton_Click);
+      // 
+      // toolStripSeparator
+      // 
+      this.toolStripSeparator.Name = "toolStripSeparator";
+      this.toolStripSeparator.Size = new System.Drawing.Size(6, 25);
+      // 
+      // installButton
+      // 
+      this.installButton.CheckOnClick = true;
+      this.installButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+      this.installButton.Image = ((System.Drawing.Image)(resources.GetObject("installButton.Image")));
+      this.installButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.installButton.Name = "installButton";
+      this.installButton.Size = new System.Drawing.Size(40, 22);
+      this.installButton.Text = "&Install";
+      this.installButton.Click += new System.EventHandler(this.installButton_Clicked);
+      // 
+      // deleteButton
+      // 
+      this.deleteButton.CheckOnClick = true;
+      this.deleteButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+      this.deleteButton.Image = ((System.Drawing.Image)(resources.GetObject("deleteButton.Image")));
+      this.deleteButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.deleteButton.Name = "deleteButton";
+      this.deleteButton.Size = new System.Drawing.Size(42, 22);
+      this.deleteButton.Text = "&Delete";
+      this.deleteButton.Click += new System.EventHandler(this.removeButton_Clicked);
+      // 
+      // toolStripSeparator1
+      // 
+      this.toolStripSeparator1.Name = "toolStripSeparator1";
+      this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25);
+      // 
+      // publishButton
+      // 
+      this.publishButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
+      this.publishButton.Image = ((System.Drawing.Image)(resources.GetObject("publishButton.Image")));
+      this.publishButton.ImageTransparentColor = System.Drawing.Color.Magenta;
+      this.publishButton.Name = "publishButton";
+      this.publishButton.Size = new System.Drawing.Size(44, 22);
+      this.publishButton.Text = "Publish";
+      this.publishButton.Click += new System.EventHandler(this.publishButton_Click);
+      // 
+      // pluginContextMenuStrip
+      // 
+      this.pluginContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.installMenuItem,
+            this.deleteMenuItem,
+            this.publishMenuItem});
+      this.pluginContextMenuStrip.Name = "pluginContextMenuStrip";
+      this.pluginContextMenuStrip.Size = new System.Drawing.Size(119, 70);
+      // 
+      // installMenuItem
+      // 
+      this.installMenuItem.Name = "installMenuItem";
+      this.installMenuItem.Size = new System.Drawing.Size(118, 22);
+      this.installMenuItem.Text = "Install";
+      this.installMenuItem.Click += new System.EventHandler(this.installButton_Clicked);
+      // 
+      // deleteMenuItem
+      // 
+      this.deleteMenuItem.Name = "deleteMenuItem";
+      this.deleteMenuItem.Size = new System.Drawing.Size(118, 22);
+      this.deleteMenuItem.Text = "Delete";
+      this.deleteMenuItem.Click += new System.EventHandler(this.removeButton_Clicked);
+      // 
+      // publishMenuItem
+      // 
+      this.publishMenuItem.Name = "publishMenuItem";
+      this.publishMenuItem.Size = new System.Drawing.Size(118, 22);
+      this.publishMenuItem.Text = "Publish";
+      this.publishMenuItem.Click += new System.EventHandler(this.publishButton_Click);
+      // 
+      // statusStrip1
+      // 
+      this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.toolStripStatusLabel});
+      this.statusStrip1.Location = new System.Drawing.Point(0, 515);
+      this.statusStrip1.Name = "statusStrip1";
+      this.statusStrip1.Size = new System.Drawing.Size(828, 22);
+      this.statusStrip1.TabIndex = 3;
+      this.statusStrip1.Text = "statusStrip1";
+      // 
+      // toolStripStatusLabel
+      // 
+      this.toolStripStatusLabel.Name = "toolStripStatusLabel";
+      this.toolStripStatusLabel.Size = new System.Drawing.Size(103, 17);
+      this.toolStripStatusLabel.Text = "toolStripStatusLabel";
+      // 
+      // ManagerForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(828, 537);
+      this.Controls.Add(this.statusStrip1);
+      this.Controls.Add(this.toolStrip);
+      this.Controls.Add(this.splitContainer);
+      this.Controls.Add(this.menuStrip);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.MainMenuStrip = this.menuStrip;
+      this.Name = "ManagerForm";
+      this.Text = "Heuristiclab Pluginmanager Console";
+      this.menuStrip.ResumeLayout(false);
+      this.menuStrip.PerformLayout();
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      this.splitContainer.ResumeLayout(false);
+      this.toolStrip.ResumeLayout(false);
+      this.toolStrip.PerformLayout();
+      this.pluginContextMenuStrip.ResumeLayout(false);
+      this.statusStrip1.ResumeLayout(false);
+      this.statusStrip1.PerformLayout();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.MenuStrip menuStrip;
+    private System.Windows.Forms.ToolStripMenuItem pluginsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem installedPluginsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem installNewPluginsToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem managePluginSourcesToolStripMenuItem;
+    private System.Windows.Forms.SplitContainer splitContainer;
+    private System.Windows.Forms.RichTextBox infoTextBox;
+    private System.Windows.Forms.ToolStripMenuItem refreshPluginListToolStripMenuItem;
+    private System.Windows.Forms.ToolStrip toolStrip;
+    private System.Windows.Forms.ToolStripButton updateButton;
+    private System.Windows.Forms.ToolStripButton upgradeButton;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator;
+    private System.Windows.Forms.ToolStripButton installButton;
+    private System.Windows.Forms.ToolStripButton deleteButton;
+    private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+    private System.Windows.Forms.ToolStripButton publishButton;
+    private System.Windows.Forms.ContextMenuStrip pluginContextMenuStrip;
+    private System.Windows.Forms.ToolStripMenuItem installMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem deleteMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem publishMenuItem;
+    private System.Windows.Forms.ToolStripMenuItem installPluginFromFileToolStripMenuItem;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+    private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
+    private System.Windows.Forms.ImageList pluginIcons;
+    private System.Windows.Forms.StatusStrip statusStrip1;
+    private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel;
+    private System.Windows.Forms.ListView listView;
+    private System.Windows.Forms.ColumnHeader nameHeader;
+    private System.Windows.Forms.ColumnHeader versionHeader;
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/ManagerForm.resx	(revision 1270)
@@ -0,0 +1,608 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="pluginContextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>212, 17</value>
+  </metadata>
+  <metadata name="pluginIcons.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>382, 17</value>
+  </metadata>
+  <data name="pluginIcons.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAE
+        EgAAAk1TRnQBSQFMAgEBBQEAAQkBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABIAMAAQEBAAEYBgABGBUAA/0D8QPPAaUBmwKQAXIBVQGIAWEBQwGBAVoBQAF1AVYBQQFoAVoBUgNv
+        A5cDxwPsA/yWAAPwAccBvgGxAbMBgAFHAckBaQEoAcQBZgFDAcQBZQFLAc0BZgFMAc4BaAFOAb4BWwE3
+        AYMBRwEqAV4BTwFIA3kDtwPrA/2QAAP3AdQBxAGpAc8BewElAbMBTQEkAawBQAEcAYcBUgEmAZABTwEi
+        Aa0BPwEUAa4BSAEhAbwBVgE2AcoBZAFIAa4BUQEvAWEBRAE2A3UDwAPzkAAB6QHiAdYBzAF+ASwBnQE3
+        AQoBnQE3AQABqQE7AQABewFOAQcBOwFdAQ4BngE/AQABowE5AQABngE4AQMBpgFBARUBvAFXATcBrAFS
+        ATMBXwFLAUEDjAPfkAAB5QG3AXUBowE9AQMBpwFBAQABsgFMAQABvQFRAQABoQFYAgABbgEAAUABYgEA
+        AbcBTgEAAa4BRwEAAaMBOwEAAZYBQwERAZYBaAFPAY4BSgErAWwCawPHkAAByAF6ATABqwFCAQABvAFW
+        AQABxgFgAQAB1AFmAQABUAF3AgABfwIAAXsBAAGaAWYBAAHLAVkBAAHFAUsBAAGNAU8BCwFeAWgBNQGQ
+        AV8BOQFpAVkBTwOzkAABwAFlARUBvgFXAQAB0QFoAQAB5QFwAQAB0wF6AQABPwGKAQABJQGLAQABnQF/
+        AQAB3AF1AQABrAFvAQABQwFqAQABJgFlAQMBLAFnARkBawFkATABdQFUAT4DqpAAAcQBYwELAdIBZwEA
+        AdMBeAEAAXMBjwEGAXYBlQEFAWMBmgEJAcQBkwEAAf8BiwEAAfIBhAEAAY0BfwIAAX8CAAFzAQABBQFo
+        AQQBRQFkAR0BeQFVATcDq5AAAdABbwEMAd8BcAEAAWIBlAEMAQABrQEiAU4BqgEjAZgBrAElAf8BqQEe
+        Af8BoAENAfsBkgEAAecBhQEAATIBhAEAARABeQEAATYBZgEAATwBYQENAXwBXQE7A7aQAAHgAYQBHwHX
+        AXgBAAEkAa0BKQEcAbsBQgEZAcIBUQEyAcMBVALJAWEB/wHBAU8B/wGoARwB/AGRAQABaQGKAQABBQGC
+        AQABBwFzAQABFAFoAQMBhgFrAUsDyZAAAe0BqwFWAX0BjgELAR0BvgFGATIBywJjAdYBeQFaAdgBfgF5
+        Ad0BiAH/Ad4BiwH/Ab0BSAH/AZwBCAGGAY4BAAEyAYUCAAF5AQABNAFtAQMBmwGMAX0D4ZAAAe8B8QHN
+        AS4BtwE9ASABxgFYAVIB2AF/AcAB5wGaAbwB8AGwAc4B+AHHAdMB6QGhAdABwwFUAcEBpwEbAeIBiwEC
+        AX4BgQIAAXwBAAGUAXsBJAPFA/WQAAL+AfwBvAHnAakBSgHAAVEBagHZAX8BrAHrAaMB2wH4Ab8B3wHz
+        AbUBfAHcAYYBIQHFAVcBhQGoAR4B7wGHAQABzwF2AQABjgGHAQ4BxQG2AaID7ZYAAv4B+AHXAeoBtAGN
+        AdEBcQGiAdkBgAG1AeUBmAGbAeIBkgFCAdUBeAEQAcMBUgFWAaIBHQHuAYMBAgHlAZUBKgHZAcMBoAPv
+        A/2ZAAL+Af0C+AHcAc8B5AGiAbgB2QF/AYcB1AF3AYYBwgFSAVoBwAFMAakBswFNAeoBwAF9AesB5AHZ
+        A/ioAAH9AfoB7AH5Ae8B0AH2AecBwwHzAegB0AH1AfQB8QP7/wADAAPvA8ADkgOEA48DoAOwA7cDqAOV
+        A5IDoQPEA+kD+5AAA/oDvgOZAa4CrQGMAYkBiwFzAnIBYwFiAWEBYwFfAV4BfwJoAZsCfAGeAoIBgwJt
+        AWMCWQNzA7AD6QMAAbUCjwGAAmYBmwKBAccCIhIAAdcCPgHTArkBqQKPAZ8CbSQAAeUCywGdAU0BJQGd
+        AU0BJQGdAU0BJQHdArsJAAP/AwAG/wkABv8DAAP/BgAD7AGmAqcB1wHVAdQB/wH9AfIB4gHyAdYB+QHz
+        AeEB7gHBAZ0BxgGGAX8B9wGpAasB/wLGAf8C2QH+AuwB1gLDAWUCVANyA8IBngFlAcABRwElAdQBRwEz
+        AaMBaAFlAXcBswKVAdACMwwAAdMCQQG4AZcBsQFtAVoBwQFXAT0BxwGoAo4GAAH7AcMB+wHLAR8BzQH8
+        AdUB/BIAAfAC4QGdAU0BJQH6AZ0BYgHhAYYBWAHhAYYBWAGdAU0BJQwAA+4DiAMzCQADMwOIA+4JAAPq
+        ArEBsgHUAs8B8AHrAdMBIQGtASUBKQGqASEBnAGaAWMB/wGdAaQB/wKgAf8BrQGsAf8BvgG9Af8C6gP/
+        AdUCwwFgAlYDlwGxAaIB8wEyAQoB4AEyARAB0AFRAUcBfAGDAYIBiAHEAqAB1QI+BgABzwFBAUUBpQF8
+        Aa4BWgFAAcwBRAEkAdMBfAFLAbEBygIlAwAB/QHpAf4BywEfAc0BywEfAc0BywEfAc0DAAHpAfAB6QEn
+        AW8BKAEaAWcBHAEaAWcBHAHpAfAB6QHnAZoBcwH8Ab4BlwH7AcABoQH7AbEBggGiAVYBMQHyAuQMAAOI
+        AwoD6AkAA+gDCgOICQAD6gO/AegB4gHhAfEB5QHJATEBwwFCAQABoAEHAZ8BnQF0Af8BtwG9Af8BoQGg
+        Af8BsQG6AfwBuwHQAf8B8wH3Bv8BiQJxA3gBzAE3AU0BbwFMAd8BMwEMAd8BPwEkAbkBYAFaAXsDlgHK
+        AqEB1gJDAc8BRAFJAZ8BbgGrAVQBOAHQAUwBLgHQAYsBWQGqAb0BGwE0BgAB2AFrAdcB/wFeAfwBywEf
+        Ac0BywEfAc0B6QHwAekBLAGCATMBWgGvAV8BWwGpAV8BTQGcAU8BGQF3ARwB9wLwAecBmgFzAecBmgFz
+        AecBmgFzAfMC5wwAA/8DTQMKDwADCgNNA/8GAAPrAsQBxQHsAeQB4gHzAeEBvgFTAeYBawEeAbEBLAHI
+        Aa0BnQH/AckBzAH/AckBygHmAccB0QHHAbABrwHxAeAB5AH4AfUB9AH4AfQB8gHBAacBpQNxAwABuQEn
+        AVMBaAE5AdUBOAEUAdwBTgE4Aa0BbAFnAYIDmgG5AYwBkAGZAWUBpQFVATgB0QFNAS4B0QGOAVcBowHF
+        ASwBOAkAAdgBawHXAeQBQgHmAf8BpgH/AcsBHwHNASsBggE5AYgB1wGTAX4BzQGIAWQBswFpASIBegEn
+        AekB8AHpBgABVgFQAUoPAAb/A00DCg8AAwoDTQb/AwAD6wHHAcoBzQHuAuoB8wHcAbMBXQHgAbUBNgGm
+        AcoBxgGlAbgB/wHPAc0B/wHdAd4B5AHVAd8BugGjAZoB7QHLAcwB+wLLAfoBywHKAc8CpgN8BgABsQEl
+        AVoBZgE0Ac4BQgEgAdgBUAE7AawBZwFgAYMBbgFiAaIBUAEzAcwBTgEwAdEBjgFTAaEBxAEvATwMAAHY
+        AWsB1wH/AaYB/wHYAWsB1wH8AdUB/AHpAfAB6QErAYIBOQEmAX4BLgEiAXoBJwHpAfAB6QFWAVABSgMA
+        AVYBUAFKDwAD/wMAA/gDCgO/DwADvwMKA/gGAAPsAc0BxwG8AfYB2gGzAfUB0gGvAWEBrQH1AToBlgH7
+        AacBoQHDAf8B9QHyAf8C+wH/AfMB/wHyAb4B3AH9AcEBywH/AZ8BngH/ArMBwgKMA6AJAAGvAScBYAFl
+        AS8ByAFEASIB1wE/ASYBrwE2ARkBuAE+ASABwAF+AXABvwHHAXUBgg8AAf0B6QH+AdgBawHXAf0B6QH+
+        AVYBUAFKEgABVgFQAUoSAAb/AwoDZBUAA2QDCgP/AwAB7AHtAe4B0QGmAWsB8gGrAVEB/wHSAaYB9gHJ
+        AZsB3QHCAaMBywGmAZ4B7QHpAe4E/wLwAf8BywHSAf8BswG0Af8BowGiAfwCnwGcAn0D0QwAAaoBaQGo
+        AU8BLgHdASsBBAHbATIBDQHTAVMBQAGoAZABjQGaAcQClwHTAkAYAAFWAVABSgwAAVYBUAFKAwABVgFQ
+        AUoB+wHDAfsBywEfAc0B/AHVAfwGAAP/AwAD+AMzA7oPAAO6AzMD+AYAAu0B7gHHAaoBiAHjAbcBiAH/
+        AcIBdgH/AbkBXgH/AcABaAH8AbYBaAHSAaQBhwHrAeQB6gH/AfIB9gH/AdsB3QH/As4B/AK2AbcCgAHI
+        AsQD8wkAAc8BPAFAAaEBdQGvAU4BLgHWATwBGAHZAUIBIQHTAVYBQAG0AXgBcgGUAZsBmgGeAb0ClAHO
+        AjcYAAOGARIBWwGFAYcBsAHIAVYBUAFKBgAB/QHpAf4BywEfAc0BywEfAc0BywEfAc0MAAP/A00DMw8A
+        AzMDTQP/BgAD7AG7Ab4BwAHYAdEBxgH/AccBcQH7AcsBggH6AcQBeAH8Ab8BaAH3AbABUAHVAZkBXQHi
+        AbYBmAHnAb4BrAG+ApgBoAKAAccCwQPzCQAB0AE2AToBpQGAAbYBTwEwAdMBRAEkAdABdQE3AaUBeAEi
+        AZQBXQEeAbkBXgFHAcIBdQFsAZoBjwGNAZYBtAKQAcoCLRUAASgBfAGrAQwBrQHuARoBZwGTAZsBvgHR
+        BgAB2AFrAdcB/wFeAfwBywEfAc0BywEfAc0MAAP/A00DMw8AAzMDTQP/BgAD6gLTAdQB7QHlAd8B4wHQ
+        AccB6QHoAfAB7APpAeUB4QHmAeIB2QHnAdQBtAHhAbkBgAHgAbEBcAGEAXkBdQGYApYD4gP8BgABzQEr
+        AS8BqQGMAb0BSwErAdEBOgEXAdUBfQFKAaEBvgEkATQDAAGeAQwBVQFdASEBwAFZAT4BzQFvAWMBogGH
+        AYUBkgGxApMB1QIwEgABDAGtAe4BKAF8AasBDAGtAe4BGgFnAZMGAAHYAWsB1wHkAUIB5gH/AaYB/wHL
+        AR8BzQ8AA4gDMwPeCQAD3gMzA4gJAAPhAdkB3AHfAdgBxAG4AbUBgAF0AbMBgwGAAbsCjQHFAZ4BnwHL
+        AacBqgHZAcwB0AHqAfEB+AHiAeQB6QGCAoMDnAPmBgAB0AEkASwBpgGSAb8BQwEkAc4BMwEOAdYBcAFA
+        AaUBugEZAS4JAAGqARcBUgFjAS4ByQFTATQB1wF3AWkBtAGhAZkBngHYApsSAAEEAbQB/AFmAcwB/wEo
+        AXwBqwEhAXIBoAYAAdgBawHXAf8BpgH/AdgBawHXAfwB1QH8DwAD7gOIAzMJAAMzA4gD7gkAA9QB9AHy
+        Ae4B/AHNAZMB/QHFAYsB+AHEAZ0B8gG9AaAB7AG3AaMB5wGwAaUB7AHEAcAB/wLqAf4C7gF+An0DmAPh
+        A/0DAAG1AaoB5wE/AR0B0AEuAQcB2gFfATIBqwG5ARABKA8AAb4BKgFPAX8BSwHNAWMBLQHFAdABjwGk
+        FQAB2QHlAewBBAG0AfwBZgHMAf8BKAF8AasGAAH9AekB/gHYAWsB1wH9AekB/g8AA/8DAAb/CQAG/wMA
+        A/8GAAHOAc0BywHzAcoBlQH7AccBjgH+AcwBoQH/Ac4BqQH/Ac4BsQH/AdABuwH/AdQBxwHNAbQBsQHs
+        AdoB2wH/Av4DxwPDA+4GAAFAARwB4AEtAQUB3wFKASEBuwG6AQgBIzYAAdkB5QHsAQQBtAH8AbgB0AHd
+        SAAB6wHqAugB5ALgAdwC2AHTAdAB3AHSAc8B3QHPAcsB0wHEAcMB0QLPA9gD3APdA/AD+wYAATYBEAHh
+        AUwBKgHhAcMBBgEcJwABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAYABAQYA
+        AYBYAAEBBgABgAEBBgABwAEHBgAB+AEfBgAE/wGAAQAG/wIAAYcB4QH/AeAB6QHLAgABAwHBAY8BwAHx
+        AccCAAEBAYEBCAEAAfEBxwMAAQMBAAEBAuMCAAGAAQcBAAE3AcMB4QIAAcABDwEAAS8BowHjAgAB4AEf
+        AQ8B3wGHAfECAAHwAQ8B9wGhAaMB4wIAAeABBwH4AWEC4wEAAQEBwAEDAfgBYQLjAQABAQGBAQEB+AFh
+        AfEBxwEAAgMBgQH4AWEB8QHHAQABAQEHAcMB+AFjAekBywEAAQMBDwH/AfwBfwL/AYABAwEfAf8L
+</value>
+  </data>
+  <metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>119, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="updateButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="upgradeButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="installButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="deleteButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <data name="publishButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAgxJREFUOE+lkvtL
+        U2EYx+0PEbtpFwnBKPGKiJImGP0gYhIYs1E5GF5gIxkpA00JRSmMEF0ohMh+GaRWYlqabMVcNdS2QpaI
+        VqiDIYhk397vA6fXhCjyhYdzeM/5fp7vczkAdeL2cwho7v/wWzT1zcN+Pwhr51uY2/y41PQaF+wzKKiZ
+        QvaN58g0jyLd5KEUcQbg+84P/Cm2tncQjW3j68YWIqubCC3FcOJc478BAuGoZM6zvoRnakXEruEIjhc4
+        /g5gZop9c+voGAyLbQIfeBZxLL9BA1jzXvuGbWamuKh+GmmVbswE19A59FEBbmoAG7YbsLtm2mZmiml9
+        cvabNDwpz6YB7LYBoMXCumkJr7LOmnnHzBQ/9X2Bo2cOibm1GsBREbAQiYmw/8lnuCeWkVzcgnZlnw1j
+        3HV/wuNXK6i/9x5Hc6wawDlTXHbLJ+LZUBQPRyKwdQdxutwl1h+NLXHh5Ht1ewBHsiwawCW57HyDAfWR
+        dvl0uhZQ1eqX8aVc7EKLqrum651ATLf9OJx5XQM4KmY0xPzZ0hFAiQJnXB0WwME0E3IsL5B17ZlADqWb
+        NYDrOepdlcysmTWWOrxqbceRWtaLk0VO1XW72D5Vckd2gMBfq8zdpmUG62NJvKM4+XyziDk24xmfWoGE
+        s1c0gHPmbrPTpHNJKOCo2G1mZs20zcwUJ5yp1AB5+8/zEwgF5GMVDxh4AAAAAElFTkSuQmCC
+</value>
+  </data>
+  <metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>490, 17</value>
+  </metadata>
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginAction.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginAction.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginAction.cs	(revision 1270)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Diagnostics;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  [Flags]
+  enum ManagerAction {
+    Install = 1,
+    Remove = 2,
+    None = 4,
+    Any = Install | Remove
+  };
+
+  class PluginAction {
+    private ManagerAction action;
+
+    public ManagerAction Action {
+      get { return action; }
+      set { action = value; }
+    }
+
+    private List<PluginTag> hull;
+
+    public List<PluginTag> Hull {
+      get { return hull; }
+      set { hull = value; }
+    }
+
+    private PluginTag plugin;
+
+    public PluginTag Plugin {
+      get { return plugin; }
+      set { plugin = value; }
+    }
+
+    public string GetInverseActionString() {
+      switch(action) {
+        case ManagerAction.Install:
+          return "Don't install";
+        case ManagerAction.Remove:
+          return "Keep";
+        default:
+          // this method is not defined for actions other than "Install" and "Remove"
+          throw new InvalidOperationException();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginDescription.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  class PluginDescription {
+    private string name;
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+    private Version version;
+    public Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private DateTime buildDate;
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+
+    private List<string> dependencies = new List<string>();
+    public List<string> Dependencies {
+      get { return dependencies; }
+    }
+
+    private PluginSource source;
+    public PluginSource Source {
+      get { return source; }
+    }
+
+    public PluginDescription(string name, Version version, DateTime buildDate, PluginSource source) {
+      this.name = name;
+      this.version = version;
+      this.source = source;
+      this.buildDate = buildDate;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginNameTransform.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginNameTransform.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginNameTransform.cs	(revision 1270)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ICSharpCode.SharpZipLib.Core;
+using System.Diagnostics;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  /// <summary>
+  /// This classes is needed to prune the directory tree of zipped plugin packages by removing the path leading to the plugin directory.
+  /// </summary>
+  class PluginNameTransform : INameTransform{
+
+    private string pluginDir = Application.StartupPath + "\\" + HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir + "\\";    
+    #region INameTransform Members
+
+    public string TransformDirectory(string name) {
+      if(name.StartsWith(pluginDir)) {
+      return name.Remove(0, pluginDir.Length);
+      } else {
+        return name;
+      }
+    }
+
+    public string TransformFile(string name) {
+      if(name.StartsWith(pluginDir)) {
+        return name.Remove(0, pluginDir.Length);
+      } else {
+        return name;
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSource.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSource.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSource.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Xml;
+using System.ComponentModel;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  class PluginSource {
+
+    private string url;
+    private WebClient client;
+    private string cacheDir = Application.StartupPath + "/" + HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.CacheDir;
+
+    private PluginSource(string url) {
+      this.url = url;
+    }
+
+    /// <summary>
+    /// Factory method for new PluginRepositories
+    /// </summary>
+    /// <param name="url"></param>
+    /// <returns></returns>
+    public static PluginSource TryCreate(string url) {
+      PluginSource newSource = new PluginSource(url);
+      if(newSource.VerifyRepositoryLocation()) {
+        return newSource;
+      } else {
+        return null;
+      }
+    }
+
+    private bool VerifyRepositoryLocation() {
+      try {
+        this.client = new WebClient();
+        client.DownloadData(url + "/plugins.xml");
+      } catch(Exception) {
+        return false;
+      }
+      return true;
+    }
+
+    public List<PluginDescription> AvailablePlugins() {
+      List<PluginDescription> availablePlugins = new List<PluginDescription>();
+
+      Stream xmlStream = client.OpenRead(url + "/plugins.xml");
+
+      XmlDocument pluginList = new XmlDocument();
+      pluginList.Load(xmlStream);
+
+      XmlNode list = pluginList.SelectSingleNode("/Plugins");
+      foreach(XmlNode child in list.ChildNodes) { 
+       
+        string name = child.Attributes["Name"].Value;
+        string version = child.Attributes["Version"].Value;
+
+        DateTime buildDate;
+        if(child.Attributes["Build"] != null) {
+          string build = child.Attributes["Build"].Value;
+          DateTime.TryParse(build, System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat, System.Globalization.DateTimeStyles.AssumeUniversal, out buildDate);
+        } else {
+          buildDate = DateTime.MinValue;
+        }
+        PluginDescription description = new PluginDescription(name, new Version(version), buildDate, this);
+        availablePlugins.Add(description);
+
+        // retrieve the list of dependencies
+        XmlNodeList dependencies = child.SelectNodes("Dependency");
+        foreach(XmlNode dependencyNode in dependencies) {
+          string dependencyName = dependencyNode.Attributes["Name"].Value;
+          description.Dependencies.Add(dependencyName);
+        }
+
+      }
+
+      return availablePlugins;
+    }
+
+    internal long DownloadPlugin(PluginDescription description) {
+      string fileName = description.Name + "-" + description.Version + ".zip";
+      client.DownloadFile(url + "/" + fileName, cacheDir + "/" + fileName);
+
+      // return size of downloaded file
+      FileInfo info = new FileInfo(cacheDir + "/" + fileName);
+      return info.Length;
+    }
+
+    public void CancelAsyncDownload() {
+      client.CancelAsync();
+    }
+
+    public override string ToString() {
+      return url;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,101 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  partial class PluginSourceEditor {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PluginSourceEditor));
+      this.saveButton = new System.Windows.Forms.Button();
+      this.sourcesTextBox = new System.Windows.Forms.TextBox();
+      this.cancelButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // saveButton
+      // 
+      this.saveButton.Location = new System.Drawing.Point(194, 198);
+      this.saveButton.Name = "saveButton";
+      this.saveButton.Size = new System.Drawing.Size(75, 23);
+      this.saveButton.TabIndex = 0;
+      this.saveButton.Text = "Save";
+      this.saveButton.UseVisualStyleBackColor = true;
+      this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+      // 
+      // sourcesTextBox
+      // 
+      this.sourcesTextBox.Location = new System.Drawing.Point(12, 12);
+      this.sourcesTextBox.Multiline = true;
+      this.sourcesTextBox.Name = "sourcesTextBox";
+      this.sourcesTextBox.Size = new System.Drawing.Size(338, 180);
+      this.sourcesTextBox.TabIndex = 1;
+      // 
+      // cancelButton
+      // 
+      this.cancelButton.Location = new System.Drawing.Point(275, 198);
+      this.cancelButton.Name = "cancelButton";
+      this.cancelButton.Size = new System.Drawing.Size(75, 23);
+      this.cancelButton.TabIndex = 2;
+      this.cancelButton.Text = "Cancel";
+      this.cancelButton.UseVisualStyleBackColor = true;
+      this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+      // 
+      // PluginSourceEditor
+      // 
+      this.ClientSize = new System.Drawing.Size(362, 233);
+      this.Controls.Add(this.cancelButton);
+      this.Controls.Add(this.sourcesTextBox);
+      this.Controls.Add(this.saveButton);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "PluginSourceEditor";
+      this.Text = "Edit plugin sources";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button saveButton;
+    private System.Windows.Forms.TextBox sourcesTextBox;
+    private System.Windows.Forms.Button cancelButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.cs	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Collections.Specialized;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+  public partial class PluginSourceEditor : Form {
+    private StringCollection settingsSources = HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.PluginSources;
+    public PluginSourceEditor() {     
+      InitializeComponent();
+
+      string[] sources = new string[settingsSources.Count];
+
+      settingsSources.CopyTo(sources, 0);
+      sourcesTextBox.Lines = sources;
+    }
+
+    private void saveButton_Click(object sender, EventArgs e) {
+      DialogResult = DialogResult.OK;
+      settingsSources.Clear();
+      foreach(string line in sourcesTextBox.Lines) {
+        settingsSources.Add(line);
+      }
+
+      HeuristicLab.PluginInfrastructure.GUI.Properties.Settings.Default.Save();
+      Close();
+    }
+
+    private void cancelButton_Click(object sender, EventArgs e) {
+      DialogResult = DialogResult.Cancel;
+      Close();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginSourceEditor.resx	(revision 1270)
@@ -0,0 +1,434 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/PluginTag.cs	(revision 1270)
@@ -0,0 +1,235 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure.GUI {
+
+  [Flags]
+  enum PluginState { 
+    Installed = 1,
+    Available = 2,
+    Upgradeable = 4,
+    Disabled = 8,
+  };
+
+  class PluginTag {
+    private PluginInfo plugin;
+    public PluginInfo Plugin {
+      get { return plugin; }
+    }
+
+    private PluginDescription pluginDescription;
+    internal PluginDescription PluginDescription {
+      get { return pluginDescription; }
+      set { 
+        pluginDescription = value;
+        pluginDependencies = GeneratePluginDependencies(pluginDescription);
+        pluginDetails = GeneratePluginDetails(pluginDescription);
+      }
+    }
+
+    private PluginDescription upgradePluginDescription;
+    public PluginDescription UpgradePluginDescription {
+      get { return upgradePluginDescription; }
+      set {
+        upgradePluginDescription = value;
+        pluginDependencies = GeneratePluginDependencies(upgradePluginDescription);
+        pluginDetails = GenerateUpgradeDetails(upgradePluginDescription);
+        state = PluginState.Upgradeable;
+      }
+    }
+
+    private string pluginName;
+    public string PluginName {
+      get { return pluginName; }
+      set { pluginName = value; }
+    }
+
+    private Version pluginVersion;
+    public Version PluginVersion {
+      get { return pluginVersion; }
+      set { pluginVersion = value; }
+    }
+    private DateTime pluginBuildDate;
+    public DateTime PluginBuildDate {
+      get { return pluginBuildDate; }
+      set { pluginBuildDate = value; }
+    }
+
+    private string pluginDetails;
+    private List<string> pluginDependencies;
+    private List<PluginTag> allTags;
+
+    private PluginState state;
+    public PluginState State {
+      get { return state; }
+      set { state = value; }
+    }
+
+    private string message;
+    public string Message {
+      get { return message; }
+    }
+
+    public List<PluginTag> hull = new List<PluginTag>();
+
+    public PluginTag(List<PluginTag> allTags, PluginInfo plugin, PluginState state) {
+      this.plugin = plugin;
+      this.state = state;
+      this.allTags = allTags;
+      this.pluginName = plugin.Name;
+      this.pluginVersion = plugin.Version;
+      this.pluginBuildDate = plugin.BuildDate;
+      this.message = plugin.Message;
+      pluginDetails = GeneratePluginDetails(plugin);
+      pluginDependencies = GeneratePluginDependencies(plugin);
+    }
+
+    public PluginTag(List<PluginTag> allTags, PluginDescription plugin, PluginState state) {
+      this.pluginDescription = plugin;
+      this.state = state;
+      this.allTags = allTags;
+      this.pluginName = plugin.Name;
+      this.pluginVersion = plugin.Version;
+      this.pluginBuildDate = plugin.BuildDate;
+      pluginDetails = GeneratePluginDetails(plugin);
+      pluginDependencies = GeneratePluginDependencies(plugin);
+    }
+
+
+
+    private string GeneratePluginDetails(PluginInfo plugin) {
+      string filenames = "";
+      foreach (string filename in plugin.Files) {
+        filenames += filename + "\n";
+      }
+      string dependencies = "";
+      foreach (PluginInfo dependency in plugin.Dependencies) {
+        dependencies += dependency.Name + " (" + dependency.Version + ")\n";
+      }
+      string dependents = "";
+      PluginManager.Manager.GetDependentPlugins(plugin).ForEach(delegate(PluginInfo dependentPlugin) {
+        dependents += dependentPlugin.Name + " (" + dependentPlugin.Version + ")\n";
+      });
+      return "Plugin: " + plugin.Name + "\n" +
+      "Version: " + plugin.Version + "\n" +
+      "Build: " +plugin.BuildDate + "\n\n" +
+      (dependencies.Length != 0 ? "Requires: \n" + dependencies + "\n" : "") +
+      (dependents.Length != 0 ? "Used by:\n" + dependents + "\n" : "") +
+      (filenames.Length != 0 ? "Files:\n" + filenames + "\n" : "") + message;
+      ;
+    }
+
+    private string GeneratePluginDetails(PluginDescription plugin) {
+      string dependencies = "";
+      foreach (string dependency in plugin.Dependencies) {
+        dependencies += dependency + "\n";
+      }
+      return "plugin: " + plugin.Name + "\n" +
+      "Version: " + plugin.Version + "\n" +
+      "Build: "+plugin.BuildDate +"\n" +
+      "Installed from: " + plugin.Source + "\n" +
+      "Requires: \n" + dependencies;
+    }
+
+    private string GenerateUpgradeDetails(PluginDescription upgrade) {
+      string dependencies = "";
+      foreach(string dependency in upgrade.Dependencies) {
+        dependencies += dependency + "\n";
+      }
+      return "plugin: " + upgrade.Name + "\n" +
+      "Current version: " + plugin.Version + " ("+plugin.BuildDate+") will be upgraded to new version: " + upgrade.Version + " ("+upgrade.BuildDate+")\n"+
+      "Upgraded from: " + upgrade.Source + "\n" +
+      "Requires: \n" + dependencies;
+    }
+
+    private List<string> GeneratePluginDependencies(PluginInfo plugin) {
+      List<string> dependencies = new List<string>();
+      plugin.Dependencies.ForEach(delegate(PluginInfo dependency) {
+        dependencies.Add(dependency.Name);
+      });
+      return dependencies;
+    }
+
+    private List<string> GeneratePluginDependencies(PluginDescription plugin) {
+      return new List<string>(plugin.Dependencies);
+    }
+
+    internal string GetPluginDetails() {
+      return pluginDetails;
+    }
+
+    internal List<PluginTag> GetDependentTags() {
+      List<PluginTag> dependentTags = new List<PluginTag>();
+      foreach(PluginTag tag in allTags) {
+        if (tag.pluginDependencies.Contains(pluginName)) {
+          if (!dependentTags.Contains(tag)) {
+            dependentTags.Add(tag);
+
+            tag.GetDependentTags().ForEach(delegate(PluginTag dependentTag) {
+              if (!dependentTags.Contains(dependentTag)) {
+                dependentTags.Add(dependentTag);
+              }
+            });
+          }
+        }
+      }
+      return dependentTags;
+    }
+
+    internal List<PluginTag> GetDependencyTags() {
+      List<PluginTag> dependencyTags = new List<PluginTag>();
+      foreach(PluginTag tag in allTags) {
+        if (pluginDependencies.Contains(tag.pluginName)) {
+          if (!dependencyTags.Contains(tag)) {
+            dependencyTags.Add(tag);
+
+            tag.GetDependencyTags().ForEach(delegate(PluginTag dependencyTag) {
+              if (!dependencyTags.Contains(dependencyTag)) {
+                dependencyTags.Add(dependencyTag);
+              }
+            });
+          }
+        }
+      };
+      return dependencyTags;
+    }
+
+    internal bool UpgradeAvailable() {
+      return UpgradePluginDescription != null;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj == null || !(obj is PluginTag)) return false;
+      PluginTag other = (PluginTag)obj;
+      return other.pluginName == pluginName && other.pluginVersion == pluginVersion;
+    }
+
+    public override int GetHashCode() {
+      if(pluginVersion != null) {
+        return pluginName.GetHashCode() + pluginVersion.GetHashCode();
+      } else return pluginName.GetHashCode();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 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 Pluginmanager Console")]
+[assembly: AssemblyDescription("The PluginManager Console helps you to manage your collection of HeuristicLab plugins. You can remove plugins, install new plugins from web location and automatically download the latest version of your plugins.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("02326293-f40d-4f51-a298-014b3e9d2b19")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,98 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.1433
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.PluginInfrastructure.GUI.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.PluginInfrastructure.GUI.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Icon HeuristicLab {
+            get {
+                object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Logo_gray {
+            get {
+                object obj = ResourceManager.GetObject("Logo_gray", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,127 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Logo_gray" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Logo_gray.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,67 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.PluginInfrastructure.GUI.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.UserScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<ArrayOfString xmlns:xsi=\"http://www.w3." +
+            "org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <s" +
+            "tring>http://update.heuristiclab.com/hl-nextgen/</string>\r\n</ArrayOfString>")]
+        public global::System.Collections.Specialized.StringCollection PluginSources {
+            get {
+                return ((global::System.Collections.Specialized.StringCollection)(this["PluginSources"]));
+            }
+            set {
+                this["PluginSources"] = value;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("plugins\\cache")]
+        public string CacheDir {
+            get {
+                return ((string)(this["CacheDir"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("plugins\\backup")]
+        public string BackupDir {
+            get {
+                return ((string)(this["BackupDir"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("plugins\\temp")]
+        public string TempDir {
+            get {
+                return ((string)(this["TempDir"]));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,21 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.PluginInfrastructure.GUI.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="PluginSources" Type="System.Collections.Specialized.StringCollection" Scope="User">
+      <Value Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
+&lt;ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
+  &lt;string&gt;http://update.heuristiclab.com/hl-nextgen/&lt;/string&gt;
+&lt;/ArrayOfString&gt;</Value>
+    </Setting>
+    <Setting Name="CacheDir" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">plugins\cache</Value>
+    </Setting>
+    <Setting Name="BackupDir" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">plugins\backup</Value>
+    </Setting>
+    <Setting Name="TempDir" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">plugins\temp</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure.GUI/app.config	(revision 1270)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.PluginInfrastructure.GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
+        </sectionGroup>
+        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.PluginInfrastructure.GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <userSettings>
+        <HeuristicLab.PluginInfrastructure.GUI.Properties.Settings>
+            <setting name="PluginSources" serializeAs="Xml">
+                <value>
+                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+                        <string>http://update.heuristiclab.com/hl-nextgen/</string>
+                    </ArrayOfString>
+                </value>
+            </setting>
+        </HeuristicLab.PluginInfrastructure.GUI.Properties.Settings>
+    </userSettings>
+    <applicationSettings>
+        <HeuristicLab.PluginInfrastructure.GUI.Properties.Settings>
+            <setting name="CacheDir" serializeAs="String">
+                <value>plugins\cache</value>
+            </setting>
+            <setting name="BackupDir" serializeAs="String">
+                <value>plugins\backup</value>
+            </setting>
+            <setting name="TempDir" serializeAs="String">
+                <value>plugins\temp</value>
+            </setting>
+        </HeuristicLab.PluginInfrastructure.GUI.Properties.Settings>
+    </applicationSettings>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/ApplicationInfo.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/ApplicationInfo.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/ApplicationInfo.cs	(revision 1270)
@@ -0,0 +1,87 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Class that provides information about an application.
+  /// </summary>
+  [Serializable]
+  public class ApplicationInfo {
+    private string name;
+
+    /// <summary>
+    /// Gets or sets the name of the application.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+    private Version version;
+
+    /// <summary>
+    /// Gets or sets the version of the application.
+    /// </summary>
+    public Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private string description;
+
+    /// <summary>
+    /// Gets or sets the description of the application.
+    /// </summary>
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    private bool autoRestart;
+    /// <summary>
+    /// Gets or sets the boolean flag if the application should be automatically restarted.
+    /// </summary>
+    public bool AutoRestart {
+      get { return autoRestart; }
+      set { autoRestart = value; }
+    }
+
+    private string pluginAssembly;
+    /// <summary>
+    /// Gets or sets the name of the assembly that contains the IApplication type.
+    /// </summary>
+    public string PluginAssembly {
+      get { return pluginAssembly; }
+      set { pluginAssembly = value; }
+    }
+
+    private string pluginType;
+    /// <summary>
+    /// Gets or sets the name of the type that implements the interface IApplication.
+    /// </summary>
+    public string PluginType {
+      get { return pluginType; }
+      set { pluginType = value; }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/AssemblyBuildDateAttribute.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/AssemblyBuildDateAttribute.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/AssemblyBuildDateAttribute.cs	(revision 1270)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Globalization;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Attribute of an assembly when it was built.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
+  public class AssemblyBuildDateAttribute : Attribute {
+    private DateTime buildDate;
+    /// <summary>
+    /// Gets or sets the date when the assembly has been built.
+    /// </summary>
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="AssemblyBuildDateAttribute"/> with the given 
+    /// <paramref name="timeStamp"/> as build date.
+    /// </summary>
+    /// <exception cref="FormatException">Thrown when the time stamp could not be parsed as build date.</exception>
+    /// <param name="timeStamp">The build date of the assembly.</param>
+    public AssemblyBuildDateAttribute(string timeStamp)
+      : base() {
+
+      if(!DateTime.TryParse(timeStamp, out buildDate)) {
+        throw new FormatException("Can't parse AssemblyBuildDate " + timeStamp);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/BaseClasses/ApplicationBase.cs	(revision 1270)
@@ -0,0 +1,118 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Diagnostics;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Default implementation for the IApplication interface.
+  /// </summary>
+  public abstract class ApplicationBase : IApplication {
+    private string name;
+    private Version version;
+    private string description;
+    private bool autoRestart;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ApplicationBase"/>.
+    /// </summary>
+    public ApplicationBase() {
+      ReadAttributes();
+    }
+
+    private void ReadAttributes() {
+      object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(ClassInfoAttribute), false);
+
+      // exactly one attribute of the type ClassInfoAttribute must be given
+      if(pluginAttributes.Length != 1) {
+        throw new InvalidPluginException();
+      }
+
+      // after the assertion we are sure that the array access will not fail
+      ClassInfoAttribute pluginAttribute = (ClassInfoAttribute)pluginAttributes[0];
+      if(pluginAttribute != null) {
+        // if the plugin name is not explicitly set in the attribute then the default plugin name is the FullName of the type
+        if(pluginAttribute.Name != null) {
+          this.name = pluginAttribute.Name;
+        } else {
+          this.name = this.GetType().FullName;
+        }
+
+        // if the version is not explicitly set in the attribute then the version of the assembly is used as default
+        if(pluginAttribute.Version != null) {
+          this.version = new Version(pluginAttribute.Version);
+        } else {
+          this.version = this.GetType().Assembly.GetName().Version;
+        }
+
+        // if the description is not explicitly set in the attribute then the name of name of the application is used as default
+        if(pluginAttribute.Description != null) {
+          this.description = pluginAttribute.Description;
+        } else {
+          this.description = name;
+        }
+
+        this.autoRestart = pluginAttribute.AutoRestart;
+      }
+    }
+
+
+    #region IApplication Members
+
+    /// <summary>
+    /// Gets the name of the application.
+    /// </summary>
+    public string Name {
+      get { return name; }
+    }
+
+    /// <summary>
+    /// Gets the version of the application.
+    /// </summary>
+    public Version Version {
+      get { return version; }
+    }
+
+    /// <summary>
+    /// Gets the description of the application.
+    /// </summary>
+    public string Description {
+      get { return description; }
+    }
+
+    /// <summary>
+    /// Gets the boolean flag whether the application should automatically get restarted.
+    /// </summary>
+    public bool AutoRestart {
+      get { return autoRestart; }
+    }
+
+    /// <summary>
+    /// Runs the application.
+    /// </summary>
+    public abstract void Run();
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/BaseClasses/PluginBase.cs	(revision 1270)
@@ -0,0 +1,137 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using System.Diagnostics;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Default implementation of the IPlugin interface.
+  /// </summary>
+  public abstract class PluginBase : IPlugin {
+    private string name;
+    private Version version;
+    private string[] files;
+    private string description;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginBase"/>.
+    /// </summary>
+    public PluginBase() {
+      ReadAttributes();
+    }
+
+    private void ReadAttributes() {
+      object[] pluginAttributes = this.GetType().GetCustomAttributes(typeof(ClassInfoAttribute), false);
+
+      // exactly one attribute of the type ClassInfoAttribute must be given
+      if (pluginAttributes.Length != 1) {
+        throw new InvalidPluginException();
+      }
+
+      // after the assertion we are sure that the array access will not fail
+      ClassInfoAttribute pluginAttribute = (ClassInfoAttribute)pluginAttributes[0];
+
+      // if the plugin name is not explicitly set in the attribute then the default plugin name is the FullName of the type
+      if (pluginAttribute != null && pluginAttribute.Name != null) {
+        this.name = pluginAttribute.Name;
+      } else {
+        this.name = this.GetType().FullName;
+      }
+
+      // if the version is not explicitly set in the attribute then the version of the assembly is used as default
+      if (pluginAttribute != null && pluginAttribute.Version != null) {
+        this.version = new Version(pluginAttribute.Version);
+      } else {
+        this.version = this.GetType().Assembly.GetName().Version;
+      }
+
+      // if the description is not explicitly set in the attribute then the name of name of the plugin is used as default
+      if (pluginAttribute != null && pluginAttribute.Description != null) {
+        this.description = pluginAttribute.Description;
+      } else {
+        this.description = name;
+      }
+
+      // get all attributes of type PluginFileAttribute, multiple usage is possible
+      PluginFileAttribute[] fileAttributes = (PluginFileAttribute[])this.GetType().GetCustomAttributes(typeof(PluginFileAttribute), false);
+
+      // exctract the file names from the attributes
+      this.files = new string[fileAttributes.Length];
+      int i = 0;
+      foreach (PluginFileAttribute fileAttr in fileAttributes) {
+        files[i++] = fileAttr.Filename;
+      }
+    }
+
+    #region IPlugin Members
+    /// <summary>
+    /// Gets the name of the plugin.
+    /// </summary>
+    public string Name {
+      get {
+        return name;
+      }
+    }
+
+    /// <summary>
+    /// Gets the version of the plugin.
+    /// </summary>
+    public Version Version {
+      get {
+        return version;
+      }
+    }
+
+    /// <summary>
+    /// Gets the description of the plugin.
+    /// </summary>
+    public string Description {
+      get {
+        return description;
+      }
+    }
+
+    /// <inheritdoc/>
+    public  string[] Files {
+      get {
+        return files;
+      }
+    }
+
+    /// <inhertidoc>
+    public virtual void OnLoad() { }
+    /// <inhertidoc>
+    public virtual void OnInstall() { }
+    /// <inhertidoc>
+    public virtual void OnDelete() { }
+    /// <inhertidoc>
+    public virtual void OnPreUpdate() { }
+    /// <inhertidoc>
+    public virtual void OnPostUpdate() { }
+
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/ClassInfoAttribute.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/ClassInfoAttribute.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/ClassInfoAttribute.cs	(revision 1270)
@@ -0,0 +1,74 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// This attribute can be used to specify meta data for classes. 
+  /// For example to specify name, version and description of applications or plugins.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class)]
+  public class ClassInfoAttribute : System.Attribute {
+    private string name;
+    /// <summary>
+    /// Gets or sets the name of the plugin to which the assembly belongs to.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+
+    private string version;
+    /// <summary>
+    /// Gets or sets the version of the plugin.
+    /// </summary>
+    public string Version {
+      get { return version; }
+      set { version = value; }
+    }
+
+    private string description;
+    /// <summary>
+    /// Gets or sets the description of the plugin.
+    /// </summary>
+    public string Description {
+      get { return description; }
+      set { description = value; }
+    }
+
+    private bool autoRestart;
+    /// <summary>
+    /// Gets or sets the boolean flag whether the plugin should be automatically restarted.
+    /// </summary>
+    public bool AutoRestart {
+      get { return autoRestart; }
+      set { autoRestart = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ClassInfoAttribute"/>.
+    /// </summary>
+    public ClassInfoAttribute() {}
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/DependencyAttribute.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/DependencyAttribute.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/DependencyAttribute.cs	(revision 1270)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// This attribute can be used to specify that an assembly depends on a different plugin.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class,AllowMultiple=true)]
+  public sealed class DependencyAttribute : System.Attribute {
+    private string dependency;
+
+    /// <summary>
+    /// Gets or sets the name of the plugin that is needed to load the assembly.
+    /// </summary>
+    public string Dependency {
+      get { return dependency; }
+      set { dependency = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DependencyAttribute"/>.
+    /// </summary>
+    public DependencyAttribute() {
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/DiscoveryService.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/DiscoveryService.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/DiscoveryService.cs	(revision 1270)
@@ -0,0 +1,139 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Provides convenience methods to find specific types or to create instances of types.
+  /// </summary>
+  public class DiscoveryService {
+
+    public PluginInfo[] Plugins {
+      get {
+        PluginInfo[] plugins = new PluginInfo[PluginManager.Manager.LoadedPlugins.Count];
+        PluginManager.Manager.LoadedPlugins.CopyTo(plugins, 0);
+        return plugins;
+      }
+    }
+
+    /// <summary>
+    /// Finds all types that are subtypes or equal to the specified type.
+    /// </summary>
+    /// <param name="type">Most general type for which to find matching types.</param>
+    /// <returns>The found types as array.</returns>
+    public Type[] GetTypes(Type type) {
+      Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
+      List<Type> types = new List<Type>();
+      foreach(Assembly asm in assemblies) {
+        Array.ForEach<Type>(GetTypes(type, asm), delegate(Type t) {
+          types.Add(t);
+        });
+      }
+      return types.ToArray();
+    }
+
+    /// <summary>
+    /// Creates an instance of all types that are subtypes or the same type of the specified type
+    /// </summary>
+    /// <typeparam name="T">Most general type.</typeparam>
+    /// <returns>The created instances as array.</returns>
+    public T[] GetInstances<T>() where T : class {
+      Type[] types = GetTypes(typeof(T));
+      List<T> instances = new List<T>();
+      foreach(Type t in types) {
+        if(!t.IsAbstract && !t.IsInterface && !t.HasElementType) {
+          instances.Add((T)Activator.CreateInstance(t));
+        }
+      }
+      return instances.ToArray();
+    }
+
+    /// <summary>
+    /// Finds all types that are subtypes or equal to the specified type if they are part of the given
+    /// <paramref name="plugin"/>.
+    /// </summary>
+    /// <param name="type">Most general type for which to find matching types.</param>
+    /// <param name="plugin">The plugin the subtypes must be part of.</param>
+    /// <returns>The found types as array.</returns>
+    public Type[] GetTypes(Type type, PluginInfo plugin) {
+      Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
+      List<Type> types = new List<Type>();
+      foreach(Assembly asm in assemblies) {
+        if(plugin.Assemblies.Contains(asm.Location)) {
+          Array.ForEach<Type>(GetTypes(type, asm), delegate(Type t) {
+            types.Add(t);
+          });
+        }
+      }
+
+      return types.ToArray();
+    }
+
+    /// <summary>
+    /// Gets instances of all types that implement the specified interface only in the given assembly.
+    /// </summary>
+    /// <typeparam name="T">Interface type.</typeparam>
+    /// <param name="assembly">Assembly that should be searched for types.</param>
+    /// <returns>The found instances as array.</returns>
+    internal T[] GetInstances<T>(Assembly assembly) {
+      Type[] types = GetTypes(typeof(T), assembly);
+      List<T> instances = new List<T>();
+      foreach(Type t in types) {
+        if(!t.IsAbstract && !t.IsInterface && !t.HasElementType) {
+          instances.Add((T)Activator.CreateInstance(t));
+        }
+      }
+      return instances.ToArray();
+    }
+
+    /// <summary>
+    /// Gets types that are assignable (same of subtype) to the specified type only from the given assembly.
+    /// </summary>
+    /// <param name="type">Most general type we want to find.</param>
+    /// <param name="assembly">Assembly that should be searched for types.</param>
+    /// <returns>The found types as array.</returns>
+    internal Type[] GetTypes(Type type, Assembly assembly) {
+      List<Type> types = new List<Type>();
+      foreach(Type t in assembly.GetTypes()) {
+        if(type.IsAssignableFrom(t)) {
+          types.Add(t);
+        }
+      }
+      return types.ToArray();
+    }
+
+    /// <summary>
+    /// Gets the plugin of the given <paramref name="type"/>.
+    /// </summary>
+    /// <param name="type"></param>
+    /// <returns>The found plugin or <c>null</c>.</returns>
+    public PluginInfo GetDeclaringPlugin(Type type) {
+      foreach(PluginInfo info in PluginManager.Manager.LoadedPlugins) {
+        if(info.Assemblies.Contains(type.Assembly.Location)) return info;
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/HeuristicLab.PluginInfrastructure.csproj	(revision 1270)
@@ -0,0 +1,125 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{94186A6A-5176-4402-AE83-886557B53CCA}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.PluginInfrastructure</RootNamespace>
+    <AssemblyName>HeuristicLab.PluginInfrastructure</AssemblyName>
+    <StartupObject>
+    </StartupObject>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.PluginInfrastructure.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.PluginInfrastructure.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ApplicationInfo.cs" />
+    <Compile Include="AssemblyBuildDateAttribute.cs" />
+    <Compile Include="BaseClasses\ApplicationBase.cs" />
+    <Compile Include="BaseClasses\PluginBase.cs" />
+    <Compile Include="ClassInfoAttribute.cs" />
+    <Compile Include="Interfaces\IApplication.cs" />
+    <Compile Include="Interfaces\IControl.cs" />
+    <Compile Include="Interfaces\IControlManager.cs" />
+    <Compile Include="InvalidPluginException.cs" />
+    <Compile Include="PluginManager.cs" />
+    <Compile Include="PluginManagerActionEventArgs.cs" />
+    <Compile Include="DependencyAttribute.cs" />
+    <Compile Include="Interfaces\IPlugin.cs" />
+    <Compile Include="DiscoveryService.cs" />
+    <Compile Include="PluginFileAttribute.cs" />
+    <Compile Include="PluginInfo.cs" />
+    <Compile Include="Loader.cs" />
+    <Compile Include="Runner.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config" />
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\Settings.settings">
+      <Generator>PublicSettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IApplication.cs	(revision 1270)
@@ -0,0 +1,34 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  internal interface IApplication {
+    string Name { get; }
+    Version Version { get; }
+    string Description { get;}
+    bool AutoRestart { get; }
+    void Run();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IControl.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IControl.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IControl.cs	(revision 1270)
@@ -0,0 +1,31 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Interface for controls.
+  /// </summary>
+  public interface IControl { }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IControlManager.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Interface for control managers.
+  /// </summary>
+  public interface IControlManager {
+    /// <summary>
+    /// Shows the given <paramref name="control"/>.
+    /// </summary>
+    /// <param name="control">The control to display.</param>
+    void ShowControl(IControl control);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Interfaces/IPlugin.cs	(revision 1270)
@@ -0,0 +1,69 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Represents a plugin.
+  /// Plugin developers have to include exactly one class that implements this interface in one of the
+  /// assemblies of the plugin. Plugin developers can use the properties of this interface to store
+  /// plugin data (name, version, files, update location ...).
+  /// The methods OnLoad(), OnInstall(), OnDelete(), OnPreUpdate(), OnPostUpdate() are called by the framework
+  /// when the corresponding actions are executed. This mechanism allows that the plugin reacts to such
+  /// events. For instance to store plugin specific settings.
+  /// </summary>
+  interface IPlugin {
+    string Name { get; }
+    Version Version { get; }
+    /// <summary>
+    /// a list of all files that are bundled with this plugin including all assembly files (*.dll)
+    /// </summary>
+    string[] Files { get; }
+
+
+    /// <summary>
+    /// Called by the framework whenever the plugin is loaded.
+    /// Plugins are loaded once at startup and then each time a new application is started from the starter.
+    /// </summary>
+    void OnLoad();
+    /// <summary>
+    /// called by the framework after the plugin was successfully installed
+    /// </summary>
+    void OnInstall();
+    /// <summary>
+    /// called by the framework before the files of the plugin are deleted
+    /// </summary>
+    void OnDelete();
+    /// <summary>
+    /// called by the framework before the files of the plugin are deleted for an update
+    /// OnPreUpdate() is sent only to the old instance of the plugin
+    /// </summary>
+    void OnPreUpdate();
+    /// <summary>
+    /// called by the framework after the updated files for the plugin have been installed
+    /// OnPostUpdate() is sent only to the new updated instance of the plugin
+    /// </summary>
+    void OnPostUpdate();
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/InvalidPluginException.cs	(revision 1270)
@@ -0,0 +1,32 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Exception class for invalid plugins.
+  /// </summary>
+  class InvalidPluginException : Exception {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Loader.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Loader.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Loader.cs	(revision 1270)
@@ -0,0 +1,427 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using System.IO;
+using System.Diagnostics;
+using System.Windows.Forms;
+
+namespace HeuristicLab.PluginInfrastructure {
+  internal class Loader : MarshalByRefObject {
+    /// <summary>
+    /// Event handler for loaded plugins.
+    /// </summary>
+    /// <param name="pluginName">The plugin that has been loaded.</param>
+    public delegate void PluginLoadedEventHandler(string pluginName);
+    
+    public delegate void PluginLoadFailedEventHandler(string pluginName, string args);
+
+    private Dictionary<PluginInfo, List<string>> pluginDependencies = new Dictionary<PluginInfo, List<string>>();
+    private List<PluginInfo> preloadedPluginInfos = new List<PluginInfo>();
+    private Dictionary<IPlugin, PluginInfo> pluginInfos = new Dictionary<IPlugin, PluginInfo>();
+    private Dictionary<PluginInfo, IPlugin> allPlugins = new Dictionary<PluginInfo, IPlugin>();
+    private List<PluginInfo> disabledPlugins = new List<PluginInfo>();
+    private string pluginDir = Application.StartupPath + "/" + HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir;
+
+    internal event PluginLoadFailedEventHandler MissingPluginFile;
+    internal event PluginManagerActionEventHandler PluginAction;
+
+    internal ICollection<PluginInfo> ActivePlugins {
+      get {
+        List<PluginInfo> list = new List<PluginInfo>();
+        foreach (PluginInfo info in allPlugins.Keys) {
+          if (!disabledPlugins.Exists(delegate(PluginInfo disabledInfo) { return info.Name == disabledInfo.Name; })) {
+            list.Add(info);
+          }
+        }
+        return list;
+      }
+    }
+
+    internal ICollection<PluginInfo> InstalledPlugins {
+      get {
+        return new List<PluginInfo>(allPlugins.Keys);
+      }
+    }
+
+    internal ICollection<PluginInfo> DisabledPlugins {
+      get {
+        return disabledPlugins;
+      }
+    }
+
+    private ICollection<ApplicationInfo> applications;
+    internal ICollection<ApplicationInfo> InstalledApplications {
+      get {
+        return applications;
+      }
+    }
+
+    private IPlugin FindPlugin(PluginInfo plugin) {
+      if (allPlugins.ContainsKey(plugin)) {
+        return allPlugins[plugin];
+      } else return null;
+    }
+
+
+    /// <summary>
+    /// Init first clears all internal datastructures (including plugin lists)
+    /// 1. All assemblies in the plugins directory are loaded into the reflection only context.
+    /// 2. The loader checks if all dependencies for each assembly are available.
+    /// 3. All assemblies for which there are no dependencies missing are loaded into the execution context.
+    /// 4. Each loaded assembly is searched for a type that implements IPlugin, then one instance of each IPlugin type is activated
+    /// 5. The loader checks if all necessary files for each plugin are available.
+    /// 6. The loader builds an acyclic graph of PluginDescriptions (childs are dependencies of a plugin) based on the 
+    /// list of assemblies of an plugin and the list of dependencies for each of those assemblies
+    /// </summary>
+    /// <exception cref="FileLoadException">Thrown when the file could not be loaded.</exception>
+    internal void Init() {
+      AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += delegate(object sender, ResolveEventArgs args) {
+        try {
+          return Assembly.ReflectionOnlyLoad(args.Name);
+        }
+        catch (FileLoadException ex) {
+          return null;
+        }
+      };
+      allPlugins.Clear();
+      disabledPlugins.Clear();
+      pluginInfos.Clear();
+      pluginsByName.Clear();
+      pluginDependencies.Clear();
+
+      List<Assembly> assemblies = ReflectionOnlyLoadDlls();
+      CheckAssemblyDependencies(assemblies);
+      CheckPluginFiles();
+      CheckPluginDependencies();
+      LoadPlugins();
+
+      DiscoveryService service = new DiscoveryService();
+      IApplication[] apps = service.GetInstances<IApplication>();
+      applications = new List<ApplicationInfo>();
+
+      foreach (IApplication application in apps) {
+        ApplicationInfo info = new ApplicationInfo();
+        info.Name = application.Name;
+        info.Version = application.Version;
+        info.Description = application.Description;
+        info.AutoRestart = application.AutoRestart;
+        info.PluginAssembly = application.GetType().Assembly.GetName().Name;
+        info.PluginType = application.GetType().Namespace + "." + application.GetType().Name;
+
+        applications.Add(info);
+      }
+    }
+
+    private List<Assembly> ReflectionOnlyLoadDlls() {
+      List<Assembly> assemblies = new List<Assembly>();
+      // load all installed plugins into the reflection only context
+      foreach (String filename in Directory.GetFiles(pluginDir, "*.dll")) {
+        try {
+          assemblies.Add(ReflectionOnlyLoadDll(filename));
+        }
+        catch (BadImageFormatException) { } // just ignore the case that the .dll file is not actually a CLR dll
+      }
+      return assemblies;
+    }
+
+    private Assembly ReflectionOnlyLoadDll(string filename) {
+      return Assembly.ReflectionOnlyLoadFrom(filename);
+    }
+
+    private void CheckAssemblyDependencies(List<Assembly> assemblies) {
+      foreach (Assembly assembly in assemblies) {
+        // GetExportedTypes throws FileNotFoundException when a referenced assembly
+        // of the current assembly is missing.
+        try {
+          Type[] exported = assembly.GetExportedTypes();
+
+          foreach (Type t in exported) {
+            // if there is a type that implements IPlugin
+            if (Array.Exists<Type>(t.GetInterfaces(), delegate(Type iface) {
+              // use AssemblyQualifiedName to compare the types because we can't directly 
+              // compare ReflectionOnly types and Execution types
+              return iface.AssemblyQualifiedName == typeof(IPlugin).AssemblyQualifiedName;
+            })) {
+              // fetch the attributes of the IPlugin type
+              GetPluginAttributeData(t);
+            }
+          }
+        }
+        catch (FileNotFoundException ex) {
+          PluginInfo info = new PluginInfo();
+          AssemblyName name = assembly.GetName();
+          info.Name = name.Name;
+          info.Version = name.Version;
+          info.Assemblies.Add(assembly.FullName);
+          info.Files.Add(assembly.Location);
+          info.Message = "File not found: " + ex.FileName;
+          disabledPlugins.Add(info);
+        }
+        catch (FileLoadException ex) {
+          PluginInfo info = new PluginInfo();
+          AssemblyName name = assembly.GetName();
+          info.Name = name.Name;
+          info.Version = name.Version;
+          info.Files.Add(assembly.Location);
+          info.Assemblies.Add(assembly.FullName);
+          info.Message = "Couldn't load file: " + ex.FileName;
+          disabledPlugins.Add(info);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Extracts plugin information for this type.
+    /// Reads plugin name, list and type of files and dependencies of the plugin. This information is necessary for
+    /// plugin dependency checking before plugin activation.
+    /// </summary>
+    /// <param name="t"></param>
+    private void GetPluginAttributeData(Type t) {
+      // get all attributes of that type
+      IList<CustomAttributeData> attributes = CustomAttributeData.GetCustomAttributes(t);
+      List<string> pluginAssemblies = new List<string>();
+      List<string> pluginDependencies = new List<string>();
+      List<string> pluginFiles = new List<string>();
+      string pluginName = "";
+      // iterate through all custom attributes and search for named arguments that we are interested in 
+      foreach (CustomAttributeData attributeData in attributes) {
+        List<CustomAttributeNamedArgument> namedArguments = new List<CustomAttributeNamedArgument>(attributeData.NamedArguments);
+        // if the current attribute contains a named argument with the name "Name" then extract the plugin name
+        CustomAttributeNamedArgument pluginNameArgument = namedArguments.Find(delegate(CustomAttributeNamedArgument arg) {
+          return arg.MemberInfo.Name == "Name";
+        });
+        if (pluginNameArgument.MemberInfo != null) {
+          pluginName = (string)pluginNameArgument.TypedValue.Value;
+        }
+        // if the current attribute contains a named argument with the name "Dependency" then extract the dependency
+        // and store it in the list of all dependencies
+        CustomAttributeNamedArgument dependencyNameArgument = namedArguments.Find(delegate(CustomAttributeNamedArgument arg) {
+          return arg.MemberInfo.Name == "Dependency";
+        });
+        if (dependencyNameArgument.MemberInfo != null) {
+          pluginDependencies.Add((string)dependencyNameArgument.TypedValue.Value);
+        }
+        // if the current attribute has a named argument "Filename" then find if the argument "Filetype" is also supplied
+        // and if the filetype is Assembly then store the name of the assembly in the list of assemblies
+        CustomAttributeNamedArgument filenameArg = namedArguments.Find(delegate(CustomAttributeNamedArgument arg) {
+          return arg.MemberInfo.Name == "Filename";
+        });
+        CustomAttributeNamedArgument filetypeArg = namedArguments.Find(delegate(CustomAttributeNamedArgument arg) {
+          return arg.MemberInfo.Name == "Filetype";
+        });
+        if (filenameArg.MemberInfo != null && filetypeArg.MemberInfo != null) {
+          pluginFiles.Add(pluginDir + "/" + (string)filenameArg.TypedValue.Value);
+          if ((PluginFileType)filetypeArg.TypedValue.Value == PluginFileType.Assembly) {
+            pluginAssemblies.Add(pluginDir + "/" + (string)filenameArg.TypedValue.Value);
+          }
+        }
+      }
+
+      // minimal sanity check of the attribute values
+      if (pluginName != "" && pluginAssemblies.Count > 0) {
+        // create a temporary PluginInfo that contains the attribute values
+        PluginInfo info = new PluginInfo();
+        info.Name = pluginName;
+        info.Version = t.Assembly.GetName().Version;
+        info.Assemblies = pluginAssemblies;
+        info.Files.AddRange(pluginFiles);
+        info.Assemblies.AddRange(pluginAssemblies);
+        this.pluginDependencies[info] = pluginDependencies;
+        preloadedPluginInfos.Add(info);
+      } else {
+        throw new InvalidPluginException();
+      }
+    }
+
+    private void CheckPluginDependencies() {
+      foreach (PluginInfo pluginInfo in preloadedPluginInfos) {
+        // don't need to check plugins that are already disabled
+        if (disabledPlugins.Contains(pluginInfo)) {
+          continue;
+        }
+        visitedDependencies.Clear();
+        if (!CheckPluginDependencies(pluginInfo.Name)) {
+          PluginInfo matchingInfo = preloadedPluginInfos.Find(delegate(PluginInfo info) { return info.Name == pluginInfo.Name; });
+          if (matchingInfo == null) throw new InvalidProgramException(); // shouldn't happen
+          foreach (string dependency in pluginDependencies[matchingInfo]) {
+            PluginInfo dependencyInfo = new PluginInfo();
+            dependencyInfo.Name = dependency;
+            pluginInfo.Dependencies.Add(dependencyInfo);
+          }
+
+          pluginInfo.Message = "Disabled: missing plugin dependency.";
+          disabledPlugins.Add(pluginInfo);
+        }
+      }
+    }
+
+    private List<string> visitedDependencies = new List<string>();
+    private bool CheckPluginDependencies(string pluginName) {
+      if (!preloadedPluginInfos.Exists(delegate(PluginInfo info) { return pluginName == info.Name; }) ||
+        disabledPlugins.Exists(delegate(PluginInfo info) { return pluginName == info.Name; }) ||
+        visitedDependencies.Contains(pluginName)) {
+        // when the plugin is not available return false;
+        return false;
+      } else {
+        // otherwise check if all dependencies of the plugin are OK 
+        // if yes then this plugin is also ok and we store it in the list of loadable plugins
+
+        PluginInfo matchingInfo = preloadedPluginInfos.Find(delegate(PluginInfo info) { return info.Name == pluginName; });
+        if (matchingInfo == null) throw new InvalidProgramException(); // shouldn't happen
+        foreach (string dependency in pluginDependencies[matchingInfo]) {
+          visitedDependencies.Add(pluginName);
+          if (CheckPluginDependencies(dependency) == false) {
+            // if only one dependency is not available that means that the current plugin also is unloadable
+            return false;
+          }
+          visitedDependencies.Remove(pluginName);
+        }
+        // all dependencies OK
+        return true;
+      }
+    }
+
+
+    private Dictionary<string, IPlugin> pluginsByName = new Dictionary<string, IPlugin>();
+    private void LoadPlugins() {
+      // load all loadable plugins (all dependencies available) into the execution context
+      foreach (PluginInfo pluginInfo in preloadedPluginInfos) {
+        if (!disabledPlugins.Contains(pluginInfo)) {
+          foreach (string assembly in pluginInfo.Assemblies) {
+            Assembly.LoadFrom(assembly);
+          }
+        }
+      }
+
+      DiscoveryService service = new DiscoveryService();
+      // now search and instantiate an IPlugin type in each loaded assembly
+      foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) {
+        // don't search for plugins in the PluginInfrastructure
+        if (assembly == this.GetType().Assembly)
+          continue;
+        Type[] availablePluginTypes = service.GetTypes(typeof(IPlugin), assembly);
+        foreach (Type pluginType in availablePluginTypes) {
+          if (!pluginType.IsAbstract && !pluginType.IsInterface && !pluginType.HasElementType) {
+            IPlugin plugin = (IPlugin)Activator.CreateInstance(pluginType);
+            PluginAction(this, new PluginManagerActionEventArgs(plugin.Name, PluginManagerAction.InitializingPlugin));
+            plugin.OnLoad();
+            pluginsByName.Add(plugin.Name, plugin);
+          }
+        }
+      }
+
+      foreach (IPlugin plugin in pluginsByName.Values) {
+        PluginInfo pluginInfo = GetPluginInfo(plugin);
+        allPlugins.Add(pluginInfo, plugin);
+        PluginAction(this, new PluginManagerActionEventArgs(plugin.Name, PluginManagerAction.InitializedPlugin));
+      }
+    }
+    private PluginInfo GetPluginInfo(IPlugin plugin) {
+      if (pluginInfos.ContainsKey(plugin)) {
+        return pluginInfos[plugin];
+      }
+      // store the data of the plugin in a description file which can be used without loading the plugin assemblies
+      PluginInfo pluginInfo = new PluginInfo();
+      pluginInfo.Name = plugin.Name;
+      pluginInfo.Version = plugin.Version;
+
+      object[] customAttributes = plugin.GetType().Assembly.GetCustomAttributes(typeof(AssemblyBuildDateAttribute), false);
+      if (customAttributes.Length > 0) {
+        pluginInfo.BuildDate = ((AssemblyBuildDateAttribute)customAttributes[0]).BuildDate;
+      }
+
+      string baseDir = AppDomain.CurrentDomain.BaseDirectory;
+
+      Array.ForEach<string>(plugin.Files, delegate(string file) {
+        string filename = pluginDir + "/" + file;
+        // always use \ as the directory separator
+        pluginInfo.Files.Add(filename.Replace('/', '\\'));
+      });
+
+      PluginInfo preloadedInfo = preloadedPluginInfos.Find(delegate(PluginInfo info) { return info.Name == plugin.Name; });
+      foreach (string assembly in preloadedInfo.Assemblies) {
+        // always use \ as directory separator (this is necessary for discovery of types in 
+        // plugins see DiscoveryService.GetTypes() 
+        pluginInfo.Assemblies.Add(assembly.Replace('/', '\\'));
+      }
+      foreach (string dependency in pluginDependencies[preloadedInfo]) {
+        // accumulate the dependencies of each assembly into the dependencies of the whole plugin
+        PluginInfo dependencyInfo = GetPluginInfo(pluginsByName[dependency]);
+        pluginInfo.Dependencies.Add(dependencyInfo);
+      }
+      pluginInfos[plugin] = pluginInfo;
+      return pluginInfo;
+    }
+
+    private void CheckPluginFiles() {
+      foreach (PluginInfo plugin in preloadedPluginInfos) {
+        if (!CheckPluginFiles(plugin)) {
+          plugin.Message = "Disabled: missing plugin file.";
+          disabledPlugins.Add(plugin);
+        }
+      }
+    }
+
+    private bool CheckPluginFiles(PluginInfo pluginInfo) {
+      foreach (string filename in pluginInfo.Files) {
+        if (!File.Exists(filename)) {
+          if (MissingPluginFile != null) {
+            MissingPluginFile(pluginInfo.Name, filename);
+          }
+          return false;
+        }
+      }
+      return true;
+    }
+
+    /// <summary>
+    /// Initializes the life time service with an infinte lease time.
+    /// </summary>
+    /// <returns><c>null</c>.</returns>
+    public override object InitializeLifetimeService() {
+      return null;
+    }
+
+    internal void OnDelete(PluginInfo pluginInfo) {
+      IPlugin plugin = FindPlugin(pluginInfo);
+      if (plugin != null) plugin.OnDelete();
+    }
+
+    internal void OnInstall(PluginInfo pluginInfo) {
+      IPlugin plugin = FindPlugin(pluginInfo);
+      if (plugin != null) plugin.OnInstall();
+    }
+
+    internal void OnPreUpdate(PluginInfo pluginInfo) {
+      IPlugin plugin = FindPlugin(pluginInfo);
+      if (plugin != null) plugin.OnPreUpdate();
+    }
+
+    internal void OnPostUpdate(PluginInfo pluginInfo) {
+      IPlugin plugin = FindPlugin(pluginInfo);
+      if (plugin != null) plugin.OnPostUpdate();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginFileAttribute.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginFileAttribute.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginFileAttribute.cs	(revision 1270)
@@ -0,0 +1,67 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Enumerator of available file types for a plugin.
+  /// </summary>
+  public enum PluginFileType {
+    Assembly,
+    Executable,
+    Data,
+    License
+  };
+
+  /// <summary>
+  /// Attribute for plugins providing information about their corresponding files.
+  /// </summary>
+  [AttributeUsage(AttributeTargets.Class, AllowMultiple=true)]
+  public class PluginFileAttribute : System.Attribute {
+    private string filename;
+
+    /// <summary>
+    /// Gets or sets the filename of the plugin.
+    /// </summary>
+    public string Filename {
+      get { return filename; }
+      set { filename = value; }
+    }
+
+    private PluginFileType filetype = PluginFileType.Data;
+
+    /// <summary>
+    /// Gets or sets the filetype of the plugin file.
+    /// </summary>
+    public PluginFileType Filetype {
+      get { return filetype; }
+      set { filetype = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginFileAttribute"/>.
+    /// </summary>
+    public PluginFileAttribute() { }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginInfo.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginInfo.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginInfo.cs	(revision 1270)
@@ -0,0 +1,121 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Holds information of loaded plugins that is needed for plugin management.
+  /// Used to represent plugins in AppDomains without loading the plugin assemblies.
+  /// </summary>
+  [Serializable]
+  public class PluginInfo {
+    private string name;
+    /// <summary>
+    /// Gets or sets the name of the plugin.
+    /// </summary>
+    public string Name {
+      get { return name; }
+      set { name = value; }
+    }
+    private Version version;
+    /// <summary>
+    /// Gets or sets the version of the plugin.
+    /// </summary>
+    public Version Version {
+      get { return version; }
+      set { version = value; }
+    }
+    private DateTime buildDate;
+    /// <summary>
+    /// Gets or sets the build date of the plugin.
+    /// </summary>
+    public DateTime BuildDate {
+      get { return buildDate; }
+      set { buildDate = value; }
+    }
+    private List<string> files = new List<string>();
+    /// <summary>
+    /// Gets the names of all files that belong to this plugin.
+    /// These files are deleted when the plugin is removed or updated.
+    /// </summary>
+    public List<string> Files {
+      get { return files; }
+    }
+
+    private List<PluginInfo> dependencies = new List<PluginInfo>();
+    /// <summary>
+    /// Gets all dependencies of the plugin.
+    /// </summary>
+    public List<PluginInfo> Dependencies {
+      get { return dependencies; }
+    }
+    private List<string> assemblies = new List<string>();
+    /// <summary>
+    /// Gets the names of the assemblies that belong to this plugin.
+    /// </summary>
+    public List<string> Assemblies {
+      get { return assemblies; }
+      set { assemblies = value; }
+    }
+    private string message;
+    /// <summary>
+    /// Gets or sets the message.
+    /// </summary>
+    public string Message {
+      get { return message; }
+      set { message = value; }
+    }
+    /// <summary>
+    /// Gets the string representation of the plugin.
+    /// </summary>
+    /// <returns>The name of the plugin.</returns>
+    public override string ToString() {
+      return Name;
+    }
+    
+    // equals and hashcode have to be implemented because we want to compare PluginDescriptions from 
+    // different AppDomains and serialization destroys reference equality
+    /// <summary>
+    /// Checks whether the given object is equal to the current plugin.
+    /// </summary>
+    /// <param name="obj">The object to compare.</param>
+    /// <returns><c>true</c> if it is equal, <c>false</c> otherwise.</returns>
+    public override bool Equals(object obj) {
+      if(!(obj is PluginInfo))
+        return false;
+      PluginInfo other = (PluginInfo)obj;
+
+      return other.Name == this.Name && other.Version == this.Version;
+    }
+    /// <summary>
+    /// Gets the hash code of the current plugin.
+    /// </summary>
+    /// <returns>The hash code of the plugin.</returns>
+    public override int GetHashCode() {
+      if(version != null) {
+        return name.GetHashCode() + version.GetHashCode();
+      } else return name.GetHashCode();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginManager.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginManager.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginManager.cs	(revision 1270)
@@ -0,0 +1,300 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Security.Policy;
+using System.Reflection;
+using System.Diagnostics;
+using System.Security.Permissions;
+using System.Security;
+
+namespace HeuristicLab.PluginInfrastructure {
+
+  // must extend MarshalByRefObject because of event passing between Loader and PluginManager (each in it's own AppDomain)
+  /// <summary>
+  /// Class to manage different plugins.
+  /// </summary>
+  public class PluginManager : MarshalByRefObject {
+
+    // singleton: only one manager allowed in each AppDomain
+    private static PluginManager manager = new PluginManager();
+    /// <summary>
+    /// Gets the plugin manager (is a singleton).
+    /// </summary>
+    public static PluginManager Manager {
+      get { return manager; }
+    }
+
+    // singleton: only one control manager allowed in each applicatoin (i.e. AppDomain)
+    private static IControlManager controlManager;
+    /// <summary>
+    /// Gets or sets the control manager (is a singleton).
+    /// </summary>
+    public static IControlManager ControlManager {
+      get { return controlManager; }
+      set { controlManager = value; }
+    }
+
+    /// <summary>
+    /// Event handler for actions in the plugin manager.
+    /// </summary>
+    public event PluginManagerActionEventHandler Action;
+
+    // holds a proxy for the loader in the special AppDomain for PluginManagament
+    private Loader remoteLoader;
+    private AppDomain pluginDomain;
+    private string pluginDir;
+
+    // singleton pattern
+    private PluginManager() {
+      this.pluginDir = HeuristicLab.PluginInfrastructure.Properties.Settings.Default.PluginDir;
+    }
+
+    /// <summary>
+    /// Gets all installed plugins.
+    /// </summary>
+    /// <remarks>This information is provided by a <see cref="Loader"/>.</remarks>
+    public ICollection<PluginInfo> InstalledPlugins {
+      get { return remoteLoader.InstalledPlugins; }
+    }
+
+    /// <summary>
+    /// Gets all disabled plugins.
+    /// </summary>
+    /// <remarks>This information is provided by a <see cref="Loader"/>.</remarks>
+    public ICollection<PluginInfo> DisabledPlugins {
+      get { return remoteLoader.DisabledPlugins; }
+    }
+
+    /// <summary>
+    /// Gets all active plugins.
+    /// </summary>
+    /// <remarks>This information is provided by a <see cref="Loader"/>.</remarks>
+    public ICollection<PluginInfo> ActivePlugins {
+      get { return remoteLoader.ActivePlugins; }
+    }
+
+    /// <summary>
+    /// Gets all installed applications.
+    /// </summary>
+    /// <remarks>This information is provided by a <see cref="Loader"/>.</remarks>
+    public ICollection<ApplicationInfo> InstalledApplications {
+      get { return remoteLoader.InstalledApplications; }
+    }
+
+    private ICollection<PluginInfo> loadedPlugins;
+    /// <summary>
+    /// Gets or (internally) sets the loaded plugins.
+    /// </summary>
+    public ICollection<PluginInfo> LoadedPlugins {
+      get { return loadedPlugins; }
+      internal set { loadedPlugins = value; }
+    }
+
+    /// <summary>
+    /// Creates a dedicated AppDomain for loading all plugins and checking dependencies.
+    /// </summary>
+    public void Initialize() {
+      NotifyListeners(PluginManagerAction.Initializing, "-");
+      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+      setup.PrivateBinPath = pluginDir;
+      pluginDomain = AppDomain.CreateDomain("plugin domain", null, setup);
+      remoteLoader = (Loader)pluginDomain.CreateInstanceAndUnwrap("HeuristicLab.PluginInfraStructure", "HeuristicLab.PluginInfrastructure.Loader");
+      remoteLoader.PluginAction += delegate(object sender, PluginManagerActionEventArgs args) { if (Action != null) Action(this, args); };
+      remoteLoader.Init();
+      NotifyListeners(PluginManagerAction.Initialized, "-");
+    }
+
+    /// <summary>
+    /// Creates a separate AppDomain.
+    /// Loads all active plugin assemblies and starts the application in the new AppDomain via a PluginRunner instance activated in the new AppDomain
+    /// </summary>
+    /// <param name="appInfo">application to run</param>
+    public void Run(ApplicationInfo appInfo) {
+      // create a separate AppDomain for the application
+      // activate a PluginRunner instance in the application
+      // and remotely tell it to start the application
+
+      NotifyListeners(PluginManagerAction.Starting, appInfo.Name);
+      AppDomain applicationDomain = null;
+      try {
+        applicationDomain = CreateAndInitAppDomain(appInfo.Name + " AppDomain");
+        Runner remoteRunner = (Runner)applicationDomain.CreateInstanceAndUnwrap(typeof(Runner).Assembly.GetName().Name, typeof(Runner).FullName);
+        remoteRunner.Run(appInfo);
+      }
+      finally {
+        // make sure domain is unloaded in all cases
+        if (applicationDomain != null) AppDomain.Unload(applicationDomain);
+      }
+    }
+
+    /// <summary>
+    /// Creates a new AppDomain with all plugins preloaded.
+    /// </summary>
+    /// <param name="friendlyName">Name of the new AppDomain</param>
+    /// <returns>the new AppDomain with all plugins preloaded.</returns>
+    public AppDomain CreateAndInitAppDomain(string friendlyName) {
+      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+      setup.PrivateBinPath = pluginDir;
+      AppDomain applicationDomain = AppDomain.CreateDomain(friendlyName, null, setup);
+      Runner remoteRunner = (Runner)applicationDomain.CreateInstanceAndUnwrap(typeof(Runner).Assembly.GetName().Name, typeof(Runner).FullName);
+      NotifyListeners(PluginManagerAction.Initializing, "All plugins");
+      if (remoteLoader != null) {
+        remoteRunner.LoadPlugins(remoteLoader.ActivePlugins);
+      } else if (LoadedPlugins != null && LoadedPlugins.Count > 0) {
+        remoteRunner.LoadPlugins(LoadedPlugins);
+      }
+      NotifyListeners(PluginManagerAction.Initialized, "All plugins");
+      return applicationDomain;
+    }
+
+    /// <summary>
+    /// Creates a new AppDomain with all plugins preloaded and Sandboxing capability.
+    /// </summary>
+    /// <param name="assembly">Assembly reference</param>
+    /// <returns>the strongname of the assembly</returns>
+    private StrongName CreateStrongName(Assembly assembly) {
+      if (assembly == null)
+        throw new ArgumentNullException("assembly");
+
+      AssemblyName assemblyName = assembly.GetName();
+      Debug.Assert(assemblyName != null, "Could not get assembly name");
+
+      // get the public key blob
+      byte[] publicKey = assemblyName.GetPublicKey();
+      if (publicKey == null || publicKey.Length == 0)
+        throw new InvalidOperationException("Assembly is not strongly named");
+
+      StrongNamePublicKeyBlob keyBlob = new StrongNamePublicKeyBlob(publicKey);
+
+      // and create the StrongName
+      return new StrongName(keyBlob, assemblyName.Name, assemblyName.Version);
+    }
+
+    public AppDomain CreateAndInitAppDomainWithSandbox(string friendlyName, bool sandboxed, Type jobType) {
+      PermissionSet pset;
+
+      DiscoveryService dService = new DiscoveryService();
+      //get the declaring plugin of the job
+      PluginInfo jobPlugin = dService.GetDeclaringPlugin(jobType);
+
+      //get all the plugins that have dependencies with the jobplugin
+      List<PluginInfo> depPlugins = GetDependentPlugins(jobPlugin);
+      //insert all jobs into one list
+      depPlugins.Add(jobPlugin);
+      
+      if (sandboxed) {
+        pset = new PermissionSet(PermissionState.None);
+        pset.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
+        pset.AddPermission(new ReflectionPermission(PermissionState.Unrestricted));
+        FileIOPermission fPerm = new FileIOPermission(PermissionState.None);
+             
+        foreach (PluginInfo plugin in depPlugins) {
+            foreach(String assemblies in plugin.Assemblies)
+              fPerm.AddPathList(FileIOPermissionAccess.AllAccess, assemblies);
+        }
+        
+        pset.AddPermission(fPerm);
+
+      } else {
+        pset = new PermissionSet(PermissionState.Unrestricted);
+      }
+      AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation;
+      setup.PrivateBinPath = pluginDir;
+      setup.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;      
+      AppDomain applicationDomain = AppDomain.CreateDomain(friendlyName, AppDomain.CurrentDomain.Evidence, setup, pset, CreateStrongName(Assembly.GetExecutingAssembly()));
+                      
+      Runner remoteRunner = (Runner)applicationDomain.CreateInstanceAndUnwrap(typeof(Runner).Assembly.GetName().Name, typeof(Runner).FullName);
+      NotifyListeners(PluginManagerAction.Initializing, "All plugins");
+
+      if (depPlugins != null && depPlugins.Count > 0) {
+        remoteRunner.LoadPlugins(depPlugins);
+      }
+      NotifyListeners(PluginManagerAction.Initialized, "All plugins");
+      return applicationDomain;
+    }
+
+    /// <summary>
+    /// Calculates a set of plugins that directly or transitively depend on the plugin given in the argument.
+    /// </summary>
+    /// <param name="pluginInfo">The plugin the other depend on.</param>
+    /// <returns>a list of plugins that are directly of transitively dependent.</returns>
+    public List<PluginInfo> GetDependentPlugins(PluginInfo pluginInfo) {
+      List<PluginInfo> mergedList = new List<PluginInfo>();
+      foreach (PluginInfo plugin in InstalledPlugins) {
+        if (plugin.Dependencies.Contains(pluginInfo)) {
+          if (!mergedList.Contains(plugin)) {
+            mergedList.Add(plugin);
+          }
+          // for each of the dependent plugins add the list of transitively dependent plugins
+          // make sure that only one entry for each plugin is added to the merged list
+          GetDependentPlugins(plugin).ForEach(delegate(PluginInfo dependentPlugin) {
+            if (!mergedList.Contains(dependentPlugin)) {
+              mergedList.Add(dependentPlugin);
+            }
+          });
+        }
+      }
+      return mergedList;
+    }
+
+    /// <summary>
+    /// Unloads all plugins.
+    /// </summary>
+    public void UnloadAllPlugins() {
+      AppDomain.Unload(pluginDomain);
+    }
+
+    /// <summary>
+    /// Loads all plugins.
+    /// </summary>
+    public void LoadAllPlugins() {
+      Initialize();
+    }
+
+    /// <inheritdoc cref="Loader.OnDelete"/>
+    public void OnDelete(PluginInfo pluginInfo) {
+      remoteLoader.OnDelete(pluginInfo);
+    }
+
+    /// <inheritdoc cref="Loader.OnInstall"/>
+    public void OnInstall(PluginInfo pluginInfo) {
+      remoteLoader.OnInstall(pluginInfo);
+    }
+
+    /// <inheritdoc cref="Loader.OnPreUpdate"/>
+    public void OnPreUpdate(PluginInfo pluginInfo) {
+      remoteLoader.OnPreUpdate(pluginInfo);
+    }
+
+    /// <inheritdoc cref="Loader.OnPostUpdate"/>
+    public void OnPostUpdate(PluginInfo pluginInfo) {
+      remoteLoader.OnPostUpdate(pluginInfo);
+    }
+
+    private void NotifyListeners(PluginManagerAction action, string text) {
+      if (Action != null) {
+        Action(this, new PluginManagerActionEventArgs(text, action));
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginManagerActionEventArgs.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginManagerActionEventArgs.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/PluginManagerActionEventArgs.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.PluginInfrastructure {
+  /// <summary>
+  /// Enum for all possible actions the plugin manager can execute.
+  /// </summary>
+  public enum PluginManagerAction { Initializing, InitializingPlugin, InitializedPlugin, Initialized, Starting }
+  /// <summary>
+  /// Event handler for all action events of the plugin manager.
+  /// </summary>
+  /// <param name="sender">The sender of the action event.</param>
+  /// <param name="e">The event arguments.</param>
+  public delegate void PluginManagerActionEventHandler(object sender, PluginManagerActionEventArgs e);
+
+  // this class must be serializable because EventArgs are transmitted over AppDomain boundaries
+  /// <summary>
+  /// Class for the event arguments of plugin manager action events.
+  /// </summary>
+  [Serializable]
+  public class PluginManagerActionEventArgs {
+    private PluginManagerAction action;
+    /// <summary>
+    /// Gets or sets the action that has been performed.
+    /// </summary>
+    public PluginManagerAction Action {
+      get { return action; }
+      set { this.action = value; }
+    }
+    private string id;
+    /// <summary>
+    /// Gets or sets the id of the action event arguments.
+    /// </summary>
+    public string Id {
+      get { return id; }
+      set { id = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="PluginManagerActionEventArgs"/> with the given 
+    /// <paramref name="id"/> and <paramref name="action"/>.
+    /// </summary>
+    /// <param name="id">The id of the action event arguments.</param>
+    /// <param name="action">The action of the plugin manager.</param>
+    public PluginManagerActionEventArgs(string id, PluginManagerAction action) {
+      this.Id = id;
+      this.Action = action;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,57 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+using System.Security;
+
+// 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.PluginInfrastructure")]
+[assembly: AssemblyDescription("PluginInfrastructure to load and manage HeuristicLab plugins")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AllowPartiallyTrustedCallers]
+
+// 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("7f3dedcf-24cc-4176-977a-0baad7f16573")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,84 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.1433
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.PluginInfrastructure.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.PluginInfrastructure.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,120 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,35 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.PluginInfrastructure.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("plugins")]
+        public string PluginDir {
+            get {
+                return ((string)(this["PluginDir"]));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,9 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.PluginInfrastructure.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="PluginDir" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">plugins</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Runner.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Runner.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/Runner.cs	(revision 1270)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Reflection;
+using System.Security.Permissions;
+using System.Security;
+
+namespace HeuristicLab.PluginInfrastructure {
+  public class Runner : MarshalByRefObject {
+
+    public void LoadPlugins(ICollection<PluginInfo> plugins) {
+      //FileIOPermission fileperm = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\Program Files\HeuristicLab 3.0\plugins\");
+      //fileperm.Assert();
+      foreach(PluginInfo pluginInfo in plugins) {
+        foreach(string assemblyName in pluginInfo.Assemblies) {
+          Assembly.LoadFrom(assemblyName);
+        }
+      }
+      //CodeAccessPermission.RevertAssert();
+      FireOnLoad();
+      PluginManager.Manager.LoadedPlugins = plugins;
+    }
+
+    public void Run(ApplicationInfo appInfo) {
+      IApplication runnablePlugin = (IApplication)Activator.CreateInstance(appInfo.PluginAssembly, appInfo.PluginType).Unwrap();
+      runnablePlugin.Run();
+    }
+
+    private void FireOnLoad() {
+      DiscoveryService service = new DiscoveryService();
+      Array.ForEach(service.GetInstances<IPlugin>(), p => p.OnLoad());
+    }
+
+    // infinite lease time
+    /// <summary>
+    /// Initializes the life time service with infinite lease time.
+    /// </summary>
+    /// <returns><c>null</c>.</returns>
+    public override object InitializeLifetimeService() {
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.PluginInfrastructure/app.config	(revision 1270)
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.PluginInfrastructure.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+    <applicationSettings>
+        <HeuristicLab.PluginInfrastructure.Properties.Settings>
+            <setting name="PluginDir" serializeAs="String">
+                <value>plugins</value>
+            </setting>
+        </HeuristicLab.PluginInfrastructure.Properties.Settings>
+    </applicationSettings>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/HeuristicLab.Random.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/HeuristicLab.Random.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/HeuristicLab.Random.csproj	(revision 1270)
@@ -0,0 +1,118 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{47019A74-F7F7-482E-83AA-D3F4F777E879}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Random</RootNamespace>
+    <AssemblyName>HeuristicLab.Random-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Random-3.2.XML</DocumentationFile>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Random-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="UniformRandomAdder.cs" />
+    <Compile Include="NormalRandomAdder.cs" />
+    <Compile Include="HeuristicLabRandomPlugin.cs" />
+    <Compile Include="MersenneTwister.cs" />
+    <Compile Include="NormalDistributedRandom.cs" />
+    <Compile Include="NormalRandomizer.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RandomInjector.cs" />
+    <Compile Include="UniformRandomizer.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/HeuristicLabRandomPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/HeuristicLabRandomPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/HeuristicLabRandomPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Random plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Random-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Random-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabRandomPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/MersenneTwister.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/MersenneTwister.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/MersenneTwister.cs	(revision 1270)
@@ -0,0 +1,287 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+/* 
+ * C# port of the freeware implementation of the Mersenne Twister
+ * originally developed by M. Matsumoto and T. Nishimura
+ * 
+ * M. Matsumoto and T. Nishimura,
+ * "Mersenne Twister: A 623-Dimensionally Equidistributed Uniform
+ * Pseudo-Random Number Generator",
+ * ACM Transactions on Modeling and Computer Simulation,
+ * Vol. 8, No. 1, January 1998, pp 3-30.
+ * 
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// A 623-Dimensionally Equidistributed Uniform Pseudo-Random Number Generator.
+  /// </summary>
+  public class MersenneTwister : ItemBase, IRandom {
+    private const int n = 624, m = 397;
+
+    private object locker = new object();
+    private uint[] state = new uint[n];
+    private int p = 0;
+    private bool init = false;
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="MersenneTwister"/>.
+    /// </summary>
+    public MersenneTwister() {
+      if (!init) seed((uint)DateTime.Now.Ticks);
+      init = true;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="MersenneTwister"/> 
+    /// with the given seed <paramref name="s"/>.
+    /// </summary>
+    /// <param name="s">The seed with which to initialize the random number generator.</param>
+    public MersenneTwister(uint s) {
+      seed(s);
+      init = true;
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="MersenneTwister"/> with the given seed array.
+    /// </summary>
+    /// <param name="array">The seed array with which to initialize the random number generator.</param>
+    public MersenneTwister(uint[] array) {
+      seed(array);
+      init = true;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="MersenneTwister"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      MersenneTwister clone = new MersenneTwister();
+      clonedObjects.Add(Guid, clone);
+      clone.state = (uint[])state.Clone();
+      clone.p = p;
+      clone.init = init;
+      return clone;
+    }
+
+    /// <summary>
+    /// Resets the current random number generator.
+    /// </summary>
+    public void Reset() {
+      lock (locker)
+        seed((uint)DateTime.Now.Ticks);
+    }
+    /// <summary>
+    /// Resets the current random number generator with the given seed <paramref name="s"/>.
+    /// </summary>
+    /// <param name="s">The seed with which to reset the current instance.</param>
+    public void Reset(int s) {
+      lock (locker)
+        seed((uint)s);
+    }
+
+    /// <summary>
+    /// Gets a new random number.
+    /// </summary>
+    /// <returns>A new int random number.</returns>
+    public int Next() {
+      lock (locker) {
+        return (int)(rand_int32() >> 1);
+      }
+    }
+    /// <summary>
+    /// Gets a new random number being smaller than the given <paramref name="maxVal"/>.
+    /// </summary>
+    /// <exception cref="ArgumentException">Thrown when the given maximum value is 
+    /// smaller or equal to zero.</exception>
+    /// <param name="maxVal">The maximum value of the generated random number.</param>
+    /// <returns>A new int random number.</returns>
+    public int Next(int maxVal) {
+      lock (locker) {
+        if (maxVal <= 0)
+          throw new ArgumentException("The interval [0, " + maxVal + ") is empty");
+        int limit = (Int32.MaxValue / maxVal) * maxVal;
+        int value = Next();
+        while (value >= limit) value = Next();
+        return value % maxVal;
+      }
+    }
+    /// <summary>
+    /// Gets a new random number being in the given interval <paramref name="minVal"/> and 
+    /// <paramref name="maxVal"/>.
+    /// </summary>
+    /// <param name="minVal">The minimum value of the generated random number.</param>
+    /// <param name="maxVal">The maximum value of the generated random number.</param>
+    /// <returns>A new int random number.</returns>
+    public int Next(int minVal, int maxVal) {
+      lock (locker) {
+        if (maxVal <= minVal)
+          throw new ArgumentException("The interval [" + minVal + ", " + maxVal + ") is empty");
+        return Next(maxVal - minVal) + minVal;
+      }
+    }
+    /// <summary>
+    /// Gets a new double random variable.
+    /// </summary>
+    /// <returns></returns>
+    public double NextDouble() {
+      lock (locker) {
+        return rand_double53();
+      }
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The state(s) are saved as child node with the tag <c>State</c>, each state separaated with
+    /// a semicolon. Also the elements <c>p</c> and the <c>init</c> flag are saved as child nodes with 
+    /// tag names <c>P</c> and <c>Init</c> respectively.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+      StringBuilder builder = new StringBuilder();
+      builder.Append(state[0]);
+      for (int i = 1; i < state.Length; i++) {
+        builder.Append(';');
+        builder.Append(state[i]);
+      }
+      XmlNode stateNode = document.CreateNode(XmlNodeType.Element, "State", null);
+      stateNode.InnerText = builder.ToString();
+      node.AppendChild(stateNode);
+
+      XmlNode pNode = document.CreateNode(XmlNodeType.Element, "P", null);
+      pNode.InnerText = p.ToString();
+      node.AppendChild(pNode);
+
+      XmlNode initNode = document.CreateNode(XmlNodeType.Element, "Init", null);
+      initNode.InnerText = init.ToString();
+      node.AppendChild(initNode);
+
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted random number generator from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The elements of the current instance must be saved in a special way, see 
+    /// <see cref="GetXmlNode"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      string stateString = node.SelectSingleNode("State").InnerText;
+      string[] tokens = stateString.Split(';');
+      for (int i = 0; i < tokens.Length; i++)
+        state[i] = uint.Parse(tokens[i]);
+      p = int.Parse(node.SelectSingleNode("P").InnerText);
+      init = bool.Parse(node.SelectSingleNode("Init").InnerText);
+    }
+    #endregion
+
+    #region Seed Methods
+    /// <summary>
+    /// Initializes current instance with random seed.
+    /// </summary>
+    /// <param name="s">A starting seed.</param>
+    public void seed(uint s) {
+      state[0] = s & 0xFFFFFFFFU;
+      for (int i = 1; i < n; ++i) {
+        state[i] = 1812433253U * (state[i - 1] ^ (state[i - 1] >> 30)) + (uint)i;
+        state[i] &= 0xFFFFFFFFU;
+      }
+      p = n;
+    }
+    /// <summary>
+    /// Initializes current instance with random seed.
+    /// </summary>
+    /// <param name="array">A starting seed array.</param>
+    public void seed(uint[] array) {
+      seed(19650218U);
+      int i = 1, j = 0;
+      for (int k = ((n > array.Length) ? n : array.Length); k > 0; --k) {
+        state[i] = (state[i] ^ ((state[i - 1] ^ (state[i - 1] >> 30)) * 1664525U))
+          + array[j] + (uint)j;
+        state[i] &= 0xFFFFFFFFU;
+        ++j;
+        j %= array.Length;
+        if ((++i) == n) { state[0] = state[n - 1]; i = 1; }
+      }
+      for (int k = n - 1; k > 0; --k) {
+        state[i] = (state[i] ^ ((state[i - 1] ^ (state[i - 1] >> 30)) * 1566083941U)) - (uint)i;
+        state[i] &= 0xFFFFFFFFU;
+        if ((++i) == n) { state[0] = state[n - 1]; i = 1; }
+      }
+      state[0] = 0x80000000U;
+      p = n;
+    }
+    #endregion
+
+    #region Random Number Generation Methods
+    private uint rand_int32() {
+      if (p == n) gen_state();
+      uint x = state[p++];
+      x ^= (x >> 11);
+      x ^= (x << 7) & 0x9D2C5680U;
+      x ^= (x << 15) & 0xEFC60000U;
+      return x ^ (x >> 18);
+    }
+    private double rand_double() { // interval [0, 1)
+      return ((double)rand_int32()) * (1.0 / 4294967296.0);
+    }
+    private double rand_double_closed() { // interval [0, 1]
+      return ((double)rand_int32()) * (1.0 / 4294967295.0);
+    }
+    private double rand_double_open() { // interval (0, 1)
+      return (((double)rand_int32()) + 0.5) * (1.0 / 4294967296.0);
+    }
+    private double rand_double53() { // 53 bit resolution, interval [0, 1)
+      return (((double)(rand_int32() >> 5)) * 67108864.0 +
+        ((double)(rand_int32() >> 6))) * (1.0 / 9007199254740992.0);
+    }
+    #endregion
+
+    #region Private Helper Methods
+    private uint twiddle(uint u, uint v) {
+      return (((u & 0x80000000U) | (v & 0x7FFFFFFFU)) >> 1)
+        ^ (((v & 1U) != 0) ? 0x9908B0DFU : 0x0U);
+    }
+    private void gen_state() {
+      for (int i = 0; i < (n - m); ++i)
+        state[i] = state[i + m] ^ twiddle(state[i], state[i + 1]);
+      for (int i = n - m; i < (n - 1); ++i)
+        state[i] = state[i + m - n] ^ twiddle(state[i], state[i + 1]);
+      state[n - 1] = state[m - 1] ^ twiddle(state[n - 1], state[0]);
+      p = 0; // reset position
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalDistributedRandom.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalDistributedRandom.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalDistributedRandom.cs	(revision 1270)
@@ -0,0 +1,607 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Xml;
+using System.Globalization;
+
+namespace HeuristicLab.Random {
+
+  /// <summary>
+  /// Normally distributed random variable.
+  /// Uses the Ziggurat transform to efficiently generate normal distributed random numbers.
+  /// See "The Ziggurat Method for Generating Random Variables" (G. Marsaglia and W.W. Tsang 2000).
+  /// </summary>
+  public class NormalDistributedRandom : ItemBase, IRandom {
+
+    private double mu;
+
+    /// <summary>
+    /// Gets or sets the value for µ.
+    /// </summary>
+    public double Mu {
+      get { return mu; }
+      set { mu = value; }
+    }
+    private double sigma;
+
+    /// <summary>
+    /// Gets or sets the value for sigma.
+    /// </summary>
+    public double Sigma {
+      get { return sigma; }
+      set { sigma = value; }
+    }
+    private IRandom uniform;
+    private double[] w = new double[] {
+      1.7290404664e-09,
+      1.2680928529e-10,
+      1.6897518107e-10,
+      1.9862687883e-10,
+      2.2232431174e-10,
+      2.4244936614e-10,
+      2.6016130916e-10,
+      2.7611987696e-10,
+      2.9073962682e-10,
+      3.0429969655e-10,
+      3.1699795566e-10,
+      3.2898020419e-10,
+      3.4035738117e-10,
+      3.5121602848e-10,
+      3.6162509098e-10,
+      3.7164057942e-10,
+      3.8130856805e-10,
+      3.9066758162e-10,
+      3.9975012189e-10,
+      4.0858399997e-10,
+      4.1719308563e-10,
+      4.2559822333e-10,
+      4.3381759296e-10,
+      4.4186720949e-10,
+      4.4976131153e-10,
+      4.5751258337e-10,
+      4.6513240481e-10,
+      4.7263104541e-10,
+      4.8001774777e-10,
+      4.8730097735e-10,
+      4.9448850570e-10,
+      5.0158732723e-10,
+      5.0860404777e-10,
+      5.1554460700e-10,
+      5.2241466708e-10,
+      5.2921933502e-10,
+      5.3596349581e-10,
+      5.4265170135e-10,
+      5.4928817050e-10,
+      5.5587695558e-10,
+      5.6242188684e-10,
+      5.6892646150e-10,
+      5.7539412124e-10,
+      5.8182819673e-10,
+      5.8823168558e-10,
+      5.9460769641e-10,
+      6.0095900478e-10,
+      6.0728838625e-10,
+      6.1359850534e-10,
+      6.1989202660e-10,
+      6.2617133700e-10,
+      6.3243904558e-10,
+      6.3869737277e-10,
+      6.4494881657e-10,
+      6.5119559745e-10,
+      6.5744004685e-10,
+      6.6368432972e-10,
+      6.6993072201e-10,
+      6.7618144417e-10,
+      6.8243871665e-10,
+      6.8870464887e-10,
+      6.9498151678e-10,
+      7.0127148533e-10,
+      7.0757677495e-10,
+      7.1389966161e-10,
+      7.2024242126e-10,
+      7.2660727435e-10,
+      7.3299660786e-10,
+      7.3941280876e-10,
+      7.4585826404e-10,
+      7.5233547170e-10,
+      7.5884698525e-10,
+      7.6539541372e-10,
+      7.7198347714e-10,
+      7.7861395109e-10,
+      7.8528972214e-10,
+      7.9201378789e-10,
+      7.9878920145e-10,
+      8.0561923799e-10,
+      8.1250728368e-10,
+      8.1945689123e-10,
+      8.2647166888e-10,
+      8.3355555791e-10,
+      8.4071272166e-10,
+      8.4794732347e-10,
+      8.5526402627e-10,
+      8.6266754851e-10,
+      8.7016316375e-10,
+      8.7775620106e-10,
+      8.8545243360e-10,
+      8.9325818964e-10,
+      9.0117996399e-10,
+      9.0922497309e-10,
+      9.1740082198e-10,
+      9.2571583732e-10,
+      9.3417884539e-10,
+      9.4279972718e-10,
+      9.5158891877e-10,
+      9.6055785548e-10,
+      9.6971930486e-10,
+      9.7908692265e-10,
+      9.8867602993e-10,
+      9.9850361313e-10,
+      1.0085882129e-09,
+      1.0189509236e-09,
+      1.0296150599e-09,
+      1.0406069340e-09,
+      1.0519566329e-09,
+      1.0636980186e-09,
+      1.0758701707e-09,
+      1.0885182755e-09,
+      1.1016947354e-09,
+      1.1154610569e-09,
+      1.1298901814e-09,
+      1.1450695947e-09,
+      1.1611052120e-09,
+      1.1781275955e-09,
+      1.1962995039e-09,
+      1.2158286600e-09,
+      1.2369856250e-09,
+      1.2601323318e-09,
+      1.2857697129e-09,
+      1.3146201905e-09,
+      1.3477839955e-09,
+      1.3870635751e-09,
+      1.4357403044e-09,
+      1.5008658760e-09,
+      1.6030947680e-09
+    };
+    private long[] k = new long[] {
+      1991057938,
+      0,
+      1611602771,
+      1826899878,
+      1918584482,
+      1969227037,
+      2001281515,
+      2023368125,
+      2039498179,
+      2051788381,
+      2061460127,
+      2069267110,
+      2075699398,
+      2081089314,
+      2085670119,
+      2089610331,
+      2093034710,
+      2096037586,
+      2098691595,
+      2101053571,
+      2103168620,
+      2105072996,
+      2106796166,
+      2108362327,
+      2109791536,
+      2111100552,
+      2112303493,
+      2113412330,
+      2114437283,
+      2115387130,
+      2116269447,
+      2117090813,
+      2117856962,
+      2118572919,
+      2119243101,
+      2119871411,
+      2120461303,
+      2121015852,
+      2121537798,
+      2122029592,
+      2122493434,
+      2122931299,
+      2123344971,
+      2123736059,
+      2124106020,
+      2124456175,
+      2124787725,
+      2125101763,
+      2125399283,
+      2125681194,
+      2125948325,
+      2126201433,
+      2126441213,
+      2126668298,
+      2126883268,
+      2127086657,
+      2127278949,
+      2127460589,
+      2127631985,
+      2127793506,
+      2127945490,
+      2128088244,
+      2128222044,
+      2128347141,
+      2128463758,
+      2128572095,
+      2128672327,
+      2128764606,
+      2128849065,
+      2128925811,
+      2128994934,
+      2129056501,
+      2129110560,
+      2129157136,
+      2129196237,
+      2129227847,
+      2129251929,
+      2129268426,
+      2129277255,
+      2129278312,
+      2129271467,
+      2129256561,
+      2129233410,
+      2129201800,
+      2129161480,
+      2129112170,
+      2129053545,
+      2128985244,
+      2128906855,
+      2128817916,
+      2128717911,
+      2128606255,
+      2128482298,
+      2128345305,
+      2128194452,
+      2128028813,
+      2127847342,
+      2127648860,
+      2127432031,
+      2127195339,
+      2126937058,
+      2126655214,
+      2126347546,
+      2126011445,
+      2125643893,
+      2125241376,
+      2124799783,
+      2124314271,
+      2123779094,
+      2123187386,
+      2122530867,
+      2121799464,
+      2120980787,
+      2120059418,
+      2119015917,
+      2117825402,
+      2116455471,
+      2114863093,
+      2112989789,
+      2110753906,
+      2108037662,
+      2104664315,
+      2100355223,
+      2094642347,
+      2086670106,
+      2074676188,
+      2054300022,
+      2010539237
+   };
+    private double[] f = new double[] {
+      1.0000000000e+00,
+      9.6359968185e-01,
+      9.3628269434e-01,
+      9.1304361820e-01,
+      8.9228165150e-01,
+      8.7324303389e-01,
+      8.5550057888e-01,
+      8.3878362179e-01,
+      8.2290720940e-01,
+      8.0773830414e-01,
+      7.9317700863e-01,
+      7.7914607525e-01,
+      7.6558417082e-01,
+      7.5244158506e-01,
+      7.3967725039e-01,
+      7.2725689411e-01,
+      7.1515148878e-01,
+      7.0333611965e-01,
+      6.9178915024e-01,
+      6.8049186468e-01,
+      6.6942769289e-01,
+      6.5858197212e-01,
+      6.4794182777e-01,
+      6.3749545813e-01,
+      6.2723249197e-01,
+      6.1714339256e-01,
+      6.0721951723e-01,
+      5.9745317698e-01,
+      5.8783704042e-01,
+      5.7836467028e-01,
+      5.6902998686e-01,
+      5.5982738733e-01,
+      5.5075180531e-01,
+      5.4179835320e-01,
+      5.3296267986e-01,
+      5.2424055338e-01,
+      5.1562821865e-01,
+      5.0712203979e-01,
+      4.9871864915e-01,
+      4.9041482806e-01,
+      4.8220765591e-01,
+      4.7409430146e-01,
+      4.6607214212e-01,
+      4.5813870430e-01,
+      4.5029163361e-01,
+      4.4252872467e-01,
+      4.3484783173e-01,
+      4.2724698782e-01,
+      4.1972434521e-01,
+      4.1227802634e-01,
+      4.0490642190e-01,
+      3.9760786295e-01,
+      3.9038079977e-01,
+      3.8322380185e-01,
+      3.7613546848e-01,
+      3.6911445856e-01,
+      3.6215949059e-01,
+      3.5526937246e-01,
+      3.4844297171e-01,
+      3.4167915583e-01,
+      3.3497685194e-01,
+      3.2833510637e-01,
+      3.2175290585e-01,
+      3.1522938609e-01,
+      3.0876362324e-01,
+      3.0235484242e-01,
+      2.9600214958e-01,
+      2.8970485926e-01,
+      2.8346219659e-01,
+      2.7727350593e-01,
+      2.7113807201e-01,
+      2.6505529881e-01,
+      2.5902456045e-01,
+      2.5304529071e-01,
+      2.4711695313e-01,
+      2.4123899639e-01,
+      2.3541094363e-01,
+      2.2963231802e-01,
+      2.2390270233e-01,
+      2.1822164953e-01,
+      2.1258877218e-01,
+      2.0700371265e-01,
+      2.0146611333e-01,
+      1.9597564638e-01,
+      1.9053204358e-01,
+      1.8513499200e-01,
+      1.7978426814e-01,
+      1.7447963357e-01,
+      1.6922089458e-01,
+      1.6400785744e-01,
+      1.5884037316e-01,
+      1.5371830761e-01,
+      1.4864157140e-01,
+      1.4361007512e-01,
+      1.3862377405e-01,
+      1.3368265331e-01,
+      1.2878671288e-01,
+      1.2393598258e-01,
+      1.1913054436e-01,
+      1.1437050998e-01,
+      1.0965602100e-01,
+      1.0498725623e-01,
+      1.0036443919e-01,
+      9.5787845552e-02,
+      9.1257803142e-02,
+      8.6774669588e-02,
+      8.2338899374e-02,
+      7.7950984240e-02,
+      7.3611505330e-02,
+      6.9321118295e-02,
+      6.5080583096e-02,
+      6.0890771449e-02,
+      5.6752663106e-02,
+      5.2667401731e-02,
+      4.8636294901e-02,
+      4.4660862535e-02,
+      4.0742866695e-02,
+      3.6884389818e-02,
+      3.3087886870e-02,
+      2.9356317595e-02,
+      2.5693291798e-02,
+      2.2103304043e-02,
+      1.8592102453e-02,
+      1.5167297795e-02,
+      1.1839478277e-02,
+      8.6244847625e-03,
+      5.5489949882e-03,
+      2.6696291752e-03
+    };
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NormalDistributedRandom"/> with µ = 0 and sigma = 1
+    /// and a new random number generator.
+    /// </summary>
+    public NormalDistributedRandom() {
+      this.mu = 0.0;
+      this.sigma = 1.0;
+      this.uniform = new MersenneTwister();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NormalDistributedRandom"/> with the given parameters.
+    /// <note type="caution"> No CopyConstructor! The random number generator is not copied!</note>
+    /// </summary>    
+    /// <param name="uniformRandom">The random number generator.</param>
+    /// <param name="mu">The value for µ.</param>
+    /// <param name="sigma">The value for sigma.</param>
+    public NormalDistributedRandom(IRandom uniformRandom, double mu, double sigma) {
+      this.mu = mu;
+      this.sigma = sigma;
+      this.uniform = uniformRandom;
+    }
+
+    #region IRandom Members
+
+    /// <inheritdoc cref="IRandom.Reset()"/>
+    public void Reset() {
+      uniform.Reset();
+    }
+
+    /// <inheritdoc cref="IRandom.Reset(int)"/>
+    public void Reset(int seed) {
+      uniform.Reset(seed);
+    }
+
+    /// <summary>
+    /// TODO: The method is not implemented.
+    /// </summary>
+    /// <returns>TODO</returns>
+    public int Next() {
+      throw new Exception("The method or operation is not implemented.");
+    }
+
+    /// <summary>
+    /// TODO: The method is not implemented.
+    /// </summary>
+    /// <param name="maxVal">TODO</param>
+    /// <returns>TODO</returns>
+    public int Next(int maxVal) {
+      throw new Exception("The method or operation is not implemented.");
+    }
+
+    /// <summary>
+    /// TODO: The method is not implemented.
+    /// </summary>
+    /// <param name="minVal">TODO</param>
+    /// <param name="maxVal">TODO</param>
+    /// <returns>TODO</returns>
+    public int Next(int minVal, int maxVal) {
+      throw new Exception("The method or operation is not implemented.");
+    }
+
+    /// <summary>
+    /// Generates a new double random number.
+    /// </summary>
+    /// <returns>A double random number.</returns>
+    public double NextDouble() {
+      double signFactor = uniform.Next()%2==0?1.0:-1.0;
+      return sigma* signFactor * NextPositiveDouble() + mu;
+    }
+
+    private double NextPositiveDouble() {
+      int j = uniform.Next();
+      int i = (j & 127);
+      if(Math.Abs(j) < k[i]) {
+        return j * w[i];
+      } else {
+        double r = 3.442620;
+        double x, y;
+        x = j * w[i];
+        if(i == 0) {
+          do {
+            x = -Math.Log(ScaledUniform()) * 0.2904764;
+            y = -Math.Log(ScaledUniform());
+          } while(y + y < x * x);
+          return (j > 0) ? r + x : -r - x;
+        }
+        if(f[i] + ScaledUniform() * (f[i - 1] - f[i]) < Math.Exp(-0.5 * x * x)) {
+          return x;
+        } else {
+          // recurse
+          return (NextPositiveDouble());
+        }
+      }
+    }
+
+    private double ScaledUniform() {
+      return 0.5 + uniform.Next() * 0.2328306e-9;
+    }
+
+
+    #endregion
+
+    #region persistence
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The value of µ and sigma are saved as child nodes with tag names <c>Mu</c> and <c>Sigma</c>,
+    /// also the random number generator is saved as a child node with tag name <c>UniformRandom</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+      XmlNode muNode = document.CreateNode(XmlNodeType.Element, "Mu", null);
+      muNode.InnerText = mu.ToString("r", CultureInfo.InvariantCulture);
+      node.AppendChild(muNode);
+
+      XmlNode sigmaNode = document.CreateNode(XmlNodeType.Element, "Sigma", null);
+      sigmaNode.InnerText = sigma.ToString("r", CultureInfo.InvariantCulture);
+      node.AppendChild(sigmaNode);
+
+      node.AppendChild(PersistenceManager.Persist("UniformRandom", uniform, document, persistedObjects));
+
+      return node;
+    }
+
+    /// <summary>
+    /// Loads the persisted normally distributed random variable from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The elements of the current instance must be saved in a special way, see 
+    /// <see cref="GetXmlNode"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      mu = double.Parse(node.SelectSingleNode("Mu").InnerText, CultureInfo.InvariantCulture);
+      sigma = double.Parse(node.SelectSingleNode("Sigma").InnerText, CultureInfo.InvariantCulture);
+      uniform = (IRandom)PersistenceManager.Restore(node.SelectSingleNode("UniformRandom"), restoredObjects);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="NormalDistributedRandom"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      NormalDistributedRandom clone = new NormalDistributedRandom((IRandom)Auxiliary.Clone(uniform, clonedObjects), mu, sigma);
+      clonedObjects.Add(Guid, clone);
+      return clone;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalRandomAdder.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalRandomAdder.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalRandomAdder.cs	(revision 1270)
@@ -0,0 +1,180 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// Normally distributed random number generator that adds the generated value to the existing value
+  /// in the specified scope.
+  /// </summary>
+  public class NormalRandomAdder : OperatorBase {
+    private static int MAX_NUMBER_OF_TRIES = 100;
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Samples a normally distributed (mu, sigma * shakingFactor) random variable and adds the result to variable 'Value'.
+        
+If a constraint for the allowed range of 'Value' is defined and the result of the operation would be smaller then 
+the smallest allowed value then 'Value' is set to the lower bound and vice versa for the upper bound.";
+      }
+    }
+
+    /// <summary>
+    /// Gets or sets the value for µ.
+    /// </summary>
+    /// <remarks>Gets or sets the variable with the name <c>Mu</c> through the method 
+    /// <see cref="OperatorBase.GetVariable"/> of class <see cref="OperatorBase"/>.</remarks>
+    public double Mu {
+      get { return ((DoubleData)GetVariable("Mu").Value).Data; }
+      set { ((DoubleData)GetVariable("Mu").Value).Data = value; }
+    }
+    /// <summary>
+    /// Gets or sets the value for sigma.
+    /// </summary>
+    /// <remarks>Gets or sets the variable with the name <c>Sigma</c> through the method 
+    /// <see cref="OperatorBase.GetVariable"/> of class <see cref="OperatorBase"/>.</remarks>
+    public double Sigma {
+      get { return ((DoubleData)GetVariable("Sigma").Value).Data; }
+      set { ((DoubleData)GetVariable("Sigma").Value).Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NormalRandomAdder"/> with five variable infos
+    /// (<c>Mu</c>, <c>Sigma</c>, <c>Value</c>, <c>ShakingFactor</c> and <c>Random</c>).
+    /// </summary>
+    public NormalRandomAdder() {
+      AddVariableInfo(new VariableInfo("Mu", "Parameter mu of the normal distribution", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Mu").Local = true;
+      AddVariable(new Variable("Mu", new DoubleData(0.0)));
+
+      AddVariableInfo(new VariableInfo("Sigma", "Parameter sigma of the normal distribution", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Sigma").Local = true;
+      AddVariable(new Variable("Sigma", new DoubleData(1.0)));
+
+      AddVariableInfo(new VariableInfo("Value", "The value to manipulate (actual type is one of: IntData, DoubleData, ConstrainedIntData, ConstrainedDoubleData)", typeof(IObjectData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ShakingFactor", "Determines the force of the shaking factor (effective sigma = sigma * shakingFactor)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "The random generator to use", typeof(MersenneTwister), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Generates a new normally distributed random number and adds it to the specified value in the
+    /// given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to add the generated random number.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IObjectData value = GetVariableValue<IObjectData>("Value", scope, false);
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+      double factor = GetVariableValue<DoubleData>("ShakingFactor", scope, true).Data;
+      double mu = GetVariableValue<DoubleData>("Mu", scope, true).Data;
+      double sigma = GetVariableValue<DoubleData>("Sigma", scope, true).Data;
+      NormalDistributedRandom normal = new NormalDistributedRandom(mt, mu, sigma * factor);
+
+      AddNormal(value, normal);
+      return null;
+    }
+
+    private void AddNormal(IObjectData value, NormalDistributedRandom normal) {
+      // dispatch manually based on dynamic type
+      if (value is IntData)
+        AddNormal((IntData)value, normal);
+      else if (value is ConstrainedIntData)
+        AddNormal((ConstrainedIntData)value, normal);
+      else if (value is ConstrainedDoubleData)
+        AddNormal((ConstrainedDoubleData)value, normal);
+      else if (value is DoubleData)
+        AddNormal((DoubleData)value, normal);
+      else throw new InvalidOperationException("Can't handle type " + value.GetType().Name);
+    }
+    /// <summary>
+    /// Generates a new double random number and adds it to the value of 
+    /// the given <paramref name="data"/>.
+    /// </summary>
+    /// <param name="data">The double object where to add the random number.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void AddNormal(DoubleData data, NormalDistributedRandom normal) {
+      data.Data += normal.NextDouble();
+    }
+
+    /// <summary>
+    /// Generates a new double random number and adds it to the value of the given <paramref name="data"/>
+    /// checking its constraints.
+    /// </summary>
+    /// <exception cref="InvalidProgramException">Thrown when with the current settings no valid value
+    /// could be found.</exception>
+    /// <param name="data">The double object where to add the random number and whose constraints
+    /// to fulfill.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void AddNormal(ConstrainedDoubleData data, NormalDistributedRandom normal) {
+      for (int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+        double newValue = data.Data + normal.NextDouble();
+        if (IsIntegerConstrained(data)) {
+          newValue = Math.Round(newValue);
+        }
+        if (data.TrySetData(newValue)) {
+          return;
+        }
+      }
+      throw new InvalidProgramException("Coudn't find a valid value");
+    }
+
+    /// <summary>
+    /// Generates a new int random number and adds it to value of the given <paramref name="data"/>.
+    /// </summary>
+    /// <param name="data">The int object where to add the random number.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void AddNormal(IntData data, NormalDistributedRandom normal) {
+      data.Data = (int)Math.Round(data.Data + normal.NextDouble());
+    }
+
+    /// <summary>
+    /// Generates a new int random number and adds it to the value of the given <paramref name="data"/>
+    /// checking its constraints.
+    /// </summary>
+    /// <exception cref="InvalidProgramException">Thrown when with the current settings no valid value 
+    /// could be found.</exception>
+    /// <param name="data">The int object where to add the generated value and whose contraints to check.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void AddNormal(ConstrainedIntData data, NormalDistributedRandom normal) {
+      for (int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+        if (data.TrySetData((int)Math.Round(data.Data + normal.NextDouble())))
+          return;
+      }
+      throw new InvalidProgramException("Couldn't find a valid value.");
+    }
+
+    private bool IsIntegerConstrained(ConstrainedDoubleData data) {
+      foreach (IConstraint constraint in data.Constraints) {
+        if (constraint is IsIntegerConstraint) {
+          return true;
+        }
+      }
+      return false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalRandomizer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalRandomizer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/NormalRandomizer.cs	(revision 1270)
@@ -0,0 +1,178 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// Normally distributed random number generator.
+  /// </summary>
+  public class NormalRandomizer : OperatorBase {
+    private static int MAX_NUMBER_OF_TRIES = 100;
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Initializes the value of variable 'Value' to a random value normally distributed with 'Mu' and 'Sigma'."; }
+    }
+
+    /// <summary>
+    /// Gets or sets the value for µ.
+    /// </summary>
+    /// <remarks>Gets or sets the variable with the name <c>Mu</c> through the method 
+    /// <see cref="OperatorBase.GetVariable"/> of class <see cref="OperatorBase"/>.</remarks>
+    public double Mu {
+      get { return ((DoubleData)GetVariable("Mu").Value).Data; }
+      set { ((DoubleData)GetVariable("Mu").Value).Data = value; }
+    }
+    /// <summary>
+    /// Gets or sets the value for sigma.
+    /// </summary>
+    /// <remarks>Gets or sets the variable with the name <c>Sigma</c> through the method 
+    /// <see cref="OperatorBase.GetVariable"/> of class <see cref="OperatorBase"/>.</remarks>
+    public double Sigma {
+      get { return ((DoubleData)GetVariable("Sigma").Value).Data; }
+      set { ((DoubleData)GetVariable("Sigma").Value).Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="NormalRandomizer"/> with four variable infos
+    /// (<c>Mu</c>, <c>Sigma</c>, <c>Value</c> and <c>Random</c>).
+    /// </summary>
+    public NormalRandomizer() {
+      AddVariableInfo(new VariableInfo("Mu", "Parameter mu of the normal distribution", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Mu").Local = true;
+      AddVariable(new Variable("Mu", new DoubleData(0.0)));
+
+      AddVariableInfo(new VariableInfo("Sigma", "Parameter sigma of the normal distribution", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Sigma").Local = true;
+      AddVariable(new Variable("Sigma", new DoubleData(1.0)));
+
+      AddVariableInfo(new VariableInfo("Value", "The value to manipulate (actual type is one of: IntData, DoubleData, ConstrainedIntData, ConstrainedDoubleData)", typeof(IObjectData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "The random generator to use", typeof(MersenneTwister), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Generates a new normally distributed random variable and assigns it to the specified variable
+    /// in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to assign the new random value to.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IObjectData value = GetVariableValue<IObjectData>("Value", scope, false);
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+      double mu = GetVariableValue<DoubleData>("Mu", scope, true).Data;
+      double sigma = GetVariableValue<DoubleData>("Sigma", scope, true).Data;
+
+      NormalDistributedRandom n = new NormalDistributedRandom(mt, mu, sigma);
+      RandomizeNormal(value, n);
+      return null;
+    }
+
+    private void RandomizeNormal(IObjectData value, NormalDistributedRandom n) {
+      // dispatch manually based on dynamic type
+      if (value is IntData)
+        RandomizeNormal((IntData)value, n);
+      else if (value is ConstrainedIntData)
+        RandomizeNormal((ConstrainedIntData)value, n);
+      else if (value is DoubleData)
+        RandomizeNormal((DoubleData)value, n);
+      else if (value is ConstrainedDoubleData)
+        RandomizeNormal((ConstrainedDoubleData)value, n);
+      else throw new InvalidOperationException("Can't handle type " + value.GetType().Name);
+    }
+
+    /// <summary>
+    /// Generates a new double random variable based on a continuous, normally distributed random number generator
+    /// <paramref name="normal"/> and checks some contraints.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when with the given settings no valid value in
+    /// 100 tries could be found.
+    /// </exception>
+    /// <param name="data">The double object where to assign the new number to and whose constraints
+    /// must be fulfilled.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void RandomizeNormal(ConstrainedDoubleData data, NormalDistributedRandom normal) {
+      for (int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+        double r = normal.NextDouble();
+        if (IsIntegerConstrained(data)) {
+          r = Math.Round(r);
+        }
+        if (data.TrySetData(r)) {
+          return;
+        }
+      }
+      throw new InvalidOperationException("Couldn't find a valid value in 100 tries with mu=" + normal.Mu + " sigma=" + normal.Sigma);
+    }
+
+    /// <summary>
+    /// Generates a new int random variable based on a continuous, normally distributed random number 
+    /// generator <paramref name="normal"/> and checks some constraints.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when with the given settings no valid
+    /// value could be found.</exception>
+    /// <param name="data">The int object where to assign the new value to and whose constraints must
+    /// be fulfilled.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void RandomizeNormal(ConstrainedIntData data, NormalDistributedRandom normal) {
+      for (int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+        double r = normal.NextDouble();
+        if (data.TrySetData((int)Math.Round(r))) // since r is a continuous, normally distributed random variable rounding should be OK
+          return;
+      }
+      throw new InvalidOperationException("Couldn't find a valid value");
+    }
+
+    /// <summary>
+    /// Generates a new double random number based on a continuous, normally distributed random number
+    /// generator <paramref name="normal"/>.
+    /// </summary>
+    /// <param name="data">The double object where to assign the new value to.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void RandomizeNormal(DoubleData data, NormalDistributedRandom normal) {
+      data.Data = normal.NextDouble();
+    }
+
+    /// <summary>
+    /// Generates a new int random number based on a continuous, normally distributed random number 
+    /// generator <paramref name="normal"/>.
+    /// </summary>
+    /// <param name="data">The int object where to assign the new value to.</param>
+    /// <param name="normal">The continuous, normally distributed random variable.</param>
+    public void RandomizeNormal(IntData data, NormalDistributedRandom normal) {
+      data.Data = (int)Math.Round(normal.NextDouble());
+    }
+
+
+    private bool IsIntegerConstrained(ConstrainedDoubleData data) {
+      foreach (IConstraint constraint in data.Constraints) {
+        if (constraint is IsIntegerConstraint) {
+          return true;
+        }
+      }
+      return false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Random")]
+[assembly: AssemblyDescription("HeuristicLab random number generation classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("fc20091c-d28c-4999-940b-5f4029c1ca33")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/RandomInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/RandomInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/RandomInjector.cs	(revision 1270)
@@ -0,0 +1,76 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// Injects a random variable in a given scope.
+  /// </summary>
+  public class RandomInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="RandomInjector"/> with three variable infos
+    /// (<c>SetSeedRandomly</c>, <c>Seed</c> and <c>Random</c>.)
+    /// </summary>
+    public RandomInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("SetSeedRandomly", "Initialize random seed randomly", typeof(BoolData), VariableKind.In));
+      GetVariableInfo("SetSeedRandomly").Local = true;
+      AddVariable(new Variable("SetSeedRandomly", new BoolData(true)));
+
+      AddVariableInfo(new VariableInfo("Seed", "Random seed", typeof(IntData), VariableKind.In));
+      GetVariableInfo("Seed").Local = true;
+      System.Random random = new System.Random();
+      AddVariable(new Variable("Seed", new IntData(random.Next())));
+
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Injects a new random variable in the given <paramref name="scope"/> .
+    /// </summary>
+    /// <param name="scope">The scope where to inject the variable.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      bool setRandomly = GetVariableValue<BoolData>("SetSeedRandomly", scope, true).Data;
+      IntData seed = GetVariableValue<IntData>("Seed", scope, true);
+      if (setRandomly) {
+        System.Random random = new System.Random();
+        seed.Data = random.Next();
+      }
+      MersenneTwister mersenneTwister = new MersenneTwister((uint)seed.Data);
+
+      scope.AddVariable(new Variable(scope.TranslateName("Random"), mersenneTwister));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/UniformRandomAdder.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/UniformRandomAdder.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/UniformRandomAdder.cs	(revision 1270)
@@ -0,0 +1,179 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// Uniformly distributed random number generator that adds the generated value to the existing one.
+  /// </summary>
+  public class UniformRandomAdder : OperatorBase {
+
+    private static int MAX_NUMBER_OF_TRIES = 100;
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Samples a uniformly distributed random variable 'U' with range = [min,max] and E(u) = (max-min)/2
+and adds the result to the variable 'Value'. ShakingFactor influences the effective range of U. 
+If r=(max-min) then the effective range of U is [E(u) - shakingFactor * r/2, E(u) + shakingFactor * r/2].
+
+If a constraint for the allowed range of 'Value' is defined and the result of the operation would be smaller then 
+the smallest allowed value then 'Value' is set to the lower bound and vice versa for the upper bound.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformRandomAdder"/> with five variable infos
+    /// (<c>Value</c>, <c>ShakingFactor</c>, <c>Random</c>, <c>Min</c> and <c>Max</c>), having an interval
+    /// of -1.0 to 1.0.
+    /// </summary>
+    public UniformRandomAdder() {
+      AddVariableInfo(new VariableInfo("Value", "The value to manipulate (type is one of: IntData, ConstrainedIntData, DoubleData, ConstrainedDoubleData)", typeof(IObjectData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ShakingFactor", "Determines the force of the shaking factor", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "The random generator to use", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Min", "Lower bound of the uniform distribution (inclusive)", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Min").Local = true;
+      AddVariable(new Variable("Min", new DoubleData(-1.0)));
+
+      AddVariableInfo(new VariableInfo("Max", "Upper bound of the uniform distribution (exclusive)", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Max").Local = true;
+      AddVariable(new Variable("Max", new DoubleData(1.0)));
+    }
+
+    /// <summary>
+    /// Generates a new uniformly distributed random number and adds it to the value in the given
+    /// <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope where to add the generated random number.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IObjectData value = GetVariableValue<IObjectData>("Value", scope, false);
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+      double factor = GetVariableValue<DoubleData>("ShakingFactor", scope, true).Data;
+      double min = GetVariableValue<DoubleData>("Min", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Max", scope, true).Data;
+
+      double ex = (max - min) / 2.0 + min;
+      double newRange = (max - min) * factor;
+      min = ex - newRange / 2;
+      max = ex + newRange / 2;
+
+      AddUniform(value, mt, min, max);
+      return null;
+    }
+
+    private void AddUniform(IObjectData value, MersenneTwister mt, double min, double max) {
+      // dispatch manually on dynamic type
+      if (value is IntData)
+        AddUniform((IntData)value, mt, min, max);
+      else if (value is ConstrainedIntData)
+        AddUniform((ConstrainedIntData)value, mt, min, max);
+      else if (value is DoubleData)
+        AddUniform((DoubleData)value, mt, min, max);
+      else if (value is ConstrainedDoubleData)
+        AddUniform((ConstrainedDoubleData)value, mt, min, max);
+      else throw new InvalidOperationException("Can't handle type " + value.GetType().Name);
+    }
+
+    /// <summary>
+    /// Adds a new double random variable being restricted to some constraints to the value of the given 
+    /// <paramref name="data"/>.
+    /// </summary>
+    /// <exception cref="InvalidProgramException">Thrown when no valid value can be found.</exception>
+    /// <param name="data">The data where to add the new variable and where to assign the new value to.</param>
+    /// <param name="mt">The random number generator.</param>
+    /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+    /// <param name="max">The right border (exclusive) of the interval in which the next random number
+    /// has to lie.</param>
+    public void AddUniform(ConstrainedDoubleData data, MersenneTwister mt, double min, double max) {
+      for (int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+        double newValue = data.Data + mt.NextDouble() * (max - min) + min;
+        if (IsIntegerConstrained(data)) {
+          newValue = Math.Floor(newValue);
+        }
+        if (data.TrySetData(newValue)) {
+          return;
+        }
+      }
+      throw new InvalidProgramException("Couldn't find a valid value");
+    }
+
+    /// <summary>
+    /// Adds a new int random variable being restricted to some constraints to the value of the given
+    /// <paramref name="data"/>.
+    /// </summary>
+    /// <exception cref="InvalidProgramException">Thrown when no valid value could be found.</exception>
+    /// <param name="data">The data where to add the random value and where to assign the new value to.</param>
+    /// <param name="mt">The random number generator.</param>
+    /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+    /// <param name="max">The right border (exclusive) of the interval in which the next random number
+    /// has to lie.</param>
+    public void AddUniform(ConstrainedIntData data, MersenneTwister mt, double min, double max) {
+      for (int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+        int newValue = (int)Math.Floor(data.Data + mt.NextDouble() * (max - min) + min);
+        if (data.TrySetData(newValue)) {
+          return;
+        }
+      }
+      throw new InvalidProgramException("Couldn't find a valid value");
+    }
+
+    /// <summary>
+    /// Generates a new double random variable and adds it to the value of 
+    /// the given <paramref name="data"/>.
+    /// </summary>
+    /// <param name="data">The double object where to add the random value.</param>
+    /// <param name="mt">The random number generator.</param>
+    /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+    /// <param name="max">The right border (exclusive) of the interval in which the next random number
+    /// has to lie.</param>
+    public void AddUniform(DoubleData data, MersenneTwister mt, double min, double max) {
+      data.Data = data.Data + mt.NextDouble() * (max - min) + min;
+    }
+
+    /// <summary>
+    /// Generates a new int random variable and adds it to the value of the given
+    /// <paramref name="data"/>.
+    /// </summary>
+    /// <param name="data">The int object where to add the random value.</param>
+    /// <param name="mt">The random number generator.</param>
+    /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+    /// <param name="max">The right border (exclusive) of the interval in which the next random number
+    /// has to lie.</param>
+    public void AddUniform(IntData data, MersenneTwister mt, double min, double max) {
+      data.Data = (int)Math.Floor(data.Data + mt.NextDouble() * (max - min) + min);
+    }
+    private bool IsIntegerConstrained(ConstrainedDoubleData data) {
+      foreach (IConstraint constraint in data.Constraints) {
+        if (constraint is IsIntegerConstraint) {
+          return true;
+        }
+      }
+      return false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/UniformRandomizer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/UniformRandomizer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Random/UniformRandomizer.cs	(revision 1270)
@@ -0,0 +1,189 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Constraints;
+
+namespace HeuristicLab.Random {
+  /// <summary>
+  /// Uniformly distributed random number generator.
+  /// </summary>
+  public class UniformRandomizer : OperatorBase {
+    private static int MAX_NUMBER_OF_TRIES = 100;
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Initializes the value of variable 'Value' to a random value uniformly distributed between 'Min' and 'Max' (exclusive)"; }
+    }
+
+    /// <summary>
+    /// Gets or sets the maximum value of the random number generator (exclusive).
+    /// </summary>
+    /// <remarks>Gets or sets the variable with name <c>Max</c> through the 
+    /// <see cref="OperatorBase.GetVariable"/> method of class <see cref="OperatorBase"/>.</remarks>
+    public double Max {
+      get { return ((DoubleData)GetVariable("Max").Value).Data; }
+      set { ((DoubleData)GetVariable("Max").Value).Data = value; }
+    }
+    /// <summary>
+    /// Gets or sets the minimum value of the random number generator.
+    /// </summary>
+    /// <remarks>Gets or sets the variable with name <c>Min</c> through the 
+    /// <see cref="OperatorBase.GetVariable"/> method of class <see cref="OperatorBase"/>.</remarks>
+    public double Min {
+      get { return ((DoubleData)GetVariable("Min").Value).Data; }
+      set { ((DoubleData)GetVariable("Min").Value).Data = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformRandomizer"/> with four variable infos 
+    /// (<c>Value</c>, <c>Random</c>, <c>Max</c> and <c>Min</c>), being a random number generator 
+    /// between 0.0 and 1.0.
+    /// </summary>
+    public UniformRandomizer() {
+      AddVariableInfo(new VariableInfo("Value", "The value to manipulate (type is one of: IntData, ConstrainedIntData, DoubleData, ConstrainedDoubleData)", typeof(IObjectData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Random", "The random generator to use", typeof(MersenneTwister), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Min", "Lower bound of the uniform distribution (inclusive)", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Min").Local = true;
+      AddVariable(new Variable("Min", new DoubleData(0.0)));
+
+      AddVariableInfo(new VariableInfo("Max", "Upper bound of the uniform distribution (exclusive)", typeof(DoubleData), VariableKind.None));
+      GetVariableInfo("Max").Local = true;
+      AddVariable(new Variable("Max", new DoubleData(1.0)));
+    }
+
+    /// <summary>
+    /// Generates a new uniformly distributed random variable.
+    /// </summary>
+    /// <param name="scope">The scope where to apply the random number generator.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IObjectData value = GetVariableValue<IObjectData>("Value", scope, false);
+      MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true);
+      double min = GetVariableValue<DoubleData>("Min", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Max", scope, true).Data;
+
+      RandomizeUniform(value, mt, min, max);
+      return null;
+    }
+
+    /// <summary>
+    /// Generates a new random number depending on the type of the <paramref name="value"/>.
+    /// </summary>
+    /// <exception cref="ArgumentException">Thrown when an unhandleable type appears.</exception>
+    /// <param name="value">The object whose data should be a new randomly generated number.</param>
+    /// <param name="mt">The MersenneTwister to generate a new random number.</param>
+    /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+    /// <param name="max">The right border (exclusive) of the interval in which the next random number
+    /// has to lie.</param>
+    private void RandomizeUniform(IObjectData value, MersenneTwister mt, double min, double max) {
+      // Dispatch manually based on dynamic type,
+      // a bit awkward but necessary until we create a better type hierarchy for numeric types (gkronber 15.11.2008).
+      if (value is DoubleData)
+        RandomizeUniform((DoubleData)value, mt, min, max);
+      else if (value is ConstrainedDoubleData)
+        RandomizeUniform((ConstrainedDoubleData)value, mt, min, max);
+      else if (value is IntData)
+        RandomizeUniform((IntData)value, mt, min, max);
+      else if (value is ConstrainedIntData)
+        RandomizeUniform((ConstrainedIntData)value, mt, min, max);
+      else throw new ArgumentException("Can't handle type " + value.GetType().Name);
+    }
+
+      /// <summary>
+      /// Generates a new double random number.
+      /// </summary>
+      /// <param name="data">The double object which the new value is assigned to.</param>
+      /// <param name="mt">The random number generator.</param>
+      /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+      /// <param name="max">The right border (exclusive) of the interval in which the next random number
+      /// has to lie.</param>
+      public void RandomizeUniform(DoubleData data, MersenneTwister mt, double min, double max) {
+        data.Data = mt.NextDouble() * (max - min) + min;
+      }
+
+      /// <summary>
+      /// Generates a new int random number.
+      /// </summary>
+      /// <param name="data">The int object which the new value is assigned to.</param>
+      /// <param name="mt">The random number generator.</param>
+      /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+      /// <param name="max">The right border (exclusive) of the interval in which the next random number
+      /// has to lie.</param>
+      public void RandomizeUniform(IntData data, MersenneTwister mt, double min, double max) {
+        data.Data = (int)Math.Floor(mt.NextDouble() * (max - min) + min);
+      }
+
+      /// <summary>
+      /// Generates a new double random number, being restricted to some constraints.
+      /// </summary>
+      /// <exception cref="InvalidOperationException">Thrown when no valid value could be found.</exception>
+      /// <param name="data">The double object which the new value is assigned to and whose constraints
+      /// must be fulfilled.</param>
+      /// <param name="mt">The random number generator.</param>
+      /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+      /// <param name="max">The right border (exclusive) of the interval in which the next random number
+      /// has to lie.</param>
+      public void RandomizeUniform(ConstrainedDoubleData data, MersenneTwister mt, double min, double max) {
+        for(int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+          double r = mt.NextDouble() * (max - min) + min;
+          if(IsIntegerConstrained(data)) {
+            r = Math.Floor(r);
+          }
+          if(data.TrySetData(r)) {
+            return;
+          }
+        }
+        throw new InvalidOperationException("Couldn't find a valid value");
+      }
+      /// <summary>
+      /// Generates a new int random number, being restricted to some constraints.
+      /// </summary>
+      /// <exception cref="InvalidOperationException">Thrown when no valid value could be found.</exception>
+      /// <param name="data">The int object which the new value is assigned to and whose constraints
+      /// must be fulfilled.</param>
+      /// <param name="mt">The random number generator.</param>
+      /// <param name="min">The left border of the interval in which the next random number has to lie.</param>
+      /// <param name="max">The right border (exclusive) of the interval in which the next random number
+      /// has to lie.</param>
+      public void RandomizeUniform(ConstrainedIntData data, MersenneTwister mt, double min, double max) {
+        for(int tries = MAX_NUMBER_OF_TRIES; tries >= 0; tries--) {
+          int r = (int)Math.Floor(mt.NextDouble() * (max - min) + min);
+          if(data.TrySetData(r)) {
+            return;
+          }
+        }
+        throw new InvalidOperationException("Couldn't find a valid value");
+      }
+
+      private bool IsIntegerConstrained(ConstrainedDoubleData data) {
+        foreach(IConstraint constraint in data.Constraints) {
+          if(constraint is IsIntegerConstraint) {
+            return true;
+          }
+        }
+        return false;
+      }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BlendAlphaBetaCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BlendAlphaBetaCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BlendAlphaBetaCrossover.cs	(revision 1270)
@@ -0,0 +1,129 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Evolutionary;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Blend alpha-beta crossover for real vectors. Creates a new offspring by selecting a 
+  /// random value from the interval between the two alleles of the parent solutions. 
+  /// The interval is increased in both directions as follows: Into the direction of the 'better' 
+  /// solution by the factor alpha, into the direction of the 'worse' solution by the factor beta.
+  /// </summary>
+  public class BlendAlphaBetaCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Blend alpha-beta crossover for real vectors. Creates a new offspring by selecting a random value from the interval between the two alleles of the parent solutions. The interval is increased in both directions as follows: Into the direction of the 'better' solution by the factor alpha, into the direction of the 'worse' solution by the factor beta.
+Please use the operator BoundsChecker if necessary.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BlendAlphaBetaCrossover"/> with five variable infos
+    /// (<c>Maximization</c>, <c>Quality</c>, <c>Alpha</c> and <c>Beta</c>).
+    /// </summary>
+    public BlendAlphaBetaCrossover()
+      : base() {
+      AddVariableInfo(new VariableInfo("Maximization", "Maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.In));
+      VariableInfo alphaVarInfo = new VariableInfo("Alpha", "Value for alpha", typeof(DoubleData), VariableKind.In);
+      alphaVarInfo.Local = true;
+      AddVariableInfo(alphaVarInfo);
+      AddVariable(new Variable("Alpha", new DoubleData(0.75)));
+      VariableInfo betaVarInfo = new VariableInfo("Beta", "Value for beta", typeof(DoubleData), VariableKind.In);
+      betaVarInfo.Local = true;
+      AddVariableInfo(betaVarInfo);
+      AddVariable(new Variable("Beta", new DoubleData(0.25)));
+    }
+
+    /// <summary>
+    /// Performs a blend alpha beta crossover of two real vectors.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="maximization">Boolean flag whether it is a maximization problem.</param>
+    /// <param name="parent1">The first parent for the crossover.</param>
+    /// <param name="quality1">The quality of the first parent.</param>
+    /// <param name="parent2">The second parent for the crossover.</param>
+    /// <param name="quality2">The quality of the second parent.</param>
+    /// <param name="alpha">The alpha value for the crossover.</param>
+    /// <param name="beta">The beta value for the crossover operation.</param>
+    /// <returns>The newly created real vector resulting from the crossover.</returns>
+    public static double[] Apply(IRandom random, bool maximization, double[] parent1, double quality1, double[] parent2, double quality2, double alpha, double beta) {
+      int length = parent1.Length;
+      double[] result = new double[length];
+
+      for (int i = 0; i < length; i++) {
+        double interval = Math.Abs(parent1[i] - parent2[i]);
+
+        if ((maximization && (quality1 > quality2)) || ((!maximization) && (quality1 < quality2))) {
+          result[i] = SelectFromInterval(random, interval, parent1[i], parent2[i], alpha, beta);
+        } else {
+          result[i] = SelectFromInterval(random, interval, parent2[i], parent1[i], alpha, beta);
+        }
+      }
+      return result;
+    }
+
+    private static double SelectFromInterval(IRandom random, double interval, double val1, double val2, double alpha, double beta) {
+      double resMin = 0;
+      double resMax = 0;
+
+      if (val1 <= val2) {
+        resMin = val1 - interval * alpha;
+        resMax = val2 + interval * beta;
+      } else {
+        resMin = val2 - interval * beta;
+        resMax = val1 + interval * alpha;
+      }
+
+      return SelectRandomFromInterval(random, resMin, resMax);
+    }
+
+    private static double SelectRandomFromInterval(IRandom random, double resMin, double resMax) {
+      return resMin + random.NextDouble() * Math.Abs(resMax - resMin);
+    }
+
+    /// <summary>
+    /// Performs a blend alpha beta crossover operation for two given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in BlendAlphaBetaCrossover: The number of parents is not equal to 2");
+      bool maximization = GetVariableValue<BoolData>("Maximization", scope, true).Data;
+      double quality1 = scope.SubScopes[0].GetVariableValue<DoubleData>("Quality", false).Data;
+      double quality2 = scope.SubScopes[1].GetVariableValue<DoubleData>("Quality", false).Data;
+      double alpha = GetVariableValue<DoubleData>("Alpha", scope, true).Data;
+      double beta = GetVariableValue<DoubleData>("Beta", scope, true).Data;
+
+      return Apply(random, maximization, parents[0], quality1, parents[1], quality2, alpha, beta);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BlendAlphaCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BlendAlphaCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BlendAlphaCrossover.cs	(revision 1270)
@@ -0,0 +1,93 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Blend alpha crossover for real vectors. Creates a new offspring by selecting a random value 
+  /// from the interval between the two alleles of the parent solutions. The interval is increased 
+  /// in both directions by the factor alpha.
+  /// </summary>
+  public class BlendAlphaCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Blend alpha crossover for real vectors. Creates a new offspring by selecting a random value from the interval between the two alleles of the parent solutions. The interval is increased in both directions by the factor alpha.
+Please use the operator BoundsChecker if necessary.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BlendAlphaCrossover"/> with one variable info (<c>Alpha</c>).
+    /// </summary>
+    public BlendAlphaCrossover()
+      : base() {
+      VariableInfo alphaVarInfo = new VariableInfo("Alpha", "Value for alpha", typeof(DoubleData), VariableKind.In);
+      alphaVarInfo.Local = true;
+      AddVariableInfo(alphaVarInfo);
+      AddVariable(new Variable("Alpha", new DoubleData(0.5)));
+    }
+
+    /// <summary>
+    /// Performs a blend alpha crossover of two real vectors.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The first parent for the crossover operation.</param>
+    /// <param name="parent2">The second parent for the crossover operation.</param>
+    /// <param name="alpha">The alpha value for the crossover.</param>
+    /// <returns>The newly created real vector resulting from the crossover operation.</returns>
+    public static double[] Apply(IRandom random, double[] parent1, double[] parent2, double alpha) {
+      int length = parent1.Length;
+      double[] result = new double[length];
+      double cMax = 0, cMin = 0, interval = 0, resMin = 0, resMax = 0;
+
+      for (int i = 0; i < length; i++) {
+        cMax = Math.Max(parent1[i], parent2[i]);
+        cMin = Math.Min(parent1[i], parent2[i]);
+        interval = Math.Abs(cMax - cMin);
+        resMin = cMin - interval * alpha;
+        resMax = cMax + interval * alpha;
+
+        result[i] = resMin + random.NextDouble() * Math.Abs(resMax - resMin);
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a blend alpha crossover operation for two given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in BlendAlphaCrossover: The number of parents is not equal to 2");
+      double alpha = GetVariableValue<DoubleData>("Alpha", scope, true).Data;
+      return Apply(random, parents[0], parents[1], alpha);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BoundsChecker.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BoundsChecker.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BoundsChecker.cs	(revision 1270)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Checks if all elements of a real vector are inside a given minimum and maximum value. 
+  /// If not, the elements are corrected.
+  /// </summary>
+  public class BoundsChecker : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Checks if all elements of a real vector are inside a given minimum and maximum value. If not, elements are corrected."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BoundsChecker"/> with three variable infos
+    /// (<c>RealVector</c>, <c>Minimum</c> and <c>Maximum</c>).
+    /// </summary>
+    public BoundsChecker()
+      : base() {
+      AddVariableInfo(new VariableInfo("RealVector", "Real vector to check", typeof(DoubleArrayData), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum value of each vector element (included).", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum value of each vector element (included).", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Checks if all elements of the given <paramref name="vector"/> are inside the given minimum 
+    /// and maximum value and if not they are corrected.
+    /// </summary>
+    /// <param name="min">The minimum value of the range (inclusive).</param>
+    /// <param name="max">The maximum value of the range (inclusive).</param>
+    /// <param name="vector">The vector to check.</param>
+    /// <returns>The corrected real vector.</returns>
+    public static double[] Apply(double min, double max, double[] vector) {
+      int length = vector.Length;
+      double[] result = (double[])vector.Clone();
+
+      for (int i = 0; i < length; i++) {
+        if (result[i] < min) result[i] = min;
+        if (result[i] > max) result[i] = max;
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Checks if all elements of the given <paramref name="vector"/> are inside the given minimum 
+    /// and maximum value and if not they are corrected.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply(double, double, double[])"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      DoubleArrayData vector = GetVariableValue<DoubleArrayData>("RealVector", scope, false);
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+      vector.Data = Apply(min, max, vector.Data);
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BreederGeneticAlgorithmManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BreederGeneticAlgorithmManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/BreederGeneticAlgorithmManipulator.cs	(revision 1270)
@@ -0,0 +1,113 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Mühlenbein, Schlierkamp-Voosen (1993)
+  /// Predictive Models for the Breeder Genetic Algorithm I. Continuous Parameter Optimization<br/>
+  /// Changes one position of a real vector by adding/substracting a value of the interval [(2^-15)*range, ..., (2^0)*range], where range is SearchIntervalFactor * (max - min).
+  /// </summary>
+  public class BreederGeneticAlgorithmManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return
+@"Breeder Genetic Algorithm Manipulator (Mühlenbein, Schlierkamp-Voosen, 1993). Changes one position of a real vector by adding/substracting a value of the interval [(2^-15)*range, ..., (2^0)*range], where range is SearchIntervalFactor * (max - min).
+
+Mühlenbein, Schlierkamp-Voosen (1993). Predictive Models for the Breeder Genetic Algorithm I. Continuous Parameter Optimization";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="BreederGeneticAlgorithmManipulator"/> with three variable
+    /// infos (<c>Minimum</c>, <c>Maximum</c> and <c>SearchIntervalFactor</c>).
+    /// </summary>
+    public BreederGeneticAlgorithmManipulator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(DoubleData), VariableKind.In));
+      VariableInfo sifInfo = new VariableInfo("SearchIntervalFactor", "The factor determining the size of the search interval, that will be added/removed to/from the allele selected for manipulation.", typeof(DoubleData), VariableKind.In);
+      sifInfo.Local = true;
+      AddVariableInfo(sifInfo);
+      AddVariable(new Variable("SearchIntervalFactor", new DoubleData(0.1)));
+    }
+
+    /// <summary>
+    /// Performs a Breeder Genetic Algorithm Manipulation on the given <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <param name="min">The minimum number of the sampling range for the vector element (inclusive).</param>
+    /// <param name="max">The maximum number of the sampling range for the vector element (exclusive).</param>
+    /// <param name="searchIntervalFactor">The factor determining the size of the search interval.</param>
+    /// <returns>The manipulated real vector.</returns>
+    public static double[] Apply(IScope scope, IRandom random, double[] vector, double min, double max, double searchIntervalFactor) {
+      int length = vector.Length;
+      int pos = random.Next(length);
+      double range = searchIntervalFactor * (max - min);
+      double value = range * Sigma(random);
+
+      if (random.NextDouble() < 0.5) {
+        vector[pos] = vector[pos] + value;
+      } else {
+        vector[pos] = vector[pos] - value;
+      }
+
+      return vector;
+    }
+
+    private static double Sigma(IRandom random) {
+      double sigma = 0;
+      int limit = 16;
+
+      for (int i = 0; i < limit; i++) {
+        if (random.Next(limit) == 15) {
+          // execute this statement with a probability of 1/16
+          sigma += Math.Pow(2, -i);
+        }
+      }
+
+      return sigma;
+    }
+
+    /// <summary>
+    /// Performs a Breeder Genetic Algorithm Manipulation on the given <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+      double searchIntervalFactor = GetVariableValue<DoubleData>("SearchIntervalFactor", scope, true).Data;
+      return Apply(scope, random, vector, min, max, searchIntervalFactor);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/CompleteContinuousCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/CompleteContinuousCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/CompleteContinuousCrossover.cs	(revision 1270)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Complete continuous crossover for real vectors: for each element of the new vector the average
+  /// of all parents is calculated.
+  /// </summary>
+  public class CompleteContinuousCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Complete continuous crossover for real vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a complete continuous crossover of multiple given real vectors.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parents">An array containing the parents that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the complete continuous crossover.</returns>
+    public static double[] Apply(IRandom random, double[][] parents) {
+      int length = parents[0].Length;
+      double[] result = new double[length];
+      for (int i = 0; i < length; i++) {
+        double sum = 0.0;
+        for (int j = 0; j < parents.Length; j++)
+          sum += parents[j][i];
+        result[i] = sum / parents.Length;
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a complete continuous crossover operation for multiple given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are less than two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length < 2) throw new InvalidOperationException("ERROR in CompleteContinuousCrossover: The number of parents is less than 2");
+      return Apply(random, parents);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/ContinuousCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/ContinuousCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/ContinuousCrossover.cs	(revision 1270)
@@ -0,0 +1,75 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Continuous crossover for real vectors: for each element either the element of the first
+  /// parent or the average of all parents is selected randomly.
+  /// </summary>
+  public class ContinuousCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Continuous crossover for real vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a continuous crossover of multiple given real vectors.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parents">An array containing the parents that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the continuous crossover.</returns>
+    public static double[] Apply(IRandom random, double[][] parents) {
+      int length = parents[0].Length;
+      double[] result = new double[length];
+
+      for (int i = 0; i < length; i++) {
+        if (random.NextDouble() < 0.5) {
+          double sum = 0.0;
+          for (int j = 0; j < parents.Length; j++)
+            sum += parents[j][i];
+          result[i] = sum / parents.Length;
+        } else {
+          result[i] = parents[0][i];
+        }
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a continuous crossover operation for multiple given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are less than two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length < 2) throw new InvalidOperationException("ERROR in ContinuousCrossover: The number of parents is less than 2");
+      return Apply(random, parents);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/ContinuousManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/ContinuousManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/ContinuousManipulator.cs	(revision 1270)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Continuous manipulator for real vectors: selects randomly two elements of the vector, 
+  /// calculates its average value and replaces the first selected element with the new value. 
+  /// </summary>
+  public class ContinuousManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "This operator randomly selects two elements of the vector, calculates its average value and replaces the first selected element with the new value."; }
+    }
+
+    /// <summary>
+    /// Performs a continuous manipulation of the given <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    public static double[] Apply(IRandom random, double[] vector) {
+      int length = vector.Length;
+      int index1, index2;
+      index1 = random.Next(length);
+      index2 = random.Next(length);
+
+      while (index2 == index1) {
+        index2 = random.Next(length);
+      }
+
+      vector[index1] = (vector[index1] + vector[index2]) / 2;
+
+      return vector;
+    }
+
+    /// <summary>
+    /// Performs a continuous manipulation of the given <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      return Apply(random, vector);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/DiscreteCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/DiscreteCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/DiscreteCrossover.cs	(revision 1270)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Discrete crossover for real vectors: For each position in the new vector an allele
+  /// of one of the parents is randomly selected.
+  /// </summary>
+  public class DiscreteCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Discrete crossover for real vectors: creates a new offspring by combining the alleles in the parents such that each allele is randomly selected from one parent."; }
+    }
+
+    /// <summary>
+    /// Performs a discrete crossover operation on multiple given parents.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the parents that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    public static double[] Apply(IRandom random, double[][] parents) {
+      int length = parents[0].Length;
+      double[] result = new double[length];
+      for (int i = 0; i < length; i++) {
+        result[i] = parents[random.Next(parents.Length)][i];
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a discrete crossover operation for multiple given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are less than two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length < 2) throw new InvalidOperationException("ERROR in DiscreteCrossover: The number of parents is less than 2");
+      return Apply(random, parents);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicCrossover.cs	(revision 1270)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Heuristic crossover for real vectors: Takes for each position the better parent and adds the difference
+  /// of the two parents times a randomly chosen factor.
+  /// </summary>
+  public class HeuristicCrossover : RealVectorCrossoverBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="HeuristicCrossover"/> with two variable infos
+    /// (<c>Maximization</c> and <c>Quality</c>).
+    /// </summary>
+    public HeuristicCrossover()
+      : base() {
+      AddVariableInfo(new VariableInfo("Maximization", "Maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Heuristic crossover for real vectors."; }
+    }
+
+    /// <summary>
+    /// Perfomrs a heuristic crossover on the two given parents.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="maximization">Boolean flag whether it is a maximization problem.</param>
+    /// <param name="parent1">The first parent for the crossover operation.</param>
+    /// <param name="quality1">The quality of the first parent.</param>
+    /// <param name="parent2">The second parent for the crossover operation.</param>
+    /// <param name="quality2">The quality of the second parent.</param>
+    /// <returns>The newly created real vector, resulting from the heuristic crossover.</returns>
+    public static double[] Apply(IRandom random, bool maximization, double[] parent1, double quality1, double[] parent2, double quality2) {
+      int length = parent1.Length;
+      double[] result = new double[length];
+      double factor = random.NextDouble();
+
+      for (int i = 0; i < length; i++) {
+        if ((maximization && (quality1 > quality2)) || ((!maximization) && (quality1 < quality2)))
+          result[i] = parent1[i] + factor * (parent1[i] - parent2[i]);
+        else
+          result[i] = parent2[i] + factor * (parent2[i] - parent1[i]);
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a heuristic crossover operation for two given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in HeuristicCrossover: The number of parents is not equal to 2");
+      bool maximization = GetVariableValue<BoolData>("Maximization", scope, true).Data;
+      double quality1 = scope.SubScopes[0].GetVariableValue<DoubleData>("Quality", false).Data;
+      double quality2 = scope.SubScopes[1].GetVariableValue<DoubleData>("Quality", false).Data;
+
+      return Apply(random, maximization, parents[0], quality1, parents[1], quality2);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicLab.RealVector.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicLab.RealVector.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicLab.RealVector.csproj	(revision 1270)
@@ -0,0 +1,125 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{2D4E4565-3ED9-4BEB-AE75-39D871843D24}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.RealVector</RootNamespace>
+    <AssemblyName>HeuristicLab.RealVector-3.2</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.RealVector-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.RealVector-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BlendAlphaBetaCrossover.cs" />
+    <Compile Include="BlendAlphaCrossover.cs" />
+    <Compile Include="BreederGeneticAlgorithmManipulator.cs" />
+    <Compile Include="ContinuousCrossover.cs" />
+    <Compile Include="CompleteContinuousCrossover.cs" />
+    <Compile Include="BoundsChecker.cs" />
+    <Compile Include="ContinuousManipulator.cs" />
+    <Compile Include="DiscreteCrossover.cs" />
+    <Compile Include="HeuristicCrossover.cs" />
+    <Compile Include="MichalewiczNonUniformAllPositionsManipulator.cs" />
+    <Compile Include="MichalewiczNonUniformOnePositionManipulator.cs" />
+    <Compile Include="RandomConvexCrossover.cs" />
+    <Compile Include="LocalCrossover.cs" />
+    <Compile Include="SelfAdaptiveDiscreteCrossover.cs" />
+    <Compile Include="SelfAdaptiveNormalAllPositionsManipulator.cs" />
+    <Compile Include="UniformAllPositionsManipulator.cs" />
+    <Compile Include="UniformRandomRealVectorGenerator.cs" />
+    <Compile Include="UniformOnePositionManipulator.cs" />
+    <Compile Include="RealVectorCrossoverBase.cs" />
+    <Compile Include="RealVectorManipulatorBase.cs" />
+    <Compile Include="HeuristicLabRealVectorPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SinglePointCrossover.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicLabRealVectorPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicLabRealVectorPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/HeuristicLabRealVectorPlugin.cs	(revision 1270)
@@ -0,0 +1,39 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Plugin class for HeuristicLab.RealVector plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.RealVector-3.2")]
+  [PluginFile(Filename = "HeuristicLab.RealVector-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Evolutionary-3.2")]
+  public class HeuristicLabRealVectorPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/LocalCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/LocalCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/LocalCrossover.cs	(revision 1270)
@@ -0,0 +1,71 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Local crossover for real vectors: Takes for each element the allele of the first parent times a 
+  /// always newly created randomly chosen factor and adds the allele of the second parent times (1 - the randomly chosen factor).
+  /// </summary>
+  public class LocalCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Local crossover for real vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a local crossover on the two given parent vectors.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The first parent for the crossover operation.</param>
+    /// <param name="parent2">The second parent for the crossover operation.</param>
+    /// <returns>The newly created real vector, resulting from the local crossover.</returns>
+    public static double[] Apply(IRandom random, double[] parent1, double[] parent2) {
+      double factor;
+      int length = parent1.Length;
+      double[] result = new double[length];
+
+      for (int i = 0; i < length; i++) {
+        factor = random.NextDouble();
+        result[i] = (factor * parent1[i]) + ((1 - factor) * parent2[i]);
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a local crossover operation for two given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in LocalCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/MichalewiczNonUniformAllPositionsManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/MichalewiczNonUniformAllPositionsManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/MichalewiczNonUniformAllPositionsManipulator.cs	(revision 1270)
@@ -0,0 +1,110 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Michalewicz, Z. (1992). Genetic Algorithms + Data Structures = Evolution Programs <br/>
+  /// Non-uniformly distributed change of all positions of a real vector.
+  /// </summary>
+  public class MichalewiczNonUniformAllPositionsManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Non-uniformly distributed change of all positions of a real vector (Michalewicz 1992)
+Initially, the space will be searched uniformly and very locally at later stages. This increases the probability of generating the new number closer to its successor instead of a random number.
+
+Michalewicz, Z. (1992). Genetic Algorithms + Data Structures = Evolution Programs. Springer Verlag.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="MichalewiczNonUniformAllPositionsManipulator"/> with
+    /// five variable infos (<c>Minimum</c>, <c>Maximum</c>, <c>CurrentGeneration</c>, 
+    /// <c>MaximumGenerations</c> and <c>GenerationsDependency</c>).
+    /// </summary>
+    public MichalewiczNonUniformAllPositionsManipulator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CurrentGeneration", "Current Generation of the algorithm", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaximumGenerations", "Maximum number of Generations", typeof(IntData), VariableKind.In));
+      VariableInfo genDepInfo = new VariableInfo("GenerationsDependency", "Specifies the degree of dependency on the number of generations", typeof(IntData), VariableKind.In);
+      genDepInfo.Local = true;
+      AddVariableInfo(genDepInfo);
+      AddVariable(new Variable("GenerationsDependency", new IntData(5)));
+    }
+
+    /// <summary>
+    /// Performs a non uniformly distributed all position manipulation on the given
+    /// real <paramref name="vector"/>, published by Z. Michalewicz, 1992.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+      int currentGeneration = GetVariableValue<IntData>("CurrentGeneration", scope, true).Data;
+      int maximumGenerations = GetVariableValue<IntData>("MaximumGenerations", scope, true).Data;
+      int generationsDependency = GetVariableValue<IntData>("GenerationsDependency", scope, true).Data;
+      return Apply(random, vector, min, max, currentGeneration, maximumGenerations, generationsDependency);
+    }
+
+    /// <summary>
+    /// Performs a non uniformly distributed all position manipulation on the given
+    /// real <paramref name="vector"/>, published by Z. Michalewicz, 1992.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <param name="min">The minimum value of the sampling range for the vector element (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for the vector element (exclusive).</param>
+    /// <param name="currentGeneration">The current generation of the algorithm.</param>
+    /// <param name="maximumGenerations">Maximum number of generations.</param>
+    /// <param name="generationsDependency">Specifies the degree of dependency on the number of generations.</param>
+    /// <returns>The manipulated real vector.</returns>
+    public static double[] Apply(IRandom random, double[] vector, double min, double max, int currentGeneration, int maximumGenerations, int generationsDependency) {
+      int length = vector.Length;
+      double[] result = new double[length];
+
+      for (int i = 0; i < length; i++) {
+        if (random.NextDouble() < 0.5) {
+          vector[i] = vector[i] + Delta(random, currentGeneration, max - vector[i], maximumGenerations, generationsDependency);
+        } else {
+          vector[i] = vector[i] - Delta(random, currentGeneration, vector[i] - min, maximumGenerations, generationsDependency);
+        }
+      }
+      return vector;
+    }
+
+    // returns a value between 0 and y (both included)
+    private static double Delta(IRandom random, int currentGeneration, double y, int maximumGenerations, int generationsDependency) {
+      return y * (1 - Math.Pow(random.NextDouble(), Math.Pow(1 - currentGeneration / maximumGenerations, generationsDependency)));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/MichalewiczNonUniformOnePositionManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/MichalewiczNonUniformOnePositionManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/MichalewiczNonUniformOnePositionManipulator.cs	(revision 1270)
@@ -0,0 +1,109 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Michalewicz, Z. (1992). Genetic Algorithms + Data Structures = Evolution Programs<br/>
+  /// Non-uniformly distributed change of one position of a real vector.
+  /// </summary>
+  public class MichalewiczNonUniformOnePositionManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Non-uniformly distributed change of one position of a real vector (Michalewicz 1992)
+Initially, the space will be searched uniformly and very locally at later stages. This increases the probability of generating the new number closer to its successor instead of a random number.
+
+Michalewicz, Z. (1992). Genetic Algorithms + Data Structures = Evolution Programs. Springer Verlag.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="MichalewiczNonUniformOnePositionManipulator"/> with five 
+    /// variable infos (<c>Minimum</c>, <c>Maximum</c>, <c>CurrentGeneration</c>, <c>MaximumGenerations</c>
+    /// and <c>GenerationsDependency</c>).
+    /// </summary>
+    public MichalewiczNonUniformOnePositionManipulator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("CurrentGeneration", "Current Generation of the algorithm", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("MaximumGenerations", "Maximum number of Generations", typeof(IntData), VariableKind.In));
+      VariableInfo genDepInfo = new VariableInfo("GenerationsDependency", "Specifies the degree of dependency on the number of generations", typeof(IntData), VariableKind.In);
+      genDepInfo.Local = true;
+      AddVariableInfo(genDepInfo);
+      AddVariable(new Variable("GenerationsDependency", new IntData(5)));
+    }
+
+    /// <summary>
+    /// Performs a non uniformly distributed one position manipulation on the given 
+    /// real <paramref name="vector"/>, published by Z. Michalewicz, 1992.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+      int currentGeneration = GetVariableValue<IntData>("CurrentGeneration", scope, true).Data;
+      int maximumGenerations = GetVariableValue<IntData>("MaximumGenerations", scope, true).Data;
+      int generationsDependency = GetVariableValue<IntData>("GenerationsDependency", scope, true).Data;
+      return Apply(random, vector, min, max, currentGeneration, maximumGenerations, generationsDependency);
+    }
+
+    /// <summary>
+    /// Performs a non uniformly distributed one position manipulation on the given 
+    /// real <paramref name="vector"/>, published by Z. Michalewicz, 1992.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <param name="min">The minimum value of the sampling range for the vector element (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for the vector element (exclusive).</param>
+    /// <param name="currentGeneration">The current generation of the algorithm.</param>
+    /// <param name="maximumGenerations">Maximum number of generations.</param>
+    /// <param name="generationsDependency">Specifies the degree of dependency on the number of generations.</param>
+    /// <returns>The manipulated real vector.</returns>
+    public static double[] Apply(IRandom random, double[] vector, double min, double max, int currentGeneration, int maximumGenerations, int generationsDependency) {
+      int length = vector.Length;
+      double[] result = new double[length];
+      int pos = random.Next(length);
+
+      if (random.NextDouble() < 0.5) {
+        vector[pos] = vector[pos] + Delta(random, currentGeneration, max - vector[pos], maximumGenerations, generationsDependency);
+      } else {
+        vector[pos] = vector[pos] - Delta(random, currentGeneration, vector[pos] - min, maximumGenerations, generationsDependency);
+      }
+      return vector;
+    }
+
+    // returns a value between 0 and y (both included)
+    private static double Delta(IRandom random, int currentGeneration, double y, int maximumGenerations, int generationsDependency) {
+      return y * (1 - Math.Pow(random.NextDouble(), Math.Pow(1 - currentGeneration / maximumGenerations, generationsDependency)));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.RealVector")]
+[assembly: AssemblyDescription("HeuristicLab real vector operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("4da6c9ad-b15d-4960-b010-d12318948e2d")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RandomConvexCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RandomConvexCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RandomConvexCrossover.cs	(revision 1270)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Random convex crossover for real vectors: Takes for each element the allele of the first parent times a 
+  /// once created randomly chosen factor and adds the allele of the second parent times 
+  /// (1 - the randomly chosen factor).
+  /// </summary>
+  public class RandomConvexCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Random convex crossover for real vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a random convex crossover on the two given parents.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="parent1">The first parent vector for the crossover.</param>
+    /// <param name="parent2">The second parent vector for the crossover.</param>
+    /// <returns>The newly created real vector, resulting from the random convex crossover.</returns>
+    public static double[] Apply(IRandom random, double[] parent1, double[] parent2) {
+      int length = parent1.Length;
+      double[] result = new double[length];
+      double factor = random.NextDouble();
+
+      for (int i = 0; i < length; i++)
+        result[i] = (factor * parent1[i]) + ((1 - factor) * parent2[i]);
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a random convex crossover operation for two given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in RandomConvexCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RealVectorCrossoverBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RealVectorCrossoverBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RealVectorCrossoverBase.cs	(revision 1270)
@@ -0,0 +1,72 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Base class for all real vector crossover operators.
+  /// </summary>
+  public abstract class RealVectorCrossoverBase : CrossoverBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="RealVectorCrossoverBase"/> with one variable info
+    /// (<c>RealVector</c>).
+    /// </summary>
+    public RealVectorCrossoverBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("RealVector", "Parent and child real vector", typeof(DoubleArrayData), VariableKind.In | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Performs a crossover by calling <see cref="Cross(HeuristicLab.Core.IScope, HeuristicLab.Core.IRandom, double[][]"/>
+    /// and adds the created real vector to the current scope.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if the parents have different lengths.</exception>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <param name="random">A random number generator.</param>
+    protected sealed override void Cross(IScope scope, IRandom random) {
+      double[][] parents = new double[scope.SubScopes.Count][];
+      int length = -1;
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        parents[i] = scope.SubScopes[i].GetVariableValue<DoubleArrayData>("RealVector", false).Data;
+        if (i == 0) length = parents[i].Length;
+        else if (parents[i].Length != length) throw new InvalidOperationException("ERROR in RealVectorCrossoverBase: Cannot apply crossover to real vectors of different length");
+      }
+
+      double[] result = Cross(scope, random, parents);
+      scope.AddVariable(new Variable(scope.TranslateName("RealVector"), new DoubleArrayData(result)));
+    }
+
+    /// <summary>
+    /// Performs a crossover of multiple real vectors.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing all parent real vectors.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected abstract double[] Cross(IScope scope, IRandom random, double[][] parents);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RealVectorManipulatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RealVectorManipulatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/RealVectorManipulatorBase.cs	(revision 1270)
@@ -0,0 +1,63 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Base class for all real vector manipulators.
+  /// </summary>
+  public abstract class RealVectorManipulatorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="RealVectorManipulatorBase"/> with two variable infos
+    /// (<c>Random</c> and <c>RealVector</c>).
+    /// </summary>
+    public RealVectorManipulatorBase() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("RealVector", "Real vector to manipulate", typeof(DoubleArrayData), VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Manipulates the real vector.
+    /// </summary>
+    /// <param name="scope">The current scope whose real vector to manipulate.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      DoubleArrayData vector = GetVariableValue<DoubleArrayData>("RealVector", scope, false);
+      vector.Data = Manipulate(scope, random, vector.Data);
+      return null;
+    }
+
+    /// <summary>
+    /// Manipulates the given real <paramref name="vector"/> with the given random number generator.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    protected abstract double[] Manipulate(IScope scope, IRandom random, double[] vector);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SelfAdaptiveDiscreteCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SelfAdaptiveDiscreteCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SelfAdaptiveDiscreteCrossover.cs	(revision 1270)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Discrete crossover for real vectors: creates a new offspring by combining the alleles in the parents such that each allele is 
+  /// randomly selected from one parent. It will also use the same strategy to combine the endogenous 
+  /// strategy parameter vector.
+  /// </summary>
+  public class SelfAdaptiveDiscreteCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Discrete crossover for real vectors: creates a new offspring by combining the alleles in the parents such that each allele is randomly selected from one parent. It will also use the same strategy to combine the endogenous strategy parameter vector.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SelfAdaptiveDiscreteCrossover"/> with one additional
+    /// variable infos (<c>StrategyVector</c>).
+    /// </summary>
+    public SelfAdaptiveDiscreteCrossover()
+      : base() {
+      AddVariableInfo(new VariableInfo("StrategyVector", "Endogenous strategy parameter vector", typeof(DoubleArrayData), VariableKind.In | VariableKind.New));
+    }
+
+    /// <summary>
+    /// Performs a discrete crossover operation for multiple given parent real vectors that combines the strategy vectors in the same way.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the parents that should be crossed.</param>
+    /// <param name="strategies">An array containing the strategy vectors of the parents.</param>
+    /// <param name="child">The newly created real vector, resulting from the crossover operation (output parameter).</param>
+    /// <param name="strategy">The newly created strategy vector, resulting from the crossover operation (output parameter).</param>
+    public static void Apply(IRandom random, double[][] parents, double[][] strategies, out double[] child, out double[] strategy) {
+      child = new double[parents[0].Length];
+      strategy = new double[strategies[0].Length];
+      for (int i = 0; i < child.Length; i++) {
+        int nextParent = random.Next(parents.Length);
+        child[i] = parents[nextParent][i];
+        strategy[i] = strategies[nextParent][i];
+      }
+    }
+
+    /// <summary>
+    /// Performs a discrete crossover operation for multiple given parent real vectors that combines the strategy vectors in the same way.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are less than two parents or if the length of the strategy vectors is not the same as the length of the real vectors.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length < 2) throw new InvalidOperationException("ERROR in SelfAdaptiveDiscreteCrossover: The number of parents is less than 2");
+      double[][] strategies = new double[scope.SubScopes.Count][];
+      int length = parents[0].Length;
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        strategies[i] = scope.SubScopes[i].GetVariableValue<DoubleArrayData>("StrategyVector", false).Data;
+        if (strategies[i].Length != length) throw new InvalidOperationException("ERROR in SelfAdaptiveDiscreteCrossover: Strategy vectors do not have the same length as the real vectors");
+      }
+
+      double[] child, strategy;
+      Apply(random, parents, strategies, out child, out strategy);
+      scope.AddVariable(new Variable(scope.TranslateName("StrategyVector"), new DoubleArrayData(strategy)));
+      return child;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SelfAdaptiveNormalAllPositionsManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SelfAdaptiveNormalAllPositionsManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SelfAdaptiveNormalAllPositionsManipulator.cs	(revision 1270)
@@ -0,0 +1,81 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Manipulates each dimension in the real vector with the mutation strength given 
+  /// in the strategy parameter vector.
+  /// </summary>
+  public class SelfAdaptiveNormalAllPositionsManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Manipulates each dimension in the real vector with the mutation strength given in the strategy parameter vector"; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SelfAdaptiveNormalAllPositionsManipulator"/> with one
+    /// variable info (<c>StrategyVector</c>).
+    /// </summary>
+    public SelfAdaptiveNormalAllPositionsManipulator()
+      : base() {
+      AddVariableInfo(new VariableInfo("StrategyVector", "The strategy vector determining the strength of the mutation", typeof(DoubleArrayData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Performs a self adaptive normally distributed all position manipulation on the given 
+    /// <paramref name="vector"/>.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the strategy vector is not
+    /// as long as the vector to get manipulated.</exception>
+    /// <param name="strategyParameters">The strategy vector determining the strength of the mutation.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    public static double[] Apply(double[] strategyParameters, IRandom random, double[] vector) {
+      NormalDistributedRandom N = new NormalDistributedRandom(random, 0.0, 1.0);
+      for (int i = 0; i < vector.Length; i++) {
+        vector[i] = vector[i] + (N.NextDouble() * strategyParameters[i % strategyParameters.Length]);
+      }
+      return vector;
+    }
+
+    /// <summary>
+    /// Performs a self adaptive normally distributed all position manipulation on the given 
+    /// <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The manipulated real vector.</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      double[] strategyVector = scope.GetVariableValue<DoubleArrayData>("StrategyVector", true).Data;
+      return Apply(strategyVector, random, vector);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SinglePointCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SinglePointCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/SinglePointCrossover.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Single point crossover for real vectors.
+  /// </summary>
+  public class SinglePointCrossover : RealVectorCrossoverBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Single point crossover for real vectors."; }
+    }
+
+    /// <summary>
+    /// Performs a single point crossover at a randomly chosen position of the two 
+    /// given parent real vectors.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parent1">The first parent for crossover.</param>
+    /// <param name="parent2">The second parent for crossover.</param>
+    /// <returns>The newly created real vector, resulting from the single point crossover.</returns>
+    public static double[] Apply(IRandom random, double[] parent1, double[] parent2) {
+      int length = parent1.Length;
+      double[] result = new double[length];
+      int breakPoint = random.Next(1, length);
+
+      for (int i = 0; i < breakPoint; i++)
+        result[i] = parent1[i];
+      for (int i = breakPoint; i < length; i++)
+        result[i] = parent2[i];
+
+      return result;
+    }
+
+    /// <summary>
+    /// Performs a single point crossover operation for two given parent real vectors.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown if there are not exactly two parents.</exception>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="parents">An array containing the two real vectors that should be crossed.</param>
+    /// <returns>The newly created real vector, resulting from the crossover operation.</returns>
+    protected override double[] Cross(IScope scope, IRandom random, double[][] parents) {
+      if (parents.Length != 2) throw new InvalidOperationException("ERROR in SinglePointCrossover: The number of parents is not equal to 2");
+      return Apply(random, parents[0], parents[1]);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformAllPositionsManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformAllPositionsManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformAllPositionsManipulator.cs	(revision 1270)
@@ -0,0 +1,79 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Uniformly distributed change of all positions of a real vector.
+  /// </summary>
+  public class UniformAllPositionsManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Uniformly distributed change of all positions of a real vector."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformAllPositionsManipulator"/> with two variable infos
+    /// (<c>Minimum</c> and <c>Maximum</c>).
+    /// </summary>
+    public UniformAllPositionsManipulator() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Changes all positions in the given real <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <param name="min">The minimum value of the sampling range for each vector element (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for each vector element (exclusive).</param>
+    /// <returns>The new real vector which has been manipulated.</returns>
+    public static double[] Apply(IRandom random, double[] vector, double min, double max) {
+      double[] result = (double[])vector.Clone();
+
+      for (int i = 0; i < result.Length; i++) {
+        result[i] = min + random.NextDouble() * (max - min);
+      }
+
+      return result;
+    }
+
+    /// <summary>
+    /// Changes all positions in the given real <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The new real vector which has been manipulated.</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+      return Apply(random, vector, min, max);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformOnePositionManipulator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformOnePositionManipulator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformOnePositionManipulator.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Uniformly distributed change of a single position of a real vector.
+  /// </summary>
+  public class UniformOnePositionManipulator : RealVectorManipulatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Uniformly distributed change of a single position of a real vector."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformOnePositionManipulator"/> with two variable infos
+    /// (<c>Minimum</c> and <c>Maximum</c>).
+    /// </summary>
+    public UniformOnePositionManipulator() {
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for the vector element (included)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for the vector element (excluded)", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Changes randomly a single position in the given real <paramref name="vector"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <param name="min">The minimum value of the sampling range for 
+    /// the vector element to change (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for
+    /// the vector element to change (exclusive).</param>
+    /// <returns>The new real vector that has been manipulated.</returns>
+    public static double[] Apply(IRandom random, double[] vector, double min, double max) {
+      double[] result = (double[])vector.Clone();
+      int index = random.Next(result.Length);
+      result[index] = min + random.NextDouble() * (max - min);
+      return result;
+    }
+
+    /// <summary>
+    /// Changes randomly a single position in the given real <paramref name="vector"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="scope">The current scope.</param>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="vector">The real vector to manipulate.</param>
+    /// <returns>The new real vector that has been manipulated.</returns>
+    protected override double[] Manipulate(IScope scope, IRandom random, double[] vector) {
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+      return Apply(random, vector, min, max);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformRandomRealVectorGenerator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformRandomRealVectorGenerator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.RealVector/UniformRandomRealVectorGenerator.cs	(revision 1270)
@@ -0,0 +1,83 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.RealVector {
+  /// <summary>
+  /// Generates a new random real vector with each element uniformly distributed in a specified range.
+  /// </summary>
+  public class UniformRandomRealVectorGenerator : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return "Operator generating a new random real vector with each element uniformly distributed in a specified range."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="UniformRandomRealVectorGenerator"/> with five variable infos
+    /// (<c>Random</c>, <c>Length</c>, <c>Minimum</c>, <c>Maximum</c> and <c>RealVector</c>).
+    /// </summary>
+    public UniformRandomRealVectorGenerator() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Length", "Vector length", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Minimum", "Minimum of the sampling range for each vector element (included)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Maximum", "Maximum of the sampling range for each vector element (excluded)", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("RealVector", "Created random real vector", typeof(DoubleArrayData), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Generates a new random real vector with the given <paramref name="length"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="length">The length of the real vector.</param>
+    /// <param name="min">The minimum value of the sampling range for each vector element (inclusive).</param>
+    /// <param name="max">The maximum value of the sampling range for each vector element (exclusive).</param>
+    /// <returns>The newly created real vector.</returns>
+    public static double[] Apply(IRandom random, int length, double min, double max) {
+      double[] result = new double[length];
+      for (int i = 0; i < length; i++)
+        result[i] = min + random.NextDouble() * (max - min);
+      return result;
+    }
+
+    /// <summary>
+    /// Generates a new random real vector and injects it in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to get the values from and where to inject the newly 
+    /// created real vector.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      IRandom random = GetVariableValue<IRandom>("Random", scope, true);
+      int length = GetVariableValue<IntData>("Length", scope, true).Data;
+      double min = GetVariableValue<DoubleData>("Minimum", scope, true).Data;
+      double max = GetVariableValue<DoubleData>("Maximum", scope, true).Data;
+
+      double[] vector = Apply(random, length, min, max);
+      scope.AddVariable(new Variable(scope.TranslateName("RealVector"), new DoubleArrayData(vector)));
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/DistanceMatrixPathTSPEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/DistanceMatrixPathTSPEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/DistanceMatrixPathTSPEvaluator.cs	(revision 1270)
@@ -0,0 +1,67 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Permutation;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Evaluates the TSP path by using values in the distance matrix.
+  /// </summary>
+  public class DistanceMatrixPathTSPEvaluator : SingleObjectiveEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="DistanceMatrixPathTSPEvaluator"/> with two variable 
+    /// infos (<c>Permutation</c>, <c>DistanceMatrix</c>).
+    /// </summary>
+    public DistanceMatrixPathTSPEvaluator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Permutation", "Permutation representing a TSP solution in path encoding", typeof(Permutation.Permutation), VariableKind.In));
+      AddVariableInfo(new VariableInfo("DistanceMatrix", "Distance matrix containing all distances between cities", typeof(DoubleMatrixData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Calculates the length of the path in the given <paramref name="scope"/> by taking the 
+    /// values of the distance matrix.
+    /// </summary>
+    /// <param name="scope">The current scope with the permutation and the distance matrix.</param>
+    /// <returns>The calculated length.</returns>
+    protected override double Evaluate(IScope scope) {
+      double[,] distanceMatrix = GetVariableValue<DoubleMatrixData>("DistanceMatrix", scope, true).Data;
+      int[] perm = GetVariableValue<Permutation.Permutation>("Permutation", scope, false).Data;
+      double length = 0;
+
+      for (int i = 0; i < perm.Length - 1; i++)
+        length += distanceMatrix[perm[i], perm[i + 1]];
+      length += distanceMatrix[perm[perm.Length - 1], perm[0]];
+      return length;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/HeuristicLab.Routing.TSP.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/HeuristicLab.Routing.TSP.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/HeuristicLab.Routing.TSP.csproj	(revision 1270)
@@ -0,0 +1,146 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Routing.TSP</RootNamespace>
+    <AssemblyName>HeuristicLab.Routing.TSP-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Routing.TSP-3.2.XML</DocumentationFile>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Routing.TSP-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="TSPTourInjector.cs" />
+    <Compile Include="TSPTourView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TSPTourView.Designer.cs">
+      <DependentUpon>TSPTourView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TSPTour.cs" />
+    <Compile Include="TSPInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TSPInjectorView.Designer.cs">
+      <DependentUpon>TSPInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="TSPRoundedEuclideanDistanceMatrixInjector.cs" />
+    <Compile Include="TSPDistanceMatrixInjectorBase.cs" />
+    <Compile Include="DistanceMatrixPathTSPEvaluator.cs" />
+    <Compile Include="PathTSPEvaluatorBase.cs" />
+    <Compile Include="HeuristicLabRoutingTSPPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RoundedEuclideanPathTSPEvaluator.cs" />
+    <Compile Include="TSPInjector.cs" />
+    <Compile Include="TSPParser.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Charting\HeuristicLab.Charting.csproj">
+      <Project>{B462D3CC-8866-42F0-9832-AD0967613B72}</Project>
+      <Name>HeuristicLab.Charting</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Permutation\HeuristicLab.Permutation.csproj">
+      <Project>{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}</Project>
+      <Name>HeuristicLab.Permutation</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="TSPTourView.resx">
+      <DependentUpon>TSPTourView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="TSPInjectorView.resx">
+      <DependentUpon>TSPInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/HeuristicLabRoutingTSPPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/HeuristicLabRoutingTSPPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/HeuristicLabRoutingTSPPlugin.cs	(revision 1270)
@@ -0,0 +1,40 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Routing.TSP plugin
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Routing.TSP-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Routing.TSP-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Permutation-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Charting-3.2")]
+  public class HeuristicLabRoutingTSPPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/PathTSPEvaluatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/PathTSPEvaluatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/PathTSPEvaluatorBase.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Permutation;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Base class for TSP path evaluation, based on length calculation.
+  /// </summary>
+  public abstract class PathTSPEvaluatorBase : SingleObjectiveEvaluatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="PathTSPEvaluatorBase"/> with two variable infos
+    /// (<c>Coordinates</c> and <c>Permutation</c>).
+    /// </summary>
+    public PathTSPEvaluatorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Coordinates", "City coordinates", typeof(DoubleMatrixData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Permutation", "Permutation representing a TSP solution in path encoding", typeof(Permutation.Permutation), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Calculates the length of a whole path of the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to evaluate the path.</param>
+    /// <returns>The calculated length.</returns>
+    protected sealed override double Evaluate(IScope scope) {
+      double[,] coordinates = GetVariableValue<DoubleMatrixData>("Coordinates", scope, true).Data;
+      int[] perm = GetVariableValue<Permutation.Permutation>("Permutation", scope, false).Data;
+      double length = 0;
+
+      for (int i = 0; i < perm.Length - 1; i++)
+        length += CalculateDistance(coordinates[perm[i], 0],
+                                    coordinates[perm[i], 1],
+                                    coordinates[perm[i + 1], 0],
+                                    coordinates[perm[i + 1], 1]);
+      length += CalculateDistance(coordinates[perm[perm.Length - 1], 0],
+                                  coordinates[perm[perm.Length - 1], 1],
+                                  coordinates[perm[0], 0],
+                                  coordinates[perm[0], 1]);
+      return length;
+    }
+
+    /// <summary>
+    /// Calculates the distance between two given points.
+    /// </summary>
+    /// <param name="x1">The x coordinate of point 1.</param>
+    /// <param name="y1">The y coordinate of point 1.</param>
+    /// <param name="x2">The x coordinate of point 2.</param>
+    /// <param name="y2">The y coordinate of point 2.</param>
+    /// <returns>The calculated distance.</returns>
+    protected abstract double CalculateDistance(double x1, double y1, double x2, double y2);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Routing.TSP")]
+[assembly: AssemblyDescription("HeuristicLab Traveling Salesman Problem classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("3c4c7e0d-ad0b-4e9b-8182-cd7498c7e55d")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/RoundedEuclideanPathTSPEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/RoundedEuclideanPathTSPEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/RoundedEuclideanPathTSPEvaluator.cs	(revision 1270)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Permutation;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Evaluates the TSP path by using the euclidean distance between two points.
+  /// </summary>
+  public class RoundedEuclideanPathTSPEvaluator : PathTSPEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Calculates the distance between two points by using the euclidean distance.
+    /// </summary>
+    /// <param name="x1">The x coordinate of point 1.</param>
+    /// <param name="y1">The y coordinate of point 1.</param>
+    /// <param name="x2">The x coordinate of point 2.</param>
+    /// <param name="y2">The y coordinate of point 2.</param>
+    /// <returns>The euclidean distance between the two points.</returns>
+    protected override double CalculateDistance(double x1, double y1, double x2, double y2) {
+      return Math.Round(Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPDistanceMatrixInjectorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPDistanceMatrixInjectorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPDistanceMatrixInjectorBase.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Base class to inject the calculated distance matrix of the TSP path into the current scope.
+  /// </summary>
+  public abstract class TSPDistanceMatrixInjectorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPDistanceMatrixInjectorBase"/> with three variable infos
+    /// (<c>Cities</c>, <c>Coordinates</c> and <c>DistanceMatrix</c>).
+    /// </summary>
+    public TSPDistanceMatrixInjectorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Cities", "Number of cities", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Coordinates", "City coordinates", typeof(DoubleMatrixData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("DistanceMatrix", "Distance matrix containing all distances between cities", typeof(DoubleMatrixData), VariableKind.New));
+    }
+
+    /// <summary>
+    /// Generates a distance matrix with the distances between all cities in the current path.
+    /// </summary>
+    /// <param name="scope">The current scope with the path.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      int cities = GetVariableValue<IntData>("Cities", scope, true).Data;
+      double[,] coordinates = GetVariableValue<DoubleMatrixData>("Coordinates", scope, true).Data;
+      double[,] distanceMatrix = new double[cities, cities];
+
+      for (int i = 0; i < cities; i++) {
+        for (int j = 0; j < cities; j++) {
+          distanceMatrix[i, j] = CalculateDistance(coordinates[i, 0],
+                                                   coordinates[i, 1],
+                                                   coordinates[j, 0],
+                                                   coordinates[j, 1]);
+        }
+      }
+      scope.AddVariable(new Variable(scope.TranslateName("DistanceMatrix"), new DoubleMatrixData(distanceMatrix)));
+
+      return null;
+    }
+
+    /// <summary>
+    /// Calculates the distance between two points in the path.
+    /// </summary>
+    /// <param name="x1">The x coordinate of point 1.</param>
+    /// <param name="y1">The y coordinate of point 1.</param>
+    /// <param name="x2">The x coordinate of point 2.</param>
+    /// <param name="y2">The y coordinate of point 2.</param>
+    /// <returns>The calculated distance.</returns>
+    protected abstract double CalculateDistance(double x1, double y1, double x2, double y2);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjector.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Injects a new TSP in a given scope with all its needed variables....
+  /// </summary>
+  public class TSPInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPInjector"/> with four variable infos 
+    /// (<c>Maximization</c>, <c>Cities</c>, <c>Coordinates</c> and <c>BestKnownQuality</c>).
+    /// </summary>
+    public TSPInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("Maximization", "Set to false as TSP is a minimization problem", typeof(BoolData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("Cities", "Number of cities", typeof(IntData), VariableKind.New));
+      AddVariable(new Variable("Cities", new IntData(0)));
+      AddVariableInfo(new VariableInfo("Coordinates", "City coordinates", typeof(DoubleMatrixData), VariableKind.New));
+      AddVariable(new Variable("Coordinates", new DoubleMatrixData(new double[0,0])));
+      AddVariableInfo(new VariableInfo("BestKnownQuality", "Quality of best known solution", typeof(DoubleData), VariableKind.New));
+      AddVariable(new Variable("InjectBestKnownQuality", new BoolData(false)));
+      AddVariable(new Variable("BestKnownQuality", new DoubleData(0)));
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="TSPInjectorView"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created view as <see cref="TSPInjectorView"/>.</returns>
+    public override IView CreateView() {
+      return new TSPInjectorView(this);
+    }
+
+    /// <summary>
+    /// Adds a new TSP to the given <paramref name="scope"/>, through adding the needed variables.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the variables.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      scope.AddVariable(new Variable(scope.TranslateName("Maximization"), new BoolData(false)));
+      scope.AddVariable(new Variable(scope.TranslateName("Cities"), (IItem)GetVariable("Cities").Value.Clone()));
+      scope.AddVariable(new Variable(scope.TranslateName("Coordinates"), (IItem)GetVariable("Coordinates").Value.Clone()));
+      if (GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data)
+        scope.AddVariable(new Variable(scope.TranslateName("BestKnownQuality"), (IItem)GetVariable("BestKnownQuality").Value.Clone()));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,248 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Routing.TSP {
+  partial class TSPInjectorView {
+    /// <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.citiesLabel = new System.Windows.Forms.Label();
+      this.bestKnownQualityTextBox = new System.Windows.Forms.TextBox();
+      this.bestKnownQualityAvailableCheckBox = new System.Windows.Forms.CheckBox();
+      this.citiesTextBox = new System.Windows.Forms.TextBox();
+      this.importInstanceButton = new System.Windows.Forms.Button();
+      this.bestKnownQualityLabel = new System.Windows.Forms.Label();
+      this.bestKnownQualityAvailableLabel = new System.Windows.Forms.Label();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.dataTabPage = new System.Windows.Forms.TabPage();
+      this.variableInfosTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseVariableInfosView = new HeuristicLab.Core.OperatorBaseVariableInfosView();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
+      this.tabControl.SuspendLayout();
+      this.dataTabPage.SuspendLayout();
+      this.variableInfosTabPage.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // citiesLabel
+      // 
+      this.citiesLabel.Anchor = System.Windows.Forms.AnchorStyles.Left;
+      this.citiesLabel.AutoSize = true;
+      this.citiesLabel.Location = new System.Drawing.Point(6, 36);
+      this.citiesLabel.Name = "citiesLabel";
+      this.citiesLabel.Size = new System.Drawing.Size(35, 13);
+      this.citiesLabel.TabIndex = 0;
+      this.citiesLabel.Text = "&Cities:";
+      // 
+      // bestKnownQualityTextBox
+      // 
+      this.bestKnownQualityTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.bestKnownQualityTextBox.Location = new System.Drawing.Point(166, 79);
+      this.bestKnownQualityTextBox.Name = "bestKnownQualityTextBox";
+      this.bestKnownQualityTextBox.Size = new System.Drawing.Size(96, 20);
+      this.bestKnownQualityTextBox.TabIndex = 5;
+      this.bestKnownQualityTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.bestKnownQualityTextBox_Validating);
+      // 
+      // bestKnownQualityAvailableCheckBox
+      // 
+      this.bestKnownQualityAvailableCheckBox.Anchor = System.Windows.Forms.AnchorStyles.Left;
+      this.bestKnownQualityAvailableCheckBox.AutoSize = true;
+      this.bestKnownQualityAvailableCheckBox.Location = new System.Drawing.Point(166, 59);
+      this.bestKnownQualityAvailableCheckBox.Name = "bestKnownQualityAvailableCheckBox";
+      this.bestKnownQualityAvailableCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.bestKnownQualityAvailableCheckBox.TabIndex = 3;
+      this.bestKnownQualityAvailableCheckBox.UseVisualStyleBackColor = true;
+      this.bestKnownQualityAvailableCheckBox.CheckedChanged += new System.EventHandler(this.bestKnownQualityAvailableCheckBox_CheckedChanged);
+      // 
+      // citiesTextBox
+      // 
+      this.citiesTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.citiesTextBox.Location = new System.Drawing.Point(166, 33);
+      this.citiesTextBox.Name = "citiesTextBox";
+      this.citiesTextBox.ReadOnly = true;
+      this.citiesTextBox.Size = new System.Drawing.Size(96, 20);
+      this.citiesTextBox.TabIndex = 1;
+      // 
+      // importInstanceButton
+      // 
+      this.importInstanceButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
+      this.importInstanceButton.Location = new System.Drawing.Point(6, 105);
+      this.importInstanceButton.Name = "importInstanceButton";
+      this.importInstanceButton.Size = new System.Drawing.Size(256, 21);
+      this.importInstanceButton.TabIndex = 6;
+      this.importInstanceButton.Text = "&Import Instance from TSPLib";
+      this.importInstanceButton.UseVisualStyleBackColor = true;
+      this.importInstanceButton.Click += new System.EventHandler(this.importInstanceButton_Click);
+      // 
+      // bestKnownQualityLabel
+      // 
+      this.bestKnownQualityLabel.Anchor = System.Windows.Forms.AnchorStyles.Left;
+      this.bestKnownQualityLabel.AutoSize = true;
+      this.bestKnownQualityLabel.Location = new System.Drawing.Point(6, 82);
+      this.bestKnownQualityLabel.Name = "bestKnownQualityLabel";
+      this.bestKnownQualityLabel.Size = new System.Drawing.Size(102, 13);
+      this.bestKnownQualityLabel.TabIndex = 4;
+      this.bestKnownQualityLabel.Text = "&Best Known Quality:";
+      // 
+      // bestKnownQualityAvailableLabel
+      // 
+      this.bestKnownQualityAvailableLabel.Anchor = System.Windows.Forms.AnchorStyles.Left;
+      this.bestKnownQualityAvailableLabel.AutoSize = true;
+      this.bestKnownQualityAvailableLabel.Location = new System.Drawing.Point(6, 59);
+      this.bestKnownQualityAvailableLabel.Name = "bestKnownQualityAvailableLabel";
+      this.bestKnownQualityAvailableLabel.Size = new System.Drawing.Size(148, 13);
+      this.bestKnownQualityAvailableLabel.TabIndex = 2;
+      this.bestKnownQualityAvailableLabel.Text = "Best Known Quality &Available:";
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "tsp";
+      this.openFileDialog.FileName = "tsp";
+      this.openFileDialog.Filter = "TSPLib files|*.tsp|All files|*.*";
+      this.openFileDialog.Title = "Import TSPLib File";
+      // 
+      // tabControl
+      // 
+      this.tabControl.Controls.Add(this.dataTabPage);
+      this.tabControl.Controls.Add(this.variableInfosTabPage);
+      this.tabControl.Controls.Add(this.descriptionTabPage);
+      this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(276, 184);
+      this.tabControl.TabIndex = 0;
+      // 
+      // dataTabPage
+      // 
+      this.dataTabPage.Controls.Add(this.citiesLabel);
+      this.dataTabPage.Controls.Add(this.bestKnownQualityAvailableLabel);
+      this.dataTabPage.Controls.Add(this.bestKnownQualityTextBox);
+      this.dataTabPage.Controls.Add(this.bestKnownQualityLabel);
+      this.dataTabPage.Controls.Add(this.bestKnownQualityAvailableCheckBox);
+      this.dataTabPage.Controls.Add(this.importInstanceButton);
+      this.dataTabPage.Controls.Add(this.citiesTextBox);
+      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(268, 158);
+      this.dataTabPage.TabIndex = 0;
+      this.dataTabPage.Text = "TSP Data";
+      this.dataTabPage.UseVisualStyleBackColor = true;
+      // 
+      // variableInfosTabPage
+      // 
+      this.variableInfosTabPage.Controls.Add(this.operatorBaseVariableInfosView);
+      this.variableInfosTabPage.Location = new System.Drawing.Point(4, 22);
+      this.variableInfosTabPage.Name = "variableInfosTabPage";
+      this.variableInfosTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.variableInfosTabPage.Size = new System.Drawing.Size(268, 158);
+      this.variableInfosTabPage.TabIndex = 1;
+      this.variableInfosTabPage.Text = "Variable Infos";
+      this.variableInfosTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseVariableInfosView
+      // 
+      this.operatorBaseVariableInfosView.Caption = "Operator";
+      this.operatorBaseVariableInfosView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseVariableInfosView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseVariableInfosView.Name = "operatorBaseVariableInfosView";
+      this.operatorBaseVariableInfosView.Operator = null;
+      this.operatorBaseVariableInfosView.Size = new System.Drawing.Size(262, 152);
+      this.operatorBaseVariableInfosView.TabIndex = 0;
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(268, 158);
+      this.descriptionTabPage.TabIndex = 2;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseDescriptionView
+      // 
+      this.operatorBaseDescriptionView.Caption = "Operator";
+      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
+      this.operatorBaseDescriptionView.Operator = null;
+      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(262, 152);
+      this.operatorBaseDescriptionView.TabIndex = 0;
+      // 
+      // TSPInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Name = "TSPInjectorView";
+      this.Size = new System.Drawing.Size(276, 184);
+      this.tabControl.ResumeLayout(false);
+      this.dataTabPage.ResumeLayout(false);
+      this.dataTabPage.PerformLayout();
+      this.variableInfosTabPage.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label citiesLabel;
+    private System.Windows.Forms.TextBox bestKnownQualityTextBox;
+    private System.Windows.Forms.CheckBox bestKnownQualityAvailableCheckBox;
+    private System.Windows.Forms.TextBox citiesTextBox;
+    private System.Windows.Forms.Button importInstanceButton;
+    private System.Windows.Forms.Label bestKnownQualityLabel;
+    private System.Windows.Forms.Label bestKnownQualityAvailableLabel;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage dataTabPage;
+    private System.Windows.Forms.TabPage variableInfosTabPage;
+    private HeuristicLab.Core.OperatorBaseVariableInfosView operatorBaseVariableInfosView;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private HeuristicLab.Core.OperatorBaseDescriptionView operatorBaseDescriptionView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.cs	(revision 1270)
@@ -0,0 +1,153 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Class to represent a <see cref="TSPInjector"/> visually.
+  /// </summary>
+  public partial class TSPInjectorView : ViewBase {
+    /// <summary>
+    /// Gets or set the <see cref="TSPInjector"/> to represent visually.
+    /// </summary>        
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public TSPInjector TSPInjector {
+      get { return (TSPInjector)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPInjectorView"/>.
+    /// </summary>
+    public TSPInjectorView() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPInjectorView"/> with the given 
+    /// <paramref name="tspInjector"/>.
+    /// </summary>
+    /// <param name="tspInjector">The <see cref="TSPInjector"/> to display.</param>
+    public TSPInjectorView(TSPInjector tspInjector)
+      : this() {
+      TSPInjector = tspInjector;
+    }
+
+    /// <summary>
+    /// Removes the event handlers in all children.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      operatorBaseVariableInfosView.Operator = null;
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers in all children.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      operatorBaseVariableInfosView.Operator = TSPInjector;
+      operatorBaseDescriptionView.Operator = TSPInjector;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (TSPInjector == null) {
+        citiesTextBox.Text = "-";
+        bestKnownQualityAvailableCheckBox.Checked = false;
+        bestKnownQualityAvailableCheckBox.Enabled = false;
+        bestKnownQualityTextBox.Text = "-";
+        bestKnownQualityTextBox.Enabled = false;
+        importInstanceButton.Enabled = false;
+      } else {
+        citiesTextBox.Text = TSPInjector.GetVariable("Cities").Value.ToString();
+        bestKnownQualityAvailableCheckBox.Checked = TSPInjector.GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data;
+        bestKnownQualityAvailableCheckBox.Enabled = true;
+        if (bestKnownQualityAvailableCheckBox.Checked) {
+          bestKnownQualityTextBox.Text = TSPInjector.GetVariable("BestKnownQuality").Value.ToString();
+          bestKnownQualityTextBox.Enabled = true;
+        } else {
+          bestKnownQualityTextBox.Text = "-";
+          bestKnownQualityTextBox.Enabled = false;
+        }
+        importInstanceButton.Enabled = true;
+      }
+    }
+
+    private void bestKnownQualityAvailableCheckBox_CheckedChanged(object sender, EventArgs e) {
+      TSPInjector.GetVariable("InjectBestKnownQuality").GetValue<BoolData>().Data = bestKnownQualityAvailableCheckBox.Checked;
+      if (bestKnownQualityAvailableCheckBox.Checked) {
+        bestKnownQualityTextBox.Text = TSPInjector.GetVariable("BestKnownQuality").Value.ToString();
+        bestKnownQualityTextBox.Enabled = true;
+      } else {
+        bestKnownQualityTextBox.Text = "-";
+        bestKnownQualityTextBox.Enabled = false;
+      }
+    }
+
+    private void bestKnownQualityTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        TSPInjector.GetVariable("BestKnownQuality").GetValue<DoubleData>().Data = double.Parse(bestKnownQualityTextBox.Text);
+      }
+      catch (Exception) {
+        bestKnownQualityTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void importInstanceButton_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        TSPParser parser = null;
+        bool success = false;
+        try {
+          parser = new TSPParser(openFileDialog.FileName);
+          parser.Parse();
+          success = true;
+        }
+        catch (Exception ex) {
+          MessageBox.Show(this, ex.Message, ex.GetType().Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        if (success) {
+          TSPInjector.GetVariable("Cities").Value = new IntData(parser.Vertices.GetLength(0));
+          TSPInjector.GetVariable("Coordinates").Value = new DoubleMatrixData(parser.Vertices);
+          Refresh();
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPInjectorView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPParser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPParser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPParser.cs	(revision 1270)
@@ -0,0 +1,210 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Globalization;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Parses a *.tsp file and extracts its information about a TSP.
+  /// </summary>
+  public class TSPParser {
+    private const int EOF = 0;
+    private const int NAME = 1;
+    private const int TYPE = 2;
+    private const int DIM = 3;
+    private const int WEIGHTTYPE = 4;
+    private const int NODETYPE = 5;
+    private const int NODESECTION = 6;
+
+    private StreamReader source;
+
+    private string myName;
+    /// <summary>
+    /// Gets the name of the parsed TSP.
+    /// </summary>
+    public string Name {
+      get { return myName; }
+    }
+    private double[,] myVertices;
+    /// <summary>
+    /// Gets the vertices of the parsed TSP.
+    /// </summary>
+    public double[,] Vertices {
+      get { return myVertices; }
+    }
+    private int myWeightType;
+    /// <summary>
+    /// Gets the weight type of the parsed TSP.
+    /// </summary>
+    public int WeightType {
+      get { return myWeightType; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPParser"/> with the given <paramref name="path"/>.
+    /// </summary>
+    /// <exception cref="ArgumentException">Thrown when the input file name is not in TSP format (*.tsp)
+    /// </exception>
+    /// <param name="path">The path where the TSP is stored.</param>
+    public TSPParser(String path) {
+      if (!path.EndsWith(".tsp"))
+        throw new ArgumentException("Input file name has to be in TSP format (*.tsp)");
+
+      source = new StreamReader(path);
+      myName = path;
+      myVertices = null;
+      myWeightType = -1;
+    }
+
+    /// <summary>
+    /// Reads the TSP file and parses the elements.
+    /// </summary>
+    /// <exception cref="InvalidDataException">Thrown when file contains unknown (edge) types.</exception>
+    public void Parse() {
+      int section = -1;
+      string str = null;
+      bool typeIsChecked = false;
+      bool weightTypeIsChecked = false;
+
+      do {
+        str = source.ReadLine();
+        section = GetSection(str);
+
+        if (section != -1) {
+          switch (section) {
+            case NAME:
+              ReadName(str);
+              break;
+            case TYPE:
+              CheckType(str);
+              typeIsChecked = true;
+              break;
+            case DIM:
+              InitVerticesArray(str);
+              break;
+            case WEIGHTTYPE:
+              ReadWeightType(str);
+              weightTypeIsChecked = true;
+              break;
+            case NODETYPE:
+              CheckNodeType(str);
+              break;
+            case NODESECTION:
+              ReadVertices();
+              break;
+          }
+        }
+      } while (!((section == EOF) || (str == null)));
+
+      if (!(typeIsChecked && weightTypeIsChecked))
+        throw new InvalidDataException("File contains unknown (edge) types");
+    }
+
+    private int GetSection(string str) {
+      if (str == null)
+        return EOF;
+
+      string[] tokens = str.Split(new string[] { ":" }, StringSplitOptions.None);
+      if (tokens.Length == 0)
+        return -1;
+
+      string token = tokens[0].Trim();
+      if (token.Equals("eof", StringComparison.OrdinalIgnoreCase))
+        return EOF;
+      if (token.Equals("name", StringComparison.OrdinalIgnoreCase))
+        return NAME;
+      if (token.Equals("type", StringComparison.OrdinalIgnoreCase))
+        return TYPE;
+      if (token.Equals("dimension", StringComparison.OrdinalIgnoreCase))
+        return DIM;
+      if (token.Equals("edge_weight_type", StringComparison.OrdinalIgnoreCase))
+        return WEIGHTTYPE;
+      if (token.Equals("node_coord_type", StringComparison.OrdinalIgnoreCase))
+        return NODETYPE;
+      if (token.Equals("node_coord_section", StringComparison.OrdinalIgnoreCase))
+        return NODESECTION;
+
+      return -1;
+    }
+
+    private void ReadName(string str) {
+      string[] tokens = str.Split(new string[] { ":" }, StringSplitOptions.None);
+      myName = tokens[tokens.Length - 1].Trim();
+    }
+
+    private void CheckType(string str) {
+      string[] tokens = str.Split(new string[] { ":" }, StringSplitOptions.None);
+
+      string type = tokens[tokens.Length - 1].Trim();
+      if (!type.Equals("tsp", StringComparison.OrdinalIgnoreCase))
+        throw new InvalidDataException("Input data format is not \"TSP\"");
+    }
+
+    private void InitVerticesArray(string str) {
+      string[] tokens = str.Split(new string[] { ":" }, StringSplitOptions.None);
+      string dimension = tokens[tokens.Length - 1].Trim();
+
+      int dim = Int32.Parse(dimension);
+      myVertices = new double[dim, 2];
+    }
+
+    private void ReadWeightType(string str) {
+      string[] tokens = str.Split(new string[] { ":" }, StringSplitOptions.None);
+      string type = tokens[tokens.Length - 1].Trim();
+
+      if (type.Equals("euc_2d", StringComparison.OrdinalIgnoreCase))
+        myWeightType = 0;
+      else if (type.Equals("geo", StringComparison.OrdinalIgnoreCase))
+        myWeightType = 1;
+      else
+        throw new InvalidDataException("Unsupported type of edge weights");
+    }
+
+    private void CheckNodeType(string str) {
+      string[] tokens = str.Split(new string[] { ":" }, StringSplitOptions.None);
+      string type = tokens[tokens.Length - 1].Trim();
+
+      if (!type.Equals("twod_coords", StringComparison.OrdinalIgnoreCase))
+        throw new InvalidDataException("Unsupported node type");
+    }
+
+    private void ReadVertices() {
+      if (myVertices == null)
+        throw new InvalidDataException("Dimension not found");
+
+      for (int i = 0; i < (myVertices.Length / 2); i++) {
+        string str = source.ReadLine();
+        string[] tokens = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
+
+        if (tokens.Length != 3)
+          throw new InvalidDataException("Invalid node format");
+
+        CultureInfo culture = new CultureInfo("en-US");
+        myVertices[i, 0] = Double.Parse(tokens[1], culture.NumberFormat);
+        myVertices[i, 1] = Double.Parse(tokens[2], culture.NumberFormat);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPRoundedEuclideanDistanceMatrixInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPRoundedEuclideanDistanceMatrixInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPRoundedEuclideanDistanceMatrixInjector.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Injects a distance matrix with euclidean distances of a TSP path into the current scope.
+  /// </summary>
+  public class TSPRoundedEuclideanDistanceMatrixInjector : TSPDistanceMatrixInjectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Calculates the distance between two points by using the euclidean distance.
+    /// </summary>
+    /// <param name="x1">The x coordinate of point 1.</param>
+    /// <param name="y1">The y coordinate of point 1.</param>
+    /// <param name="x2">The x coordinate of point 2.</param>
+    /// <param name="y2">The y coordinate of point 2.</param>
+    /// <returns>The euclidean distance between the two points.</returns>
+    protected override double CalculateDistance(double x1, double y1, double x2, double y2) {
+      return Math.Round(Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTour.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTour.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTour.cs	(revision 1270)
@@ -0,0 +1,147 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Permutation;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Represent the tour of a TSP.
+  /// </summary>
+  public class TSPTour : ItemBase, IVisualizationItem {
+    private DoubleMatrixData myCoordinates;
+    /// <summary>
+    /// Gets or sets the coordinates of the current instance.
+    /// </summary>
+    public DoubleMatrixData Coordinates {
+      get { return myCoordinates; }
+      set { myCoordinates = value; }
+    }
+    private Permutation.Permutation myTour;
+    /// <summary>
+    /// Gets or sets the current permutation/tour of the current instance.
+    /// </summary>
+    public Permutation.Permutation Tour {
+      get { return myTour; }
+      set { myTour = value; }
+    }
+
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPTour"/>.
+    /// </summary>
+    public TSPTour() { }
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPTour"/> with the given <paramref name="coordinates"/>
+    /// and the given <paramref name="tour"/>.
+    /// </summary>
+    /// <param name="coordinates">The coordinates of the TSP.</param>
+    /// <param name="tour">The tour the current instance should represent.</param>
+    public TSPTour(DoubleMatrixData coordinates, Permutation.Permutation tour) {
+      myCoordinates = coordinates;
+      myTour = tour;
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Uses <see cref="Auxiliary.Clone"/> method of class <see cref="Auxiliary"/> to clone
+    /// the coordinates.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="TSPTour"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      TSPTour clone = (TSPTour)base.Clone(clonedObjects);
+      clone.myCoordinates = (DoubleMatrixData)Auxiliary.Clone(Coordinates, clonedObjects);
+      clone.myTour = Tour;
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="TSPTourView"/> to display the current instance.
+    /// </summary>
+    /// <returns>The created view as <see cref="TSPTourView"/>.</returns>
+    public override IView CreateView() {
+      return new TSPTourView(this);
+    }
+
+    /// <summary>
+    /// Occurs when the coordinates of the current instance have been changed.
+    /// </summary>
+    public event EventHandler CoordinatesChanged;
+    /// <summary>
+    /// Fires a new <c>CoordinatesChanged</c> event.
+    /// </summary>
+    protected virtual void OnCoordinatesChanged() {
+      if (CoordinatesChanged != null)
+        CoordinatesChanged(this, new EventArgs());
+    }
+    /// <summary>
+    /// Occurs when the tour of the current instance has been changed.
+    /// </summary>
+    public event EventHandler TourChanged;
+    /// <summary>
+    /// Fires a new <c>TourChanged</c> event.
+    /// </summary>
+    protected virtual void OnTourChanged() {
+      if (TourChanged != null)
+        TourChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.GetXmlNode"/> of base class <see cref="ItemBase"/>. <br/>
+    /// The coordinates and the tour are saved as a child node with the tag names <c>Coordinates</c> and 
+    /// <c>Tour</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where to save the data.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Coordinates", Coordinates, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Tour", Tour, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted TSP tour from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="StorableBase.Populate"/> of base class 
+    /// <see cref="ItemBase"/>.<br/>
+    /// The coordinates and the tour must be saved as child nodes with the tag names <c>Coordinates</c>
+    /// and <c>Tour</c> (see <see cref="GetXmlNode"/>).</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the TSP tour is saved.</param>
+    /// <param name="restoredObjects">A dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myCoordinates = (DoubleMatrixData)PersistenceManager.Restore(node.SelectSingleNode("Coordinates"), restoredObjects);
+      myTour = (Permutation.Permutation)PersistenceManager.Restore(node.SelectSingleNode("Tour"), restoredObjects);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourInjector.cs	(revision 1270)
@@ -0,0 +1,74 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Permutation;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Injects a new TSP tour in a given scope with all its neccessary variables.
+  /// </summary>
+  public class TSPTourInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPTourInjector"/> with three variable infos 
+    /// (<c>Coordinates</c>, <c>Permutation</c> and <c>Tour</c>).
+    /// </summary>
+    public TSPTourInjector() {
+      AddVariableInfo(new VariableInfo("Coordinates", "City coordinates", typeof(DoubleMatrixData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Permutation", "Permutation representing a TSP solution in path encoding", typeof(Permutation.Permutation), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Tour", "Object representing a whole TSP tour", typeof(TSPTour), VariableKind.New | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Adds a new <see cref="TSPTour"/> to the given <paramref name="scope"/> with all 
+    /// its neccessary variables.
+    /// </summary>
+    /// <param name="scope">The current scope where to inject the TSP tour.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      DoubleMatrixData coordinates = GetVariableValue<DoubleMatrixData>("Coordinates", scope, true);
+      Permutation.Permutation permutation = GetVariableValue<Permutation.Permutation>("Permutation", scope, false);
+      TSPTour tour = GetVariableValue<TSPTour>("Tour", scope, false, false);
+      if (tour == null) {
+        tour = new TSPTour(coordinates, permutation);
+        IVariableInfo info = GetVariableInfo("Tour");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, tour));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), tour));
+      } else {
+        tour.Coordinates = coordinates;
+        tour.Tour = permutation;
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.Designer.cs	(revision 1270)
@@ -0,0 +1,78 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Routing.TSP {
+  partial class TSPTourView {
+    /// <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.chartControl = new HeuristicLab.Charting.ChartControl();
+      this.SuspendLayout();
+      // 
+      // chartControl
+      // 
+      this.chartControl.BackColor = System.Drawing.SystemColors.Control;
+      this.chartControl.Chart = null;
+      this.chartControl.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.chartControl.Location = new System.Drawing.Point(0, 0);
+      this.chartControl.Name = "chartControl";
+      this.chartControl.ScaleOnResize = true;
+      this.chartControl.Size = new System.Drawing.Size(160, 147);
+      this.chartControl.TabIndex = 0;
+      // 
+      // TSPTourScopeView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chartControl);
+      this.Name = "TSPTourScopeView";
+      this.Size = new System.Drawing.Size(160, 147);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Charting.ChartControl chartControl;
+
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.cs	(revision 1270)
@@ -0,0 +1,141 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Permutation;
+using HeuristicLab.Charting;
+
+namespace HeuristicLab.Routing.TSP {
+  /// <summary>
+  /// Class for the visual representation of a <see cref="TSPTour"/>.
+  /// </summary>
+  public partial class TSPTourView : ViewBase {
+    /// <summary>
+    /// Gets or sets the <see cref="TSPTour"/> to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public TSPTour TSPTour {
+      get { return (TSPTour)base.Item; }
+      set { base.Item = value; }
+    }
+
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPTourView"/> with caption "TSP Tour View".
+    /// </summary>
+    public TSPTourView() {
+      InitializeComponent();
+      Caption = "TSP Tour View";
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="TSPTourView"/> with the given <paramref name="tspTour"/>.
+    /// </summary>
+    /// <param name="tspTour">The tour to display.</param>
+    public TSPTourView(TSPTour tspTour)
+      : this() {
+      TSPTour = tspTour;
+    }
+
+
+    /// <summary>
+    /// Removes all event handlers from the underlying <see cref="TSPTour"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.</remarks> 
+    protected override void RemoveItemEvents() {
+      TSPTour.CoordinatesChanged -= new EventHandler(TSPTour_CoordinatesChanged);
+      TSPTour.TourChanged -= new EventHandler(TSPTour_TourChanged);
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds event handlers to the underlying <see cref="TSPTour"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      TSPTour.CoordinatesChanged += new EventHandler(TSPTour_CoordinatesChanged);
+      TSPTour.TourChanged += new EventHandler(TSPTour_TourChanged);
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      Chart chart = new Chart(0, 0, 10, 10);
+      chartControl.ScaleOnResize = false;
+
+      if ((TSPTour.Coordinates != null) && (TSPTour.Tour != null)) {
+        chart.UpdateEnabled = false;
+
+        double[,] coords = TSPTour.Coordinates.Data;
+        int[] tour = TSPTour.Tour.Data;
+
+        for (int i = 0; i < tour.Length - 1; i++)
+          chart.Group.Add(new Line(chart, coords[tour[i], 0], coords[tour[i], 1],
+                                          coords[tour[i + 1], 0], coords[tour[i + 1], 1], Pens.Black));
+        chart.Group.Add(new Line(chart, coords[tour[tour.Length - 1], 0], coords[tour[tour.Length - 1], 1],
+                                        coords[tour[0], 0], coords[tour[0], 1], Pens.Black));
+
+        for (int i = 0; i < coords.GetLength(0); i++) {
+          FixedSizeCircle circle = new FixedSizeCircle(chart, coords[i, 0], coords[i, 1], 8, Pens.Black, Brushes.Blue);
+          circle.ToolTipText = "(" + coords[i, 0].ToString() + " ; " + coords[i, 1].ToString() + ")";
+          chart.Group.Add(circle);
+        }
+
+        if (coords.GetLength(0) > 0) {
+          PointD min = new PointD(coords[0, 0], coords[0, 1]);
+          PointD max = new PointD(coords[0, 0], coords[0, 1]);
+          for (int i = 0; i < coords.GetLength(0); i++) {
+            if (coords[i, 0] < min.X) min.X = coords[i, 0];
+            if (coords[i, 1] < min.Y) min.Y = coords[i, 1];
+            if (coords[i, 0] > max.X) max.X = coords[i, 0];
+            if (coords[i, 1] > max.Y) max.Y = coords[i, 1];
+          }
+          Offset offset = new Offset((max.X - min.X) / 20, (max.Y - min.Y) / 20);
+          min = min - offset;
+          max = max + offset;
+          chart.SetPosition(min, max);
+        }
+        chart.UpdateEnabled = true;
+      }
+      chartControl.Chart = chart;
+    }
+
+    #region TSPTour Events
+    private void TSPTour_TourChanged(object sender, EventArgs e) {
+      Refresh();
+    }
+    private void TSPTour_CoordinatesChanged(object sender, EventArgs e) {
+      Refresh();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/TSPTourView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/ch130.tsp
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/ch130.tsp	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/ch130.tsp	(revision 1270)
@@ -0,0 +1,137 @@
+NAME: ch130
+TYPE: TSP
+COMMENT: 130 city problem (Churritz)
+DIMENSION: 130
+EDGE_WEIGHT_TYPE: EUC_2D
+NODE_COORD_SECTION
+1 334.5909245845 161.7809319139
+2 397.6446634067 262.8165330708
+3 503.8741827107 172.8741151168
+4 444.0479403502 384.6491809647
+5 311.6137146746 2.0091699828
+6 662.8551011379 549.2301263653
+7 40.0979030612 187.2375430791
+8 526.8941409181 215.7079092185
+9 209.1887938487 691.0262291948
+10 683.2674131973 414.2096286906
+11 280.7494438748 5.9206392047
+12 252.7493090080 535.7430385019
+13 698.7850451923 348.4413729766
+14 678.7574678104 410.7256424438
+15 220.0041131179 409.1225812873
+16 355.1528556851 76.3912076444
+17 296.9724227786 313.1312792361
+18 504.5154071733 240.8866564499
+19 224.1079496785 358.4872228907
+20 470.6801296968 309.6259188406
+21 554.2530513223 279.4242466521
+22 567.6332684419 352.7162027273
+23 599.0532671093 361.0948690386
+24 240.5232959211 430.6036007844
+25 32.0825972787 345.8551009775
+26 91.0538736891 148.7213270256
+27 248.2179894723 343.9528017384
+28 488.8909044347 3.6122311393
+29 206.0467939820 437.7639406167
+30 575.8409415632 141.9670960195
+31 282.6089948164 329.4183805862
+32 27.6581484868 424.7684581747
+33 568.5737309870 287.0975660546
+34 269.4638933331 295.9464636385
+35 417.8004856811 341.2596589955
+36 32.1680938737 448.8998721172
+37 561.4775136009 357.3543930067
+38 342.9482167470 492.3321423839
+39 399.6752075383 156.8435035519
+40 571.7371050025 375.7575350833
+41 370.7559842751 151.9060751898
+42 509.7093253204 435.7975189314
+43 177.0206999750 295.6044772584
+44 526.1674198605 409.4859418161
+45 316.5725171854 65.6400108214
+46 469.2908100279 281.9891445025
+47 572.7630641427 373.3208821255
+48 29.5176994283 330.0382309000
+49 454.0082936692 537.2178547659
+50 416.1546762271 227.6133100741
+51 535.2514330806 471.0648643744
+52 265.4455533675 684.9987192464
+53 478.0542110167 509.6452028741
+54 370.4781203413 332.5390063041
+55 598.3479202004 446.8693279856
+56 201.1521139175 649.0260268945
+57 193.6925360026 680.2322840744
+58 448.5792598859 532.7934059740
+59 603.2853485624 134.4006473609
+60 543.0102490781 481.5168231148
+61 214.5750793346 43.6460117543
+62 426.3501451825 61.7285415996
+63 89.0447037063 277.1158385868
+64 84.4920100219 31.8474816424
+65 220.0468614154 623.0778103080
+66 688.4613313444 0.4702312726
+67 687.2857531630 373.5346236130
+68 75.4934933967 312.9175377486
+69 63.4170993511 23.7039309674
+70 97.9363495877 211.0910930878
+71 399.5255884970 170.8221968365
+72 456.3167017346 597.1937161677
+73 319.8855102422 626.8396604886
+74 295.9250894897 664.6291554845
+75 288.4868857235 667.7284070537
+76 268.3951858954 52.9010181645
+77 140.4709056068 513.5566720960
+78 689.8079027159 167.5947003748
+79 280.5784506848 458.7533546925
+80 453.3884433554 282.9082328989
+81 213.5704943432 525.8681817779
+82 133.6953004520 677.1757808026
+83 521.1658690522 132.8617086506
+84 30.2657946347 450.0754502986
+85 657.0199585283 39.7772908299
+86 6.9252241961 23.8749241575
+87 252.4286967767 535.1659364856
+88 42.8551682504 63.8232081774
+89 145.8999393902 399.5255884970
+90 638.4885715591 62.6262558472
+91 489.2756391122 665.3131282446
+92 361.2231139311 564.2347787901
+93 519.9475425732 347.9711417040
+94 129.3349741063 435.6692740389
+95 259.7172815016 454.6495181318
+96 676.3421890013 371.0979706551
+97 84.5133841706 183.3260738572
+98 77.7164048671 354.3833863300
+99 335.9802442534 660.6321896676
+100 264.3554717810 377.5743377274
+101 51.6826916855 676.0429509187
+102 692.1376849300 543.8010925819
+103 169.2191356800 547.8194325476
+104 194.0131482339 263.4791316822
+105 415.1928395332 78.9133571973
+106 415.0432204919 479.0801701569
+107 169.8389859939 245.6103433244
+108 525.0987124228 213.5063718969
+109 238.6851191283 33.4932910965
+110 116.2112467718 363.5742702940
+111 16.9283258126 656.5711014044
+112 434.3440768162 92.6996831431
+113 40.5253860363 424.6829615797
+114 530.4849979086 183.8390534273
+115 484.3595848990 49.2460387276
+116 263.6501248722 426.5852608187
+117 450.2891917862 126.3853415784
+118 441.7822805823 299.7724362653
+119 24.2169105375 500.3474481664
+120 503.7886861157 514.6895019799
+121 635.5389390312 200.9811207275
+122 614.5922732529 418.8691931188
+123 21.7161351334 660.9741760476
+124 143.8266469611 92.6996831431
+125 637.7191022040 54.2048412384
+126 566.5645610042 199.9551615873
+127 196.6849168280 221.8209157619
+128 384.9270448985 87.4630166986
+129 178.1107815614 104.6905805938
+130 403.2874386776 205.8971749407
+EOF
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/fl1400.tsp
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/fl1400.tsp	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Routing.TSP/fl1400.tsp	(revision 1270)
@@ -0,0 +1,1407 @@
+NAME: fl1400
+COMMENT: Drilling problem (Reinelt)
+TYPE: TSP
+DIMENSION: 1400
+EDGE_WEIGHT_TYPE: EUC_2D
+NODE_COORD_SECTION
+1 2.10461e+03 1.96835e+03
+2 2.10461e+03 2.32264e+02
+3 2.95591e+02 1.96835e+03
+4 2.95591e+02 2.32264e+02
+5 1.02570e+03 1.97130e+03
+6 1.16167e+03 1.96539e+03
+7 1.19123e+03 1.95949e+03
+8 1.16759e+03 1.95949e+03
+9 1.09664e+03 1.95949e+03
+10 1.10256e+03 1.95358e+03
+11 1.09073e+03 1.95358e+03
+12 1.01979e+03 1.95358e+03
+13 1.23262e+03 1.94177e+03
+14 1.04344e+03 1.94177e+03
+15 1.23853e+03 1.93587e+03
+16 1.16759e+03 1.93587e+03
+17 1.13211e+03 1.93587e+03
+18 1.26809e+03 1.92996e+03
+19 1.24444e+03 1.92996e+03
+20 1.06708e+03 1.92996e+03
+21 1.17941e+03 1.92406e+03
+22 1.04935e+03 1.92406e+03
+23 1.03753e+03 1.92406e+03
+24 1.12620e+03 1.91815e+03
+25 1.09073e+03 1.91815e+03
+26 9.84319e+02 1.91815e+03
+27 1.32720e+03 1.90634e+03
+28 1.03161e+03 1.90634e+03
+29 9.96143e+02 1.90634e+03
+30 1.04935e+03 1.90044e+03
+31 1.18532e+03 1.89453e+03
+32 1.11438e+03 1.89453e+03
+33 1.31538e+03 1.88272e+03
+34 1.29173e+03 1.88272e+03
+35 1.07891e+03 1.88272e+03
+36 1.01388e+03 1.87682e+03
+37 1.73512e+03 1.74691e+03
+38 7.41934e+02 1.74691e+03
+39 1.72921e+03 1.74100e+03
+40 7.36022e+02 1.74100e+03
+41 1.52230e+03 1.72329e+03
+42 5.29108e+02 1.72329e+03
+43 1.18532e+03 1.64652e+03
+44 1.56959e+03 1.52252e+03
+45 5.76403e+02 1.52252e+03
+46 1.14985e+03 1.44575e+03
+47 6.17786e+02 1.44575e+03
+48 1.03161e+03 1.42213e+03
+49 1.10847e+03 1.41622e+03
+50 7.53758e+02 1.41622e+03
+51 1.03161e+03 1.41032e+03
+52 5.94138e+02 1.41032e+03
+53 7.59670e+02 1.39851e+03
+54 6.05962e+02 1.39851e+03
+55 7.53758e+02 1.27450e+03
+56 6.59169e+02 1.25088e+03
+57 1.26809e+03 1.24498e+03
+58 5.94138e+02 1.24498e+03
+59 6.11874e+02 1.22726e+03
+60 1.27991e+03 1.22136e+03
+61 6.59169e+02 1.15640e+03
+62 1.22670e+03 1.00287e+03
+63 1.14985e+03 9.96967e+02
+64 1.61097e+03 9.73347e+02
+65 1.03753e+03 8.02101e+02
+66 1.31538e+03 7.96196e+02
+67 1.11438e+03 7.96196e+02
+68 1.09073e+03 7.96196e+02
+69 1.27400e+03 7.90290e+02
+70 1.13211e+03 7.90290e+02
+71 1.10847e+03 7.90290e+02
+72 1.01388e+03 7.90290e+02
+73 1.26809e+03 7.84386e+02
+74 1.11438e+03 7.84386e+02
+75 1.03161e+03 7.84386e+02
+76 1.66418e+03 7.78481e+02
+77 1.23853e+03 7.78481e+02
+78 1.09664e+03 7.78481e+02
+79 1.04935e+03 7.78481e+02
+80 9.78407e+02 7.78481e+02
+81 1.23262e+03 7.72576e+02
+82 1.18532e+03 7.72576e+02
+83 1.07891e+03 7.72576e+02
+84 1.05526e+03 7.72576e+02
+85 1.01979e+03 7.72576e+02
+86 1.21488e+03 7.66670e+02
+87 1.19123e+03 7.66670e+02
+88 1.16759e+03 7.66670e+02
+89 1.08482e+03 7.66670e+02
+90 1.07300e+03 7.66670e+02
+91 1.23262e+03 7.60765e+02
+92 1.16167e+03 7.60765e+02
+93 1.26218e+03 7.54861e+02
+94 1.25035e+03 7.54861e+02
+95 1.17941e+03 7.54861e+02
+96 1.02570e+03 7.54861e+02
+97 1.26809e+03 7.48955e+02
+98 1.24444e+03 7.48955e+02
+99 1.17350e+03 7.48955e+02
+100 1.13211e+03 7.43050e+02
+101 1.12029e+03 7.43050e+02
+102 1.01979e+03 7.25335e+02
+103 9.96143e+02 7.25335e+02
+104 1.03753e+03 7.19430e+02
+105 1.00205e+03 7.19430e+02
+106 1.17350e+03 5.59994e+02
+107 1.61097e+03 5.48184e+02
+108 1.17350e+03 5.48184e+02
+109 1.22079e+03 5.36374e+02
+110 1.07300e+03 1.96539e+03
+111 1.04935e+03 1.96539e+03
+112 1.13803e+03 1.95949e+03
+113 1.11438e+03 1.95949e+03
+114 1.05526e+03 1.95949e+03
+115 1.73512e+03 1.95358e+03
+116 1.27400e+03 1.95358e+03
+117 1.25035e+03 1.95358e+03
+118 7.41934e+02 1.95358e+03
+119 1.06117e+03 1.94177e+03
+120 1.29173e+03 1.93587e+03
+121 1.21488e+03 1.92996e+03
+122 1.12029e+03 1.92996e+03
+123 1.09073e+03 1.92406e+03
+124 1.20306e+03 1.91815e+03
+125 1.20897e+03 1.91225e+03
+126 1.11438e+03 1.91225e+03
+127 1.22670e+03 1.90634e+03
+128 1.14394e+03 1.90634e+03
+129 1.29173e+03 1.90044e+03
+130 1.26809e+03 1.90044e+03
+131 1.30947e+03 1.89453e+03
+132 1.00205e+03 1.89453e+03
+133 9.78407e+02 1.88272e+03
+134 1.09073e+03 1.87682e+03
+135 1.56959e+03 1.87091e+03
+136 1.52230e+03 1.87091e+03
+137 1.15576e+03 1.87091e+03
+138 5.76403e+02 1.87091e+03
+139 5.29108e+02 1.87091e+03
+140 1.18532e+03 1.86501e+03
+141 1.09073e+03 1.86501e+03
+142 1.72921e+03 1.74691e+03
+143 7.36022e+02 1.74691e+03
+144 2.05436e+03 1.51661e+03
+145 1.16759e+03 1.51661e+03
+146 1.18532e+03 1.48708e+03
+147 3.10371e+02 1.48708e+03
+148 1.18532e+03 1.47528e+03
+149 6.11874e+02 1.42213e+03
+150 6.17786e+02 1.41622e+03
+151 5.40932e+02 1.41032e+03
+152 6.05962e+02 1.39260e+03
+153 5.82315e+02 1.39260e+03
+154 1.14985e+03 1.27450e+03
+155 7.59670e+02 1.27450e+03
+156 5.82315e+02 1.27450e+03
+157 1.03161e+03 1.22726e+03
+158 5.40932e+02 1.22136e+03
+159 1.26809e+03 1.15640e+03
+160 2.05436e+03 1.15050e+03
+161 1.16759e+03 1.15050e+03
+162 1.27991e+03 1.14459e+03
+163 1.18532e+03 1.05011e+03
+164 1.17350e+03 1.00287e+03
+165 1.66418e+03 9.96967e+02
+166 1.17941e+03 9.96967e+02
+167 1.32720e+03 8.02101e+02
+168 1.23262e+03 8.02101e+02
+169 1.09073e+03 8.02101e+02
+170 9.84319e+02 8.02101e+02
+171 1.17941e+03 7.96196e+02
+172 1.16759e+03 7.96196e+02
+173 1.08482e+03 7.96196e+02
+174 1.06117e+03 7.96196e+02
+175 1.23262e+03 7.90290e+02
+176 1.26218e+03 7.84386e+02
+177 1.15576e+03 7.84386e+02
+178 1.13211e+03 7.84386e+02
+179 1.04935e+03 7.84386e+02
+180 1.22079e+03 7.78481e+02
+181 1.13803e+03 7.78481e+02
+182 1.01979e+03 7.78481e+02
+183 1.20306e+03 7.72576e+02
+184 1.14985e+03 7.66670e+02
+185 1.11438e+03 7.66670e+02
+186 1.30947e+03 7.60765e+02
+187 1.14394e+03 7.60765e+02
+188 1.04935e+03 7.60765e+02
+189 1.20897e+03 7.54861e+02
+190 1.18532e+03 7.54861e+02
+191 1.12620e+03 7.54861e+02
+192 1.10256e+03 7.54861e+02
+193 1.09073e+03 7.54861e+02
+194 1.06708e+03 7.54861e+02
+195 1.03753e+03 7.48955e+02
+196 1.04344e+03 7.43050e+02
+197 1.03161e+03 7.43050e+02
+198 1.29173e+03 7.31240e+02
+199 1.23262e+03 7.31240e+02
+200 3.10371e+02 6.01329e+02
+201 1.22966e+03 1.94473e+03
+202 1.09960e+03 1.93292e+03
+203 1.20601e+03 1.92111e+03
+204 9.81363e+02 1.92111e+03
+205 1.14690e+03 1.90930e+03
+206 1.02866e+03 1.90930e+03
+207 1.07595e+03 1.88568e+03
+208 9.81363e+02 1.88568e+03
+209 2.05732e+03 1.51956e+03
+210 9.81363e+02 7.99148e+02
+211 9.81363e+02 7.75528e+02
+212 3.07415e+02 5.98377e+02
+213 1.16463e+03 1.96835e+03
+214 1.07004e+03 1.96835e+03
+215 1.05231e+03 1.96244e+03
+216 1.73217e+03 1.95654e+03
+217 1.27104e+03 1.95654e+03
+218 1.24740e+03 1.95654e+03
+219 1.02275e+03 1.95654e+03
+220 7.38978e+02 1.95654e+03
+221 1.04639e+03 1.94473e+03
+222 1.24740e+03 1.93292e+03
+223 1.16463e+03 1.93292e+03
+224 1.11733e+03 1.93292e+03
+225 1.07004e+03 1.93292e+03
+226 1.09960e+03 1.92701e+03
+227 1.09369e+03 1.92111e+03
+228 1.04639e+03 1.92111e+03
+229 1.22375e+03 1.90930e+03
+230 1.11733e+03 1.90930e+03
+231 9.99099e+02 1.90930e+03
+232 1.29469e+03 1.89748e+03
+233 1.27104e+03 1.89748e+03
+234 1.18828e+03 1.89748e+03
+235 9.99099e+02 1.89748e+03
+236 1.29469e+03 1.88568e+03
+237 1.56664e+03 1.87386e+03
+238 1.51934e+03 1.87386e+03
+239 1.09369e+03 1.87386e+03
+240 5.73447e+02 1.87386e+03
+241 5.26152e+02 1.87386e+03
+242 1.72625e+03 1.74986e+03
+243 7.33066e+02 1.74986e+03
+244 1.18828e+03 1.64947e+03
+245 1.16463e+03 1.51956e+03
+246 3.07415e+02 1.49004e+03
+247 6.08918e+02 1.42508e+03
+248 1.02866e+03 1.41918e+03
+249 6.20742e+02 1.41327e+03
+250 5.97094e+02 1.41327e+03
+251 5.37976e+02 1.41327e+03
+252 6.08918e+02 1.38965e+03
+253 1.15281e+03 1.27155e+03
+254 7.62626e+02 1.27155e+03
+255 7.50802e+02 1.27155e+03
+256 1.27104e+03 1.24793e+03
+257 1.28287e+03 1.22431e+03
+258 1.03457e+03 1.22431e+03
+259 6.56213e+02 1.15345e+03
+260 2.05732e+03 1.14755e+03
+261 1.18828e+03 1.04716e+03
+262 1.17054e+03 1.00583e+03
+263 1.66122e+03 9.99920e+02
+264 1.18237e+03 9.94014e+02
+265 1.61393e+03 9.76300e+02
+266 1.16463e+03 7.99148e+02
+267 1.09369e+03 7.99148e+02
+268 1.08186e+03 7.99148e+02
+269 1.03457e+03 7.99148e+02
+270 1.22966e+03 7.93243e+02
+271 1.27104e+03 7.87338e+02
+272 1.25922e+03 7.87338e+02
+273 1.12916e+03 7.87338e+02
+274 1.10551e+03 7.87338e+02
+275 1.03457e+03 7.87338e+02
+276 1.21784e+03 7.81433e+02
+277 1.05231e+03 7.81433e+02
+278 1.23557e+03 7.75528e+02
+279 1.18828e+03 7.75528e+02
+280 1.09369e+03 7.75528e+02
+281 1.02275e+03 7.75528e+02
+282 1.20601e+03 7.69623e+02
+283 1.07595e+03 7.69623e+02
+284 1.05231e+03 7.69623e+02
+285 1.23557e+03 7.63718e+02
+286 1.21193e+03 7.63718e+02
+287 1.18828e+03 7.63718e+02
+288 1.15281e+03 7.63718e+02
+289 1.11733e+03 7.63718e+02
+290 1.17645e+03 7.51908e+02
+291 1.12916e+03 7.51908e+02
+292 1.10551e+03 7.51908e+02
+293 1.03457e+03 7.51908e+02
+294 1.02275e+03 7.51908e+02
+295 1.17645e+03 5.62947e+02
+296 1.63167e+03 2.05102e+03
+297 1.63167e+03 2.03921e+03
+298 1.63167e+03 2.02740e+03
+299 1.61984e+03 2.05102e+03
+300 1.61984e+03 2.03921e+03
+301 1.61984e+03 2.02740e+03
+302 1.60802e+03 2.05102e+03
+303 1.60802e+03 2.03921e+03
+304 1.60802e+03 2.02740e+03
+305 1.59619e+03 2.05102e+03
+306 1.59619e+03 2.03921e+03
+307 1.59619e+03 2.02740e+03
+308 1.58437e+03 2.05102e+03
+309 1.58437e+03 2.03921e+03
+310 1.58437e+03 2.02740e+03
+311 1.57255e+03 2.05102e+03
+312 1.57255e+03 2.03921e+03
+313 1.57255e+03 2.02740e+03
+314 1.56072e+03 2.05102e+03
+315 1.56072e+03 2.03921e+03
+316 1.56072e+03 2.02740e+03
+317 1.54890e+03 2.05102e+03
+318 1.54890e+03 2.03921e+03
+319 1.54890e+03 2.02740e+03
+320 1.53708e+03 2.05102e+03
+321 1.53708e+03 2.03921e+03
+322 1.53708e+03 2.02740e+03
+323 1.52525e+03 2.05102e+03
+324 1.52525e+03 2.03921e+03
+325 1.52525e+03 2.02740e+03
+326 1.51343e+03 2.05102e+03
+327 1.51343e+03 2.03921e+03
+328 1.51343e+03 2.02740e+03
+329 1.50160e+03 2.05102e+03
+330 1.50160e+03 2.03921e+03
+331 1.50160e+03 2.02740e+03
+332 1.48978e+03 2.05102e+03
+333 1.48978e+03 2.03921e+03
+334 1.48978e+03 2.02740e+03
+335 1.62575e+03 2.04511e+03
+336 1.62575e+03 2.03330e+03
+337 1.61393e+03 2.04511e+03
+338 1.61393e+03 2.03330e+03
+339 1.60211e+03 2.04511e+03
+340 1.60211e+03 2.03330e+03
+341 1.59028e+03 2.04511e+03
+342 1.59028e+03 2.03330e+03
+343 1.57846e+03 2.04511e+03
+344 1.57846e+03 2.03330e+03
+345 1.56664e+03 2.04511e+03
+346 1.56664e+03 2.03330e+03
+347 1.55481e+03 2.04511e+03
+348 1.55481e+03 2.03330e+03
+349 1.54299e+03 2.04511e+03
+350 1.54299e+03 2.03330e+03
+351 1.53116e+03 2.04511e+03
+352 1.53116e+03 2.03330e+03
+353 1.51934e+03 2.04511e+03
+354 1.51934e+03 2.03330e+03
+355 1.50752e+03 2.04511e+03
+356 1.50752e+03 2.03330e+03
+357 1.49569e+03 2.04511e+03
+358 1.49569e+03 2.03330e+03
+359 1.62575e+03 2.05102e+03
+360 1.62575e+03 2.03921e+03
+361 1.62575e+03 2.02740e+03
+362 1.61393e+03 2.05102e+03
+363 1.61393e+03 2.03921e+03
+364 1.61393e+03 2.02740e+03
+365 1.60211e+03 2.05102e+03
+366 1.60211e+03 2.03921e+03
+367 1.60211e+03 2.02740e+03
+368 1.59028e+03 2.05102e+03
+369 1.59028e+03 2.03921e+03
+370 1.59028e+03 2.02740e+03
+371 1.57846e+03 2.05102e+03
+372 1.57846e+03 2.03921e+03
+373 1.57846e+03 2.02740e+03
+374 1.56664e+03 2.05102e+03
+375 1.56664e+03 2.03921e+03
+376 1.56664e+03 2.02740e+03
+377 1.55481e+03 2.05102e+03
+378 1.55481e+03 2.03921e+03
+379 1.55481e+03 2.02740e+03
+380 1.54299e+03 2.05102e+03
+381 1.54299e+03 2.03921e+03
+382 1.54299e+03 2.02740e+03
+383 1.53116e+03 2.05102e+03
+384 1.53116e+03 2.03921e+03
+385 1.53116e+03 2.02740e+03
+386 1.51934e+03 2.05102e+03
+387 1.51934e+03 2.03921e+03
+388 1.51934e+03 2.02740e+03
+389 1.50752e+03 2.05102e+03
+390 1.50752e+03 2.03921e+03
+391 1.50752e+03 2.02740e+03
+392 1.49569e+03 2.05102e+03
+393 1.49569e+03 2.03921e+03
+394 1.49569e+03 2.02740e+03
+395 1.63167e+03 2.04511e+03
+396 1.63167e+03 2.03330e+03
+397 1.61984e+03 2.04511e+03
+398 1.61984e+03 2.03330e+03
+399 1.60802e+03 2.04511e+03
+400 1.60802e+03 2.03330e+03
+401 1.59619e+03 2.04511e+03
+402 1.59619e+03 2.03330e+03
+403 1.58437e+03 2.04511e+03
+404 1.58437e+03 2.03330e+03
+405 1.57255e+03 2.04511e+03
+406 1.57255e+03 2.03330e+03
+407 1.56072e+03 2.04511e+03
+408 1.56072e+03 2.03330e+03
+409 1.54890e+03 2.04511e+03
+410 1.54890e+03 2.03330e+03
+411 1.53708e+03 2.04511e+03
+412 1.53708e+03 2.03330e+03
+413 1.52525e+03 2.04511e+03
+414 1.52525e+03 2.03330e+03
+415 1.51343e+03 2.04511e+03
+416 1.51343e+03 2.03330e+03
+417 1.50160e+03 2.04511e+03
+418 1.50160e+03 2.03330e+03
+419 1.48978e+03 2.04511e+03
+420 1.48978e+03 2.03330e+03
+421 1.62871e+03 2.04806e+03
+422 1.62871e+03 2.03625e+03
+423 1.61689e+03 2.04806e+03
+424 1.61689e+03 2.03625e+03
+425 1.60506e+03 2.04806e+03
+426 1.60506e+03 2.03625e+03
+427 1.59324e+03 2.04806e+03
+428 1.59324e+03 2.03625e+03
+429 1.58141e+03 2.04806e+03
+430 1.58141e+03 2.03625e+03
+431 1.56959e+03 2.04806e+03
+432 1.56959e+03 2.03625e+03
+433 1.55777e+03 2.04806e+03
+434 1.55777e+03 2.03625e+03
+435 1.54594e+03 2.04806e+03
+436 1.54594e+03 2.03625e+03
+437 1.53412e+03 2.04806e+03
+438 1.53412e+03 2.03625e+03
+439 1.52230e+03 2.04806e+03
+440 1.52230e+03 2.03625e+03
+441 1.51047e+03 2.04806e+03
+442 1.51047e+03 2.03625e+03
+443 1.49865e+03 2.04806e+03
+444 1.49865e+03 2.03625e+03
+445 1.62280e+03 2.04216e+03
+446 1.62280e+03 2.03035e+03
+447 1.61097e+03 2.04216e+03
+448 1.61097e+03 2.03035e+03
+449 1.59915e+03 2.04216e+03
+450 1.59915e+03 2.03035e+03
+451 1.58733e+03 2.04216e+03
+452 1.58733e+03 2.03035e+03
+453 1.57550e+03 2.04216e+03
+454 1.57550e+03 2.03035e+03
+455 1.56368e+03 2.04216e+03
+456 1.56368e+03 2.03035e+03
+457 1.55185e+03 2.04216e+03
+458 1.55185e+03 2.03035e+03
+459 1.54003e+03 2.04216e+03
+460 1.54003e+03 2.03035e+03
+461 1.52821e+03 2.04216e+03
+462 1.52821e+03 2.03035e+03
+463 1.51638e+03 2.04216e+03
+464 1.51638e+03 2.03035e+03
+465 1.50456e+03 2.04216e+03
+466 1.50456e+03 2.03035e+03
+467 1.49274e+03 2.04216e+03
+468 1.49274e+03 2.03035e+03
+469 1.62871e+03 2.04216e+03
+470 1.62871e+03 2.03035e+03
+471 1.61689e+03 2.04216e+03
+472 1.61689e+03 2.03035e+03
+473 1.60506e+03 2.04216e+03
+474 1.60506e+03 2.03035e+03
+475 1.59324e+03 2.04216e+03
+476 1.59324e+03 2.03035e+03
+477 1.58141e+03 2.04216e+03
+478 1.58141e+03 2.03035e+03
+479 1.56959e+03 2.04216e+03
+480 1.56959e+03 2.03035e+03
+481 1.55777e+03 2.04216e+03
+482 1.55777e+03 2.03035e+03
+483 1.54594e+03 2.04216e+03
+484 1.54594e+03 2.03035e+03
+485 1.53412e+03 2.04216e+03
+486 1.53412e+03 2.03035e+03
+487 1.52230e+03 2.04216e+03
+488 1.52230e+03 2.03035e+03
+489 1.51047e+03 2.04216e+03
+490 1.51047e+03 2.03035e+03
+491 1.49865e+03 2.04216e+03
+492 1.49865e+03 2.03035e+03
+493 1.62280e+03 2.04806e+03
+494 1.62280e+03 2.03625e+03
+495 1.61097e+03 2.04806e+03
+496 1.61097e+03 2.03625e+03
+497 1.59915e+03 2.04806e+03
+498 1.59915e+03 2.03625e+03
+499 1.58733e+03 2.04806e+03
+500 1.58733e+03 2.03625e+03
+501 1.57550e+03 2.04806e+03
+502 1.57550e+03 2.03625e+03
+503 1.56368e+03 2.04806e+03
+504 1.56368e+03 2.03625e+03
+505 1.55185e+03 2.04806e+03
+506 1.55185e+03 2.03625e+03
+507 1.54003e+03 2.04806e+03
+508 1.54003e+03 2.03625e+03
+509 1.52821e+03 2.04806e+03
+510 1.52821e+03 2.03625e+03
+511 1.51638e+03 2.04806e+03
+512 1.51638e+03 2.03625e+03
+513 1.50456e+03 2.04806e+03
+514 1.50456e+03 2.03625e+03
+515 1.49274e+03 2.04806e+03
+516 1.49274e+03 2.03625e+03
+517 6.50302e+02 2.05102e+03
+518 6.50302e+02 2.03921e+03
+519 6.50302e+02 2.02740e+03
+520 6.38478e+02 2.05102e+03
+521 6.38478e+02 2.03921e+03
+522 6.38478e+02 2.02740e+03
+523 6.26655e+02 2.05102e+03
+524 6.26655e+02 2.03921e+03
+525 6.26655e+02 2.02740e+03
+526 6.14831e+02 2.05102e+03
+527 6.14831e+02 2.03921e+03
+528 6.14831e+02 2.02740e+03
+529 6.03007e+02 2.05102e+03
+530 6.03007e+02 2.03921e+03
+531 6.03007e+02 2.02740e+03
+532 5.91184e+02 2.05102e+03
+533 5.91184e+02 2.03921e+03
+534 5.91184e+02 2.02740e+03
+535 5.79360e+02 2.05102e+03
+536 5.79360e+02 2.03921e+03
+537 5.79360e+02 2.02740e+03
+538 5.67537e+02 2.05102e+03
+539 5.67537e+02 2.03921e+03
+540 5.67537e+02 2.02740e+03
+541 5.55713e+02 2.05102e+03
+542 5.55713e+02 2.03921e+03
+543 5.55713e+02 2.02740e+03
+544 5.43889e+02 2.05102e+03
+545 5.43889e+02 2.03921e+03
+546 5.43889e+02 2.02740e+03
+547 5.32066e+02 2.05102e+03
+548 5.32066e+02 2.03921e+03
+549 5.32066e+02 2.02740e+03
+550 5.20242e+02 2.05102e+03
+551 5.20242e+02 2.03921e+03
+552 5.20242e+02 2.02740e+03
+553 5.08418e+02 2.05102e+03
+554 5.08418e+02 2.03921e+03
+555 5.08418e+02 2.02740e+03
+556 6.44390e+02 2.04511e+03
+557 6.44390e+02 2.03330e+03
+558 6.32566e+02 2.04511e+03
+559 6.32566e+02 2.03330e+03
+560 6.20743e+02 2.04511e+03
+561 6.20743e+02 2.03330e+03
+562 6.08919e+02 2.04511e+03
+563 6.08919e+02 2.03330e+03
+564 5.97096e+02 2.04511e+03
+565 5.97096e+02 2.03330e+03
+566 5.85272e+02 2.04511e+03
+567 5.85272e+02 2.03330e+03
+568 5.73448e+02 2.04511e+03
+569 5.73448e+02 2.03330e+03
+570 5.61625e+02 2.04511e+03
+571 5.61625e+02 2.03330e+03
+572 5.49801e+02 2.04511e+03
+573 5.49801e+02 2.03330e+03
+574 5.37977e+02 2.04511e+03
+575 5.37977e+02 2.03330e+03
+576 5.26153e+02 2.04511e+03
+577 5.26153e+02 2.03330e+03
+578 5.14330e+02 2.04511e+03
+579 5.14330e+02 2.03330e+03
+580 6.44390e+02 2.05102e+03
+581 6.44390e+02 2.03921e+03
+582 6.44390e+02 2.02740e+03
+583 6.32566e+02 2.05102e+03
+584 6.32566e+02 2.03921e+03
+585 6.32566e+02 2.02740e+03
+586 6.20743e+02 2.05102e+03
+587 6.20743e+02 2.03921e+03
+588 6.20743e+02 2.02740e+03
+589 6.08919e+02 2.05102e+03
+590 6.08919e+02 2.03921e+03
+591 6.08919e+02 2.02740e+03
+592 5.97096e+02 2.05102e+03
+593 5.97096e+02 2.03921e+03
+594 5.97096e+02 2.02740e+03
+595 5.85272e+02 2.05102e+03
+596 5.85272e+02 2.03921e+03
+597 5.85272e+02 2.02740e+03
+598 5.73448e+02 2.05102e+03
+599 5.73448e+02 2.03921e+03
+600 5.73448e+02 2.02740e+03
+601 5.61625e+02 2.05102e+03
+602 5.61625e+02 2.03921e+03
+603 5.61625e+02 2.02740e+03
+604 5.49801e+02 2.05102e+03
+605 5.49801e+02 2.03921e+03
+606 5.49801e+02 2.02740e+03
+607 5.37977e+02 2.05102e+03
+608 5.37977e+02 2.03921e+03
+609 5.37977e+02 2.02740e+03
+610 5.26153e+02 2.05102e+03
+611 5.26153e+02 2.03921e+03
+612 5.26153e+02 2.02740e+03
+613 5.14330e+02 2.05102e+03
+614 5.14330e+02 2.03921e+03
+615 5.14330e+02 2.02740e+03
+616 6.50302e+02 2.04511e+03
+617 6.50302e+02 2.03330e+03
+618 6.38478e+02 2.04511e+03
+619 6.38478e+02 2.03330e+03
+620 6.26655e+02 2.04511e+03
+621 6.26655e+02 2.03330e+03
+622 6.14831e+02 2.04511e+03
+623 6.14831e+02 2.03330e+03
+624 6.03007e+02 2.04511e+03
+625 6.03007e+02 2.03330e+03
+626 5.91184e+02 2.04511e+03
+627 5.91184e+02 2.03330e+03
+628 5.79360e+02 2.04511e+03
+629 5.79360e+02 2.03330e+03
+630 5.67537e+02 2.04511e+03
+631 5.67537e+02 2.03330e+03
+632 5.55713e+02 2.04511e+03
+633 5.55713e+02 2.03330e+03
+634 5.43889e+02 2.04511e+03
+635 5.43889e+02 2.03330e+03
+636 5.32066e+02 2.04511e+03
+637 5.32066e+02 2.03330e+03
+638 5.20242e+02 2.04511e+03
+639 5.20242e+02 2.03330e+03
+640 5.08418e+02 2.04511e+03
+641 5.08418e+02 2.03330e+03
+642 6.47346e+02 2.04806e+03
+643 6.47346e+02 2.03625e+03
+644 6.35522e+02 2.04806e+03
+645 6.35522e+02 2.03625e+03
+646 6.23699e+02 2.04806e+03
+647 6.23699e+02 2.03625e+03
+648 6.11875e+02 2.04806e+03
+649 6.11875e+02 2.03625e+03
+650 6.00051e+02 2.04806e+03
+651 6.00051e+02 2.03625e+03
+652 5.88228e+02 2.04806e+03
+653 5.88228e+02 2.03625e+03
+654 5.76404e+02 2.04806e+03
+655 5.76404e+02 2.03625e+03
+656 5.64581e+02 2.04806e+03
+657 5.64581e+02 2.03625e+03
+658 5.52757e+02 2.04806e+03
+659 5.52757e+02 2.03625e+03
+660 5.40933e+02 2.04806e+03
+661 5.40933e+02 2.03625e+03
+662 5.29109e+02 2.04806e+03
+663 5.29109e+02 2.03625e+03
+664 5.17286e+02 2.04806e+03
+665 5.17286e+02 2.03625e+03
+666 6.41434e+02 2.04216e+03
+667 6.41434e+02 2.03035e+03
+668 6.29611e+02 2.04216e+03
+669 6.29611e+02 2.03035e+03
+670 6.17787e+02 2.04216e+03
+671 6.17787e+02 2.03035e+03
+672 6.05963e+02 2.04216e+03
+673 6.05963e+02 2.03035e+03
+674 5.94140e+02 2.04216e+03
+675 5.94140e+02 2.03035e+03
+676 5.82316e+02 2.04216e+03
+677 5.82316e+02 2.03035e+03
+678 5.70492e+02 2.04216e+03
+679 5.70492e+02 2.03035e+03
+680 5.58669e+02 2.04216e+03
+681 5.58669e+02 2.03035e+03
+682 5.46845e+02 2.04216e+03
+683 5.46845e+02 2.03035e+03
+684 5.35022e+02 2.04216e+03
+685 5.35022e+02 2.03035e+03
+686 5.23198e+02 2.04216e+03
+687 5.23198e+02 2.03035e+03
+688 5.11374e+02 2.04216e+03
+689 5.11374e+02 2.03035e+03
+690 6.47346e+02 2.04216e+03
+691 6.47346e+02 2.03035e+03
+692 6.35522e+02 2.04216e+03
+693 6.35522e+02 2.03035e+03
+694 6.23699e+02 2.04216e+03
+695 6.23699e+02 2.03035e+03
+696 6.11875e+02 2.04216e+03
+697 6.11875e+02 2.03035e+03
+698 6.00051e+02 2.04216e+03
+699 6.00051e+02 2.03035e+03
+700 5.88228e+02 2.04216e+03
+701 5.88228e+02 2.03035e+03
+702 5.76404e+02 2.04216e+03
+703 5.76404e+02 2.03035e+03
+704 5.64581e+02 2.04216e+03
+705 5.64581e+02 2.03035e+03
+706 5.52757e+02 2.04216e+03
+707 5.52757e+02 2.03035e+03
+708 5.40933e+02 2.04216e+03
+709 5.40933e+02 2.03035e+03
+710 5.29109e+02 2.04216e+03
+711 5.29109e+02 2.03035e+03
+712 5.17286e+02 2.04216e+03
+713 5.17286e+02 2.03035e+03
+714 6.41434e+02 2.04806e+03
+715 6.41434e+02 2.03625e+03
+716 6.29611e+02 2.04806e+03
+717 6.29611e+02 2.03625e+03
+718 6.17787e+02 2.04806e+03
+719 6.17787e+02 2.03625e+03
+720 6.05963e+02 2.04806e+03
+721 6.05963e+02 2.03625e+03
+722 5.94140e+02 2.04806e+03
+723 5.94140e+02 2.03625e+03
+724 5.82316e+02 2.04806e+03
+725 5.82316e+02 2.03625e+03
+726 5.70492e+02 2.04806e+03
+727 5.70492e+02 2.03625e+03
+728 5.58669e+02 2.04806e+03
+729 5.58669e+02 2.03625e+03
+730 5.46845e+02 2.04806e+03
+731 5.46845e+02 2.03625e+03
+732 5.35022e+02 2.04806e+03
+733 5.35022e+02 2.03625e+03
+734 5.23198e+02 2.04806e+03
+735 5.23198e+02 2.03625e+03
+736 5.11374e+02 2.04806e+03
+737 5.11374e+02 2.03625e+03
+738 1.63167e+03 1.73215e+02
+739 1.63167e+03 1.61405e+02
+740 1.63167e+03 1.49595e+02
+741 1.61984e+03 1.73215e+02
+742 1.61984e+03 1.61405e+02
+743 1.61984e+03 1.49595e+02
+744 1.60802e+03 1.73215e+02
+745 1.60802e+03 1.61405e+02
+746 1.60802e+03 1.49595e+02
+747 1.59619e+03 1.73215e+02
+748 1.59619e+03 1.61405e+02
+749 1.59619e+03 1.49595e+02
+750 1.58437e+03 1.73215e+02
+751 1.58437e+03 1.61405e+02
+752 1.58437e+03 1.49595e+02
+753 1.57255e+03 1.73215e+02
+754 1.57255e+03 1.61405e+02
+755 1.57255e+03 1.49595e+02
+756 1.56072e+03 1.73215e+02
+757 1.56072e+03 1.61405e+02
+758 1.56072e+03 1.49595e+02
+759 1.54890e+03 1.73215e+02
+760 1.54890e+03 1.61405e+02
+761 1.54890e+03 1.49595e+02
+762 1.53708e+03 1.73215e+02
+763 1.53708e+03 1.61405e+02
+764 1.53708e+03 1.49595e+02
+765 1.52525e+03 1.73215e+02
+766 1.52525e+03 1.61405e+02
+767 1.52525e+03 1.49595e+02
+768 1.51343e+03 1.73215e+02
+769 1.51343e+03 1.61405e+02
+770 1.51343e+03 1.49595e+02
+771 1.50160e+03 1.73215e+02
+772 1.50160e+03 1.61405e+02
+773 1.50160e+03 1.49595e+02
+774 1.48978e+03 1.73215e+02
+775 1.48978e+03 1.61405e+02
+776 1.48978e+03 1.49595e+02
+777 1.62575e+03 1.67310e+02
+778 1.62575e+03 1.55500e+02
+779 1.61393e+03 1.67310e+02
+780 1.61393e+03 1.55500e+02
+781 1.60211e+03 1.67310e+02
+782 1.60211e+03 1.55500e+02
+783 1.59028e+03 1.67310e+02
+784 1.59028e+03 1.55500e+02
+785 1.57846e+03 1.67310e+02
+786 1.57846e+03 1.55500e+02
+787 1.56664e+03 1.67310e+02
+788 1.56664e+03 1.55500e+02
+789 1.55481e+03 1.67310e+02
+790 1.55481e+03 1.55500e+02
+791 1.54299e+03 1.67310e+02
+792 1.54299e+03 1.55500e+02
+793 1.53116e+03 1.67310e+02
+794 1.53116e+03 1.55500e+02
+795 1.51934e+03 1.67310e+02
+796 1.51934e+03 1.55500e+02
+797 1.50752e+03 1.67310e+02
+798 1.50752e+03 1.55500e+02
+799 1.49569e+03 1.67310e+02
+800 1.49569e+03 1.55500e+02
+801 1.62575e+03 1.73215e+02
+802 1.62575e+03 1.61405e+02
+803 1.62575e+03 1.49595e+02
+804 1.61393e+03 1.73215e+02
+805 1.61393e+03 1.61405e+02
+806 1.61393e+03 1.49595e+02
+807 1.60211e+03 1.73215e+02
+808 1.60211e+03 1.61405e+02
+809 1.60211e+03 1.49595e+02
+810 1.59028e+03 1.73215e+02
+811 1.59028e+03 1.61405e+02
+812 1.59028e+03 1.49595e+02
+813 1.57846e+03 1.73215e+02
+814 1.57846e+03 1.61405e+02
+815 1.57846e+03 1.49595e+02
+816 1.56664e+03 1.73215e+02
+817 1.56664e+03 1.61405e+02
+818 1.56664e+03 1.49595e+02
+819 1.55481e+03 1.73215e+02
+820 1.55481e+03 1.61405e+02
+821 1.55481e+03 1.49595e+02
+822 1.54299e+03 1.73215e+02
+823 1.54299e+03 1.61405e+02
+824 1.54299e+03 1.49595e+02
+825 1.53116e+03 1.73215e+02
+826 1.53116e+03 1.61405e+02
+827 1.53116e+03 1.49595e+02
+828 1.51934e+03 1.73215e+02
+829 1.51934e+03 1.61405e+02
+830 1.51934e+03 1.49595e+02
+831 1.50752e+03 1.73215e+02
+832 1.50752e+03 1.61405e+02
+833 1.50752e+03 1.49595e+02
+834 1.49569e+03 1.73215e+02
+835 1.49569e+03 1.61405e+02
+836 1.49569e+03 1.49595e+02
+837 1.63167e+03 1.67310e+02
+838 1.63167e+03 1.55500e+02
+839 1.61984e+03 1.67310e+02
+840 1.61984e+03 1.55500e+02
+841 1.60802e+03 1.67310e+02
+842 1.60802e+03 1.55500e+02
+843 1.59619e+03 1.67310e+02
+844 1.59619e+03 1.55500e+02
+845 1.58437e+03 1.67310e+02
+846 1.58437e+03 1.55500e+02
+847 1.57255e+03 1.67310e+02
+848 1.57255e+03 1.55500e+02
+849 1.56072e+03 1.67310e+02
+850 1.56072e+03 1.55500e+02
+851 1.54890e+03 1.67310e+02
+852 1.54890e+03 1.55500e+02
+853 1.53708e+03 1.67310e+02
+854 1.53708e+03 1.55500e+02
+855 1.52525e+03 1.67310e+02
+856 1.52525e+03 1.55500e+02
+857 1.51343e+03 1.67310e+02
+858 1.51343e+03 1.55500e+02
+859 1.50160e+03 1.67310e+02
+860 1.50160e+03 1.55500e+02
+861 1.48978e+03 1.67310e+02
+862 1.48978e+03 1.55500e+02
+863 1.62871e+03 1.70262e+02
+864 1.62871e+03 1.58452e+02
+865 1.61689e+03 1.70262e+02
+866 1.61689e+03 1.58452e+02
+867 1.60506e+03 1.70262e+02
+868 1.60506e+03 1.58452e+02
+869 1.59324e+03 1.70262e+02
+870 1.59324e+03 1.58452e+02
+871 1.58141e+03 1.70262e+02
+872 1.58141e+03 1.58452e+02
+873 1.56959e+03 1.70262e+02
+874 1.56959e+03 1.58452e+02
+875 1.55777e+03 1.70262e+02
+876 1.55777e+03 1.58452e+02
+877 1.54594e+03 1.70262e+02
+878 1.54594e+03 1.58452e+02
+879 1.53412e+03 1.70262e+02
+880 1.53412e+03 1.58452e+02
+881 1.52230e+03 1.70262e+02
+882 1.52230e+03 1.58452e+02
+883 1.51047e+03 1.70262e+02
+884 1.51047e+03 1.58452e+02
+885 1.49865e+03 1.70262e+02
+886 1.49865e+03 1.58452e+02
+887 1.62280e+03 1.64357e+02
+888 1.62280e+03 1.52547e+02
+889 1.61097e+03 1.64357e+02
+890 1.61097e+03 1.52547e+02
+891 1.59915e+03 1.64357e+02
+892 1.59915e+03 1.52547e+02
+893 1.58733e+03 1.64357e+02
+894 1.58733e+03 1.52547e+02
+895 1.57550e+03 1.64357e+02
+896 1.57550e+03 1.52547e+02
+897 1.56368e+03 1.64357e+02
+898 1.56368e+03 1.52547e+02
+899 1.55185e+03 1.64357e+02
+900 1.55185e+03 1.52547e+02
+901 1.54003e+03 1.64357e+02
+902 1.54003e+03 1.52547e+02
+903 1.52821e+03 1.64357e+02
+904 1.52821e+03 1.52547e+02
+905 1.51638e+03 1.64357e+02
+906 1.51638e+03 1.52547e+02
+907 1.50456e+03 1.64357e+02
+908 1.50456e+03 1.52547e+02
+909 1.49274e+03 1.64357e+02
+910 1.49274e+03 1.52547e+02
+911 1.62871e+03 1.64357e+02
+912 1.62871e+03 1.52547e+02
+913 1.61689e+03 1.64357e+02
+914 1.61689e+03 1.52547e+02
+915 1.60506e+03 1.64357e+02
+916 1.60506e+03 1.52547e+02
+917 1.59324e+03 1.64357e+02
+918 1.59324e+03 1.52547e+02
+919 1.58141e+03 1.64357e+02
+920 1.58141e+03 1.52547e+02
+921 1.56959e+03 1.64357e+02
+922 1.56959e+03 1.52547e+02
+923 1.55777e+03 1.64357e+02
+924 1.55777e+03 1.52547e+02
+925 1.54594e+03 1.64357e+02
+926 1.54594e+03 1.52547e+02
+927 1.53412e+03 1.64357e+02
+928 1.53412e+03 1.52547e+02
+929 1.52230e+03 1.64357e+02
+930 1.52230e+03 1.52547e+02
+931 1.51047e+03 1.64357e+02
+932 1.51047e+03 1.52547e+02
+933 1.49865e+03 1.64357e+02
+934 1.49865e+03 1.52547e+02
+935 1.62280e+03 1.70262e+02
+936 1.62280e+03 1.58452e+02
+937 1.61097e+03 1.70262e+02
+938 1.61097e+03 1.58452e+02
+939 1.59915e+03 1.70262e+02
+940 1.59915e+03 1.58452e+02
+941 1.58733e+03 1.70262e+02
+942 1.58733e+03 1.58452e+02
+943 1.57550e+03 1.70262e+02
+944 1.57550e+03 1.58452e+02
+945 1.56368e+03 1.70262e+02
+946 1.56368e+03 1.58452e+02
+947 1.55185e+03 1.70262e+02
+948 1.55185e+03 1.58452e+02
+949 1.54003e+03 1.70262e+02
+950 1.54003e+03 1.58452e+02
+951 1.52821e+03 1.70262e+02
+952 1.52821e+03 1.58452e+02
+953 1.51638e+03 1.70262e+02
+954 1.51638e+03 1.58452e+02
+955 1.50456e+03 1.70262e+02
+956 1.50456e+03 1.58452e+02
+957 1.49274e+03 1.70262e+02
+958 1.49274e+03 1.58452e+02
+959 6.50302e+02 1.73215e+02
+960 6.50302e+02 1.61405e+02
+961 6.50302e+02 1.49595e+02
+962 6.38478e+02 1.73215e+02
+963 6.38478e+02 1.61405e+02
+964 6.38478e+02 1.49595e+02
+965 6.26655e+02 1.73215e+02
+966 6.26655e+02 1.61405e+02
+967 6.26655e+02 1.49595e+02
+968 6.14831e+02 1.73215e+02
+969 6.14831e+02 1.61405e+02
+970 6.14831e+02 1.49595e+02
+971 6.03007e+02 1.73215e+02
+972 6.03007e+02 1.61405e+02
+973 6.03007e+02 1.49595e+02
+974 5.91184e+02 1.73215e+02
+975 5.91184e+02 1.61405e+02
+976 5.91184e+02 1.49595e+02
+977 5.79360e+02 1.73215e+02
+978 5.79360e+02 1.61405e+02
+979 5.79360e+02 1.49595e+02
+980 5.67537e+02 1.73215e+02
+981 5.67537e+02 1.61405e+02
+982 5.67537e+02 1.49595e+02
+983 5.55713e+02 1.73215e+02
+984 5.55713e+02 1.61405e+02
+985 5.55713e+02 1.49595e+02
+986 5.43889e+02 1.73215e+02
+987 5.43889e+02 1.61405e+02
+988 5.43889e+02 1.49595e+02
+989 5.32066e+02 1.73215e+02
+990 5.32066e+02 1.61405e+02
+991 5.32066e+02 1.49595e+02
+992 5.20242e+02 1.73215e+02
+993 5.20242e+02 1.61405e+02
+994 5.20242e+02 1.49595e+02
+995 5.08418e+02 1.73215e+02
+996 5.08418e+02 1.61405e+02
+997 5.08418e+02 1.49595e+02
+998 6.44390e+02 1.67310e+02
+999 6.44390e+02 1.55500e+02
+1000 6.32566e+02 1.67310e+02
+1001 6.32566e+02 1.55500e+02
+1002 6.20743e+02 1.67310e+02
+1003 6.20743e+02 1.55500e+02
+1004 6.08919e+02 1.67310e+02
+1005 6.08919e+02 1.55500e+02
+1006 5.97096e+02 1.67310e+02
+1007 5.97096e+02 1.55500e+02
+1008 5.85272e+02 1.67310e+02
+1009 5.85272e+02 1.55500e+02
+1010 5.73448e+02 1.67310e+02
+1011 5.73448e+02 1.55500e+02
+1012 5.61625e+02 1.67310e+02
+1013 5.61625e+02 1.55500e+02
+1014 5.49801e+02 1.67310e+02
+1015 5.49801e+02 1.55500e+02
+1016 5.37977e+02 1.67310e+02
+1017 5.37977e+02 1.55500e+02
+1018 5.26153e+02 1.67310e+02
+1019 5.26153e+02 1.55500e+02
+1020 5.14330e+02 1.67310e+02
+1021 5.14330e+02 1.55500e+02
+1022 6.44390e+02 1.73215e+02
+1023 6.44390e+02 1.61405e+02
+1024 6.44390e+02 1.49595e+02
+1025 6.32566e+02 1.73215e+02
+1026 6.32566e+02 1.61405e+02
+1027 6.32566e+02 1.49595e+02
+1028 6.20743e+02 1.73215e+02
+1029 6.20743e+02 1.61405e+02
+1030 6.20743e+02 1.49595e+02
+1031 6.08919e+02 1.73215e+02
+1032 6.08919e+02 1.61405e+02
+1033 6.08919e+02 1.49595e+02
+1034 5.97096e+02 1.73215e+02
+1035 5.97096e+02 1.61405e+02
+1036 5.97096e+02 1.49595e+02
+1037 5.85272e+02 1.73215e+02
+1038 5.85272e+02 1.61405e+02
+1039 5.85272e+02 1.49595e+02
+1040 5.73448e+02 1.73215e+02
+1041 5.73448e+02 1.61405e+02
+1042 5.73448e+02 1.49595e+02
+1043 5.61625e+02 1.73215e+02
+1044 5.61625e+02 1.61405e+02
+1045 5.61625e+02 1.49595e+02
+1046 5.49801e+02 1.73215e+02
+1047 5.49801e+02 1.61405e+02
+1048 5.49801e+02 1.49595e+02
+1049 5.37977e+02 1.73215e+02
+1050 5.37977e+02 1.61405e+02
+1051 5.37977e+02 1.49595e+02
+1052 5.26153e+02 1.73215e+02
+1053 5.26153e+02 1.61405e+02
+1054 5.26153e+02 1.49595e+02
+1055 5.14330e+02 1.73215e+02
+1056 5.14330e+02 1.61405e+02
+1057 5.14330e+02 1.49595e+02
+1058 6.50302e+02 1.67310e+02
+1059 6.50302e+02 1.55500e+02
+1060 6.38478e+02 1.67310e+02
+1061 6.38478e+02 1.55500e+02
+1062 6.26655e+02 1.67310e+02
+1063 6.26655e+02 1.55500e+02
+1064 6.14831e+02 1.67310e+02
+1065 6.14831e+02 1.55500e+02
+1066 6.03007e+02 1.67310e+02
+1067 6.03007e+02 1.55500e+02
+1068 5.91184e+02 1.67310e+02
+1069 5.91184e+02 1.55500e+02
+1070 5.79360e+02 1.67310e+02
+1071 5.79360e+02 1.55500e+02
+1072 5.67537e+02 1.67310e+02
+1073 5.67537e+02 1.55500e+02
+1074 5.55713e+02 1.67310e+02
+1075 5.55713e+02 1.55500e+02
+1076 5.43889e+02 1.67310e+02
+1077 5.43889e+02 1.55500e+02
+1078 5.32066e+02 1.67310e+02
+1079 5.32066e+02 1.55500e+02
+1080 5.20242e+02 1.67310e+02
+1081 5.20242e+02 1.55500e+02
+1082 5.08418e+02 1.67310e+02
+1083 5.08418e+02 1.55500e+02
+1084 6.47346e+02 1.70262e+02
+1085 6.47346e+02 1.58452e+02
+1086 6.35522e+02 1.70262e+02
+1087 6.35522e+02 1.58452e+02
+1088 6.23699e+02 1.70262e+02
+1089 6.23699e+02 1.58452e+02
+1090 6.11875e+02 1.70262e+02
+1091 6.11875e+02 1.58452e+02
+1092 6.00051e+02 1.70262e+02
+1093 6.00051e+02 1.58452e+02
+1094 5.88228e+02 1.70262e+02
+1095 5.88228e+02 1.58452e+02
+1096 5.76404e+02 1.70262e+02
+1097 5.76404e+02 1.58452e+02
+1098 5.64581e+02 1.70262e+02
+1099 5.64581e+02 1.58452e+02
+1100 5.52757e+02 1.70262e+02
+1101 5.52757e+02 1.58452e+02
+1102 5.40933e+02 1.70262e+02
+1103 5.40933e+02 1.58452e+02
+1104 5.29109e+02 1.70262e+02
+1105 5.29109e+02 1.58452e+02
+1106 5.17286e+02 1.70262e+02
+1107 5.17286e+02 1.58452e+02
+1108 6.41434e+02 1.64357e+02
+1109 6.41434e+02 1.52547e+02
+1110 6.29611e+02 1.64357e+02
+1111 6.29611e+02 1.52547e+02
+1112 6.17787e+02 1.64357e+02
+1113 6.17787e+02 1.52547e+02
+1114 6.05963e+02 1.64357e+02
+1115 6.05963e+02 1.52547e+02
+1116 5.94140e+02 1.64357e+02
+1117 5.94140e+02 1.52547e+02
+1118 5.82316e+02 1.64357e+02
+1119 5.82316e+02 1.52547e+02
+1120 5.70492e+02 1.64357e+02
+1121 5.70492e+02 1.52547e+02
+1122 5.58669e+02 1.64357e+02
+1123 5.58669e+02 1.52547e+02
+1124 5.46845e+02 1.64357e+02
+1125 5.46845e+02 1.52547e+02
+1126 5.35022e+02 1.64357e+02
+1127 5.35022e+02 1.52547e+02
+1128 5.23198e+02 1.64357e+02
+1129 5.23198e+02 1.52547e+02
+1130 5.11374e+02 1.64357e+02
+1131 5.11374e+02 1.52547e+02
+1132 6.47346e+02 1.64357e+02
+1133 6.47346e+02 1.52547e+02
+1134 6.35522e+02 1.64357e+02
+1135 6.35522e+02 1.52547e+02
+1136 6.23699e+02 1.64357e+02
+1137 6.23699e+02 1.52547e+02
+1138 6.11875e+02 1.64357e+02
+1139 6.11875e+02 1.52547e+02
+1140 6.00051e+02 1.64357e+02
+1141 6.00051e+02 1.52547e+02
+1142 5.88228e+02 1.64357e+02
+1143 5.88228e+02 1.52547e+02
+1144 5.76404e+02 1.64357e+02
+1145 5.76404e+02 1.52547e+02
+1146 5.64581e+02 1.64357e+02
+1147 5.64581e+02 1.52547e+02
+1148 5.52757e+02 1.64357e+02
+1149 5.52757e+02 1.52547e+02
+1150 5.40933e+02 1.64357e+02
+1151 5.40933e+02 1.52547e+02
+1152 5.29109e+02 1.64357e+02
+1153 5.29109e+02 1.52547e+02
+1154 5.17286e+02 1.64357e+02
+1155 5.17286e+02 1.52547e+02
+1156 6.41434e+02 1.70262e+02
+1157 6.41434e+02 1.58452e+02
+1158 6.29611e+02 1.70262e+02
+1159 6.29611e+02 1.58452e+02
+1160 6.17787e+02 1.70262e+02
+1161 6.17787e+02 1.58452e+02
+1162 6.05963e+02 1.70262e+02
+1163 6.05963e+02 1.58452e+02
+1164 5.94140e+02 1.70262e+02
+1165 5.94140e+02 1.58452e+02
+1166 5.82316e+02 1.70262e+02
+1167 5.82316e+02 1.58452e+02
+1168 5.70492e+02 1.70262e+02
+1169 5.70492e+02 1.58452e+02
+1170 5.58669e+02 1.70262e+02
+1171 5.58669e+02 1.58452e+02
+1172 5.46845e+02 1.70262e+02
+1173 5.46845e+02 1.58452e+02
+1174 5.35022e+02 1.70262e+02
+1175 5.35022e+02 1.58452e+02
+1176 5.23198e+02 1.70262e+02
+1177 5.23198e+02 1.58452e+02
+1178 5.11374e+02 1.70262e+02
+1179 5.11374e+02 1.58452e+02
+1180 1.88883e+03 2.04806e+03
+1181 1.87701e+03 2.04806e+03
+1182 1.85336e+03 2.04806e+03
+1183 1.84154e+03 2.04806e+03
+1184 1.82971e+03 2.04806e+03
+1185 1.78242e+03 2.04806e+03
+1186 1.74695e+03 2.04806e+03
+1187 1.72330e+03 2.04806e+03
+1188 1.71147e+03 2.04806e+03
+1189 1.67600e+03 2.04806e+03
+1190 1.65236e+03 2.04806e+03
+1191 9.07466e+02 2.04806e+03
+1192 8.95642e+02 2.04806e+03
+1193 8.71994e+02 2.04806e+03
+1194 8.60171e+02 2.04806e+03
+1195 8.48347e+02 2.04806e+03
+1196 8.01053e+02 2.04806e+03
+1197 7.65581e+02 2.04806e+03
+1198 7.41934e+02 2.04806e+03
+1199 7.30111e+02 2.04806e+03
+1200 6.94640e+02 2.04806e+03
+1201 6.70992e+02 2.04806e+03
+1202 1.87109e+03 2.04216e+03
+1203 1.80015e+03 2.04216e+03
+1204 1.77651e+03 2.04216e+03
+1205 1.75286e+03 2.04216e+03
+1206 8.89730e+02 2.04216e+03
+1207 8.18788e+02 2.04216e+03
+1208 7.95141e+02 2.04216e+03
+1209 7.71494e+02 2.04216e+03
+1210 1.87701e+03 2.03625e+03
+1211 1.85336e+03 2.03625e+03
+1212 1.84154e+03 2.03625e+03
+1213 1.74695e+03 2.03625e+03
+1214 1.72330e+03 2.03625e+03
+1215 1.69965e+03 2.03625e+03
+1216 8.95642e+02 2.03625e+03
+1217 8.71994e+02 2.03625e+03
+1218 8.60171e+02 2.03625e+03
+1219 7.65581e+02 2.03625e+03
+1220 7.41934e+02 2.03625e+03
+1221 7.18287e+02 2.03625e+03
+1222 1.89474e+03 2.03035e+03
+1223 1.87109e+03 2.03035e+03
+1224 1.85927e+03 2.03035e+03
+1225 1.82380e+03 2.03035e+03
+1226 1.81198e+03 2.03035e+03
+1227 1.80015e+03 2.03035e+03
+1228 1.77651e+03 2.03035e+03
+1229 1.76468e+03 2.03035e+03
+1230 1.75286e+03 2.03035e+03
+1231 9.13377e+02 2.03035e+03
+1232 8.89730e+02 2.03035e+03
+1233 8.77906e+02 2.03035e+03
+1234 8.42435e+02 2.03035e+03
+1235 8.30612e+02 2.03035e+03
+1236 8.18788e+02 2.03035e+03
+1237 7.95141e+02 2.03035e+03
+1238 7.83317e+02 2.03035e+03
+1239 7.71494e+02 2.03035e+03
+1240 1.88883e+03 1.70261e+02
+1241 1.87701e+03 1.70261e+02
+1242 1.85336e+03 1.70261e+02
+1243 1.84154e+03 1.70261e+02
+1244 1.82971e+03 1.70261e+02
+1245 1.78242e+03 1.70261e+02
+1246 1.74695e+03 1.70261e+02
+1247 1.72330e+03 1.70261e+02
+1248 1.71147e+03 1.70261e+02
+1249 1.67600e+03 1.70261e+02
+1250 1.65236e+03 1.70261e+02
+1251 9.07466e+02 1.70261e+02
+1252 8.95642e+02 1.70261e+02
+1253 8.71994e+02 1.70261e+02
+1254 8.60171e+02 1.70261e+02
+1255 8.48347e+02 1.70261e+02
+1256 8.01053e+02 1.70261e+02
+1257 7.65581e+02 1.70261e+02
+1258 7.41934e+02 1.70261e+02
+1259 7.30111e+02 1.70261e+02
+1260 6.94640e+02 1.70261e+02
+1261 6.70992e+02 1.70261e+02
+1262 1.87109e+03 1.64357e+02
+1263 1.80015e+03 1.64357e+02
+1264 1.77651e+03 1.64357e+02
+1265 1.75286e+03 1.64357e+02
+1266 8.89730e+02 1.64357e+02
+1267 8.18788e+02 1.64357e+02
+1268 7.95141e+02 1.64357e+02
+1269 7.71494e+02 1.64357e+02
+1270 1.87701e+03 1.58451e+02
+1271 1.85336e+03 1.58451e+02
+1272 1.84154e+03 1.58451e+02
+1273 1.74695e+03 1.58451e+02
+1274 1.72330e+03 1.58451e+02
+1275 1.69965e+03 1.58451e+02
+1276 8.95642e+02 1.58451e+02
+1277 8.71994e+02 1.58451e+02
+1278 8.60171e+02 1.58451e+02
+1279 7.65581e+02 1.58451e+02
+1280 7.41934e+02 1.58451e+02
+1281 7.18287e+02 1.58451e+02
+1282 1.89474e+03 1.52546e+02
+1283 1.87109e+03 1.52546e+02
+1284 1.85927e+03 1.52546e+02
+1285 1.82380e+03 1.52546e+02
+1286 1.81198e+03 1.52546e+02
+1287 1.80015e+03 1.52546e+02
+1288 1.77651e+03 1.52546e+02
+1289 1.76468e+03 1.52546e+02
+1290 1.75286e+03 1.52546e+02
+1291 9.13377e+02 1.52546e+02
+1292 8.89730e+02 1.52546e+02
+1293 8.77906e+02 1.52546e+02
+1294 8.42435e+02 1.52546e+02
+1295 8.30612e+02 1.52546e+02
+1296 8.18788e+02 1.52546e+02
+1297 7.95141e+02 1.52546e+02
+1298 7.83317e+02 1.52546e+02
+1299 7.71494e+02 1.52546e+02
+1300 1.89474e+03 2.04806e+03
+1301 1.88292e+03 2.04806e+03
+1302 1.85927e+03 2.04806e+03
+1303 1.81198e+03 2.04806e+03
+1304 1.76468e+03 2.04806e+03
+1305 1.67009e+03 2.04806e+03
+1306 9.13377e+02 2.04806e+03
+1307 9.01554e+02 2.04806e+03
+1308 8.77906e+02 2.04806e+03
+1309 8.30612e+02 2.04806e+03
+1310 7.83317e+02 2.04806e+03
+1311 6.88728e+02 2.04806e+03
+1312 1.88883e+03 2.04216e+03
+1313 1.82971e+03 2.04216e+03
+1314 1.73512e+03 2.04216e+03
+1315 1.69965e+03 2.04216e+03
+1316 1.67600e+03 2.04216e+03
+1317 9.07466e+02 2.04216e+03
+1318 8.48347e+02 2.04216e+03
+1319 7.53758e+02 2.04216e+03
+1320 7.18287e+02 2.04216e+03
+1321 6.94640e+02 2.04216e+03
+1322 1.88292e+03 2.03625e+03
+1323 1.82380e+03 2.03625e+03
+1324 1.67009e+03 2.03625e+03
+1325 9.01554e+02 2.03625e+03
+1326 8.42435e+02 2.03625e+03
+1327 6.88728e+02 2.03625e+03
+1328 1.78242e+03 2.03035e+03
+1329 1.73512e+03 2.03035e+03
+1330 1.71147e+03 2.03035e+03
+1331 1.65236e+03 2.03035e+03
+1332 8.01053e+02 2.03035e+03
+1333 7.53758e+02 2.03035e+03
+1334 7.30111e+02 2.03035e+03
+1335 6.70992e+02 2.03035e+03
+1336 1.89474e+03 1.70261e+02
+1337 1.88292e+03 1.70261e+02
+1338 1.85927e+03 1.70261e+02
+1339 1.81198e+03 1.70261e+02
+1340 1.76468e+03 1.70261e+02
+1341 1.67009e+03 1.70261e+02
+1342 9.13377e+02 1.70261e+02
+1343 9.01554e+02 1.70261e+02
+1344 8.77906e+02 1.70261e+02
+1345 8.30612e+02 1.70261e+02
+1346 7.83317e+02 1.70261e+02
+1347 6.88728e+02 1.70261e+02
+1348 1.88883e+03 1.64357e+02
+1349 1.82971e+03 1.64357e+02
+1350 1.73512e+03 1.64357e+02
+1351 1.69965e+03 1.64357e+02
+1352 1.67600e+03 1.64357e+02
+1353 9.07466e+02 1.64357e+02
+1354 8.48347e+02 1.64357e+02
+1355 7.53758e+02 1.64357e+02
+1356 7.18287e+02 1.64357e+02
+1357 6.94640e+02 1.64357e+02
+1358 1.88292e+03 1.58451e+02
+1359 1.82380e+03 1.58451e+02
+1360 1.67009e+03 1.58451e+02
+1361 9.01554e+02 1.58451e+02
+1362 8.42435e+02 1.58451e+02
+1363 6.88728e+02 1.58451e+02
+1364 1.78242e+03 1.52546e+02
+1365 1.73512e+03 1.52546e+02
+1366 1.71147e+03 1.52546e+02
+1367 1.65236e+03 1.52546e+02
+1368 8.01053e+02 1.52546e+02
+1369 7.53758e+02 1.52546e+02
+1370 7.30111e+02 1.52546e+02
+1371 6.70992e+02 1.52546e+02
+1372 1.89179e+03 2.05102e+03
+1373 1.67896e+03 2.05102e+03
+1374 9.10422e+02 2.05102e+03
+1375 6.97596e+02 2.05102e+03
+1376 1.73217e+03 2.04511e+03
+1377 7.50802e+02 2.04511e+03
+1378 1.89179e+03 2.03921e+03
+1379 1.67896e+03 2.03921e+03
+1380 9.10422e+02 2.03921e+03
+1381 6.97596e+02 2.03921e+03
+1382 1.83858e+03 2.03330e+03
+1383 8.57215e+02 2.03330e+03
+1384 1.78537e+03 2.02740e+03
+1385 8.04009e+02 2.02740e+03
+1386 1.89179e+03 1.73214e+02
+1387 1.67896e+03 1.73214e+02
+1388 9.10422e+02 1.73214e+02
+1389 6.97596e+02 1.73214e+02
+1390 1.73217e+03 1.67309e+02
+1391 7.50802e+02 1.67309e+02
+1392 1.89179e+03 1.61404e+02
+1393 1.67896e+03 1.61404e+02
+1394 9.10422e+02 1.61404e+02
+1395 6.97596e+02 1.61404e+02
+1396 1.83858e+03 1.55499e+02
+1397 8.57215e+02 1.55499e+02
+1398 1.78537e+03 1.49594e+02
+1399 8.04009e+02 1.49594e+02
+1400 0.00000e+00 0.00000e+00
+EOF
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/HeuristicLab.SGA.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/HeuristicLab.SGA.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/HeuristicLab.SGA.csproj	(revision 1270)
@@ -0,0 +1,141 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E39AF78A-9692-472B-B061-E2F1B1AB2C92}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.SGA</RootNamespace>
+    <AssemblyName>HeuristicLab.SGA-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.SGA-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.SGA-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabSGAPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SGA.cs" />
+    <Compile Include="SGAEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SGAEditor.Designer.cs">
+      <DependentUpon>SGAEditor.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Logging\HeuristicLab.Logging.csproj">
+      <Project>{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}</Project>
+      <Name>HeuristicLab.Logging</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Random\HeuristicLab.Random.csproj">
+      <Project>{47019A74-F7F7-482E-83AA-D3F4F777E879}</Project>
+      <Name>HeuristicLab.Random</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
+      <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
+      <Name>HeuristicLab.Selection</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.SequentialEngine\HeuristicLab.SequentialEngine.csproj">
+      <Project>{B4BE8E53-BA06-4237-9A01-24255F880201}</Project>
+      <Name>HeuristicLab.SequentialEngine</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="SGAEditor.resx">
+      <SubType>Designer</SubType>
+      <DependentUpon>SGAEditor.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/HeuristicLabSGAPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/HeuristicLabSGAPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/HeuristicLabSGAPlugin.cs	(revision 1270)
@@ -0,0 +1,43 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.SGA {
+  /// <summary>
+  /// Plugin class for HeuristicLab.SGA plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.SGA-3.2")]
+  [PluginFile(Filename = "HeuristicLab.SGA-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Evolutionary-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Random-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Selection-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Logging-3.2")]
+  [Dependency(Dependency = "HeuristicLab.SequentialEngine-3.2")]
+  public class HeuristicLabSGAPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.SGA")]
+[assembly: AssemblyDescription("HeuristicLab Standard Genetic Algorithm (SGA)")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("ec039d68-07a5-43cf-ba26-34f41c2d470a")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGA.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGA.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGA.cs	(revision 1270)
@@ -0,0 +1,611 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Evolutionary;
+using HeuristicLab.SequentialEngine;
+using HeuristicLab.Operators;
+using HeuristicLab.Random;
+using HeuristicLab.Logging;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.SGA {
+  /// <summary>
+  /// Class for the heuristic optimization technique "simple genetic algorithm".
+  /// </summary>
+  public class SGA : ItemBase, IEditable {
+    #region Create Operators
+    /// <summary>
+    /// Creates operators for the current instance.
+    /// </summary>
+    /// <param name="engine">The engine where to add the operators.</param>
+    public static void Create(IEngine engine) {
+      engine.OperatorGraph.Clear();
+
+      CombinedOperator co = CreateSGA();
+      co.Name = "SGA";
+      engine.OperatorGraph.AddOperator(co);
+      engine.OperatorGraph.InitialOperator = co;
+
+      engine.Reset();
+    }
+    private static CombinedOperator CreateSGA() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp);
+      op.OperatorGraph.InitialOperator = sp;
+
+      CombinedOperator co1 = CreateVariableInjection();
+      co1.Name = "Variable Injection";
+      op.OperatorGraph.AddOperator(co1);
+      sp.AddSubOperator(co1);
+
+      // place holder for ProblemInjector
+      EmptyOperator eo1 = new EmptyOperator();
+      eo1.Name = "ProblemInjector";
+      op.OperatorGraph.AddOperator(eo1);
+      co1.AddSubOperator(eo1);
+
+      CombinedOperator co2 = CreatePopulationInitialization();
+      co2.Name = "Population Initialization";
+      op.OperatorGraph.AddOperator(co2);
+      sp.AddSubOperator(co2);
+
+      // place holder for SolutionGenerator
+      EmptyOperator eo2 = new EmptyOperator();
+      eo2.Name = "SolutionGenerator";
+      op.OperatorGraph.AddOperator(eo2);
+      co2.AddSubOperator(eo2);
+
+      // place holder for Evaluator
+      EmptyOperator eo3 = new EmptyOperator();
+      eo3.Name = "Evaluator";
+      op.OperatorGraph.AddOperator(eo3);
+      co2.AddSubOperator(eo3);
+
+      CombinedOperator co3 = CreateSGAMain();
+      co3.Name = "SGA Main";
+      op.OperatorGraph.AddOperator(co3);
+      sp.AddSubOperator(co3);
+
+      // place holder for Selector
+      EmptyOperator eo4 = new EmptyOperator();
+      eo4.Name = "Selector";
+      op.OperatorGraph.AddOperator(eo4);
+      co3.AddSubOperator(eo4);
+
+      // place holder for Crossover
+      EmptyOperator eo5 = new EmptyOperator();
+      eo5.Name = "Crossover";
+      op.OperatorGraph.AddOperator(eo5);
+      co3.AddSubOperator(eo5);
+
+      // place holder for Mutator
+      EmptyOperator eo6 = new EmptyOperator();
+      eo6.Name = "Mutator";
+      op.OperatorGraph.AddOperator(eo6);
+      co3.AddSubOperator(eo6);
+
+      // place holder for Evaluator
+      co3.AddSubOperator(eo3);
+
+      return op;
+    }
+    private static CombinedOperator CreateVariableInjection() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp);
+      op.OperatorGraph.InitialOperator = sp;
+
+      RandomInjector ri = new RandomInjector();
+      op.OperatorGraph.AddOperator(ri);
+      sp.AddSubOperator(ri);
+
+      OperatorExtractor oe = new OperatorExtractor();
+      oe.Name = "ProblemInjector";
+      oe.GetVariableInfo("Operator").ActualName = "ProblemInjector";
+      op.OperatorGraph.AddOperator(oe);
+      sp.AddSubOperator(oe);
+
+      VariableInjector vi = new VariableInjector();
+      vi.AddVariable(new Variable("PopulationSize", new IntData(100)));
+      vi.AddVariable(new Variable("EvaluatedSolutions", new IntData()));
+      vi.AddVariable(new Variable("Parents", new IntData(200)));
+      vi.AddVariable(new Variable("MutationRate", new DoubleData(0.05)));
+      vi.AddVariable(new Variable("Elites", new IntData(1)));
+      vi.AddVariable(new Variable("Generations", new IntData()));
+      vi.AddVariable(new Variable("MaximumGenerations", new IntData(1000)));
+      op.OperatorGraph.AddOperator(vi);
+      sp.AddSubOperator(vi);
+
+      return op;
+    }
+    private static CombinedOperator CreatePopulationInitialization() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp1 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp1);
+      op.OperatorGraph.InitialOperator = sp1;
+
+      SubScopesCreater ssc = new SubScopesCreater();
+      ssc.GetVariableInfo("SubScopes").ActualName = "PopulationSize";
+      op.OperatorGraph.AddOperator(ssc);
+      sp1.AddSubOperator(ssc);
+
+      UniformSequentialSubScopesProcessor ussp = new UniformSequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ussp);
+      sp1.AddSubOperator(ussp);
+
+      SequentialProcessor sp2 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp2);
+      ussp.AddSubOperator(sp2);
+
+      OperatorExtractor oe1 = new OperatorExtractor();
+      oe1.Name = "SolutionGenerator";
+      oe1.GetVariableInfo("Operator").ActualName = "SolutionGenerator";
+      op.OperatorGraph.AddOperator(oe1);
+      sp2.AddSubOperator(oe1);
+
+      OperatorExtractor oe2 = new OperatorExtractor();
+      oe2.Name = "Evaluator";
+      oe2.GetVariableInfo("Operator").ActualName = "Evaluator";
+      op.OperatorGraph.AddOperator(oe2);
+      sp2.AddSubOperator(oe2);
+
+      Counter c = new Counter();
+      c.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      op.OperatorGraph.AddOperator(c);
+      sp2.AddSubOperator(c);
+
+      Sorter s = new Sorter();
+      s.GetVariableInfo("Descending").ActualName = "Maximization";
+      s.GetVariableInfo("Value").ActualName = "Quality";
+      op.OperatorGraph.AddOperator(s);
+      sp1.AddSubOperator(s);
+
+      return op;
+    }
+    private static CombinedOperator CreateSGAMain() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp);
+      op.OperatorGraph.InitialOperator = sp;
+
+      OperatorExtractor oe = new OperatorExtractor();
+      oe.Name = "Selector";
+      oe.GetVariableInfo("Operator").ActualName = "Selector";
+      op.OperatorGraph.AddOperator(oe);
+      sp.AddSubOperator(oe);
+
+      SequentialSubScopesProcessor ssp = new SequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ssp);
+      sp.AddSubOperator(ssp);
+
+      EmptyOperator eo = new EmptyOperator();
+      op.OperatorGraph.AddOperator(eo);
+      ssp.AddSubOperator(eo);
+
+      CombinedOperator co1 = CreateCreateChildren();
+      co1.Name = "Create Children";
+      op.OperatorGraph.AddOperator(co1);
+      ssp.AddSubOperator(co1);
+
+      CombinedOperator co2 = CreateReplacement();
+      co2.Name = "Replacement";
+      op.OperatorGraph.AddOperator(co2);
+      sp.AddSubOperator(co2);
+
+      QualityLogger ql = new QualityLogger();
+      op.OperatorGraph.AddOperator(ql);
+      sp.AddSubOperator(ql);
+
+      BestAverageWorstQualityCalculator bawqc = new BestAverageWorstQualityCalculator();
+      op.OperatorGraph.AddOperator(bawqc);
+      sp.AddSubOperator(bawqc);
+
+      DataCollector dc = new DataCollector();
+      ItemList<StringData> names = dc.GetVariable("VariableNames").GetValue<ItemList<StringData>>();
+      names.Add(new StringData("BestQuality"));
+      names.Add(new StringData("AverageQuality"));
+      names.Add(new StringData("WorstQuality"));
+      op.OperatorGraph.AddOperator(dc);
+      sp.AddSubOperator(dc);
+
+      LinechartInjector lci = new LinechartInjector();
+      lci.GetVariableInfo("Linechart").ActualName = "Quality Linechart";
+      lci.GetVariable("NumberOfLines").GetValue<IntData>().Data = 3;
+      op.OperatorGraph.AddOperator(lci);
+      sp.AddSubOperator(lci);
+
+      Counter c = new Counter();
+      c.GetVariableInfo("Value").ActualName = "Generations";
+      op.OperatorGraph.AddOperator(c);
+      sp.AddSubOperator(c);
+
+      LessThanComparator ltc = new LessThanComparator();
+      ltc.GetVariableInfo("LeftSide").ActualName = "Generations";
+      ltc.GetVariableInfo("RightSide").ActualName = "MaximumGenerations";
+      ltc.GetVariableInfo("Result").ActualName = "GenerationsCondition";
+      op.OperatorGraph.AddOperator(ltc);
+      sp.AddSubOperator(ltc);
+
+      ConditionalBranch cb = new ConditionalBranch();
+      cb.GetVariableInfo("Condition").ActualName = "GenerationsCondition";
+      op.OperatorGraph.AddOperator(cb);
+      sp.AddSubOperator(cb);
+
+      cb.AddSubOperator(sp);
+
+      return op;
+    }
+    private static CombinedOperator CreateCreateChildren() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp1 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp1);
+      op.OperatorGraph.InitialOperator = sp1;
+
+      ChildrenInitializer ci = new ChildrenInitializer();
+      op.OperatorGraph.AddOperator(ci);
+      sp1.AddSubOperator(ci);
+
+      UniformSequentialSubScopesProcessor ussp = new UniformSequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ussp);
+      sp1.AddSubOperator(ussp);
+
+      SequentialProcessor sp2 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp2);
+      ussp.AddSubOperator(sp2);
+
+      OperatorExtractor oe1 = new OperatorExtractor();
+      oe1.Name = "Crossover";
+      oe1.GetVariableInfo("Operator").ActualName = "Crossover";
+      op.OperatorGraph.AddOperator(oe1);
+      sp2.AddSubOperator(oe1);
+
+      StochasticBranch hb = new StochasticBranch();
+      hb.GetVariableInfo("Probability").ActualName = "MutationRate";
+      op.OperatorGraph.AddOperator(hb);
+      sp2.AddSubOperator(hb);
+
+      OperatorExtractor oe2 = new OperatorExtractor();
+      oe2.Name = "Mutator";
+      oe2.GetVariableInfo("Operator").ActualName = "Mutator";
+      op.OperatorGraph.AddOperator(oe2);
+      hb.AddSubOperator(oe2);
+
+      OperatorExtractor oe3 = new OperatorExtractor();
+      oe3.Name = "Evaluator";
+      oe3.GetVariableInfo("Operator").ActualName = "Evaluator";
+      op.OperatorGraph.AddOperator(oe3);
+      sp2.AddSubOperator(oe3);
+
+      SubScopesRemover sr = new SubScopesRemover();
+      sr.GetVariableInfo("SubScopeIndex").Local = true;
+      op.OperatorGraph.AddOperator(sr);
+      sp2.AddSubOperator(sr);
+
+      Counter c = new Counter();
+      c.GetVariableInfo("Value").ActualName = "EvaluatedSolutions";
+      op.OperatorGraph.AddOperator(c);
+      sp2.AddSubOperator(c);
+
+      Sorter s = new Sorter();
+      s.GetVariableInfo("Descending").ActualName = "Maximization";
+      s.GetVariableInfo("Value").ActualName = "Quality";
+      op.OperatorGraph.AddOperator(s);
+      sp1.AddSubOperator(s);
+
+      return op;
+    }
+    private static CombinedOperator CreateReplacement() {
+      CombinedOperator op = new CombinedOperator();
+      SequentialProcessor sp1 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp1);
+      op.OperatorGraph.InitialOperator = sp1;
+
+      SequentialSubScopesProcessor ssp = new SequentialSubScopesProcessor();
+      op.OperatorGraph.AddOperator(ssp);
+      sp1.AddSubOperator(ssp);
+
+      SequentialProcessor sp2 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp2);
+      ssp.AddSubOperator(sp2);
+
+      LeftSelector ls = new LeftSelector();
+      ls.GetVariableInfo("Selected").ActualName = "Elites";
+      op.OperatorGraph.AddOperator(ls);
+      sp2.AddSubOperator(ls);
+
+      RightReducer rr = new RightReducer();
+      op.OperatorGraph.AddOperator(rr);
+      sp2.AddSubOperator(rr);
+
+      SequentialProcessor sp3 = new SequentialProcessor();
+      op.OperatorGraph.AddOperator(sp3);
+      ssp.AddSubOperator(sp3);
+
+      RightSelector rs = new RightSelector();
+      rs.GetVariableInfo("Selected").ActualName = "Elites";
+      op.OperatorGraph.AddOperator(rs);
+      sp3.AddSubOperator(rs);
+
+      LeftReducer lr = new LeftReducer();
+      op.OperatorGraph.AddOperator(lr);
+      sp3.AddSubOperator(lr);
+
+      MergingReducer mr = new MergingReducer();
+      op.OperatorGraph.AddOperator(mr);
+      sp1.AddSubOperator(mr);
+
+      Sorter s = new Sorter();
+      s.GetVariableInfo("Descending").ActualName = "Maximization";
+      s.GetVariableInfo("Value").ActualName = "Quality";
+      op.OperatorGraph.AddOperator(s);
+      sp1.AddSubOperator(s);
+
+      return op;
+    }
+    #endregion
+
+    #region Properties
+    private IEngine myEngine;
+    /// <summary>
+    /// Gets the engine of the current instance.
+    /// </summary>
+    public IEngine Engine {
+      get { return myEngine; }
+    }
+    private BoolData mySetSeedRandomly;
+    /// <summary>
+    /// Gets or sets the flag whether to set the seed randomly or not.
+    /// </summary>
+    public bool SetSeedRandomly {
+      get { return mySetSeedRandomly.Data; }
+      set { mySetSeedRandomly.Data = value; }
+    }
+    private IntData mySeed;
+    /// <summary>
+    /// Gets or sets the value of the seed of the current instance.
+    /// </summary>
+    public int Seed {
+      get { return mySeed.Data; }
+      set { mySeed.Data = value; }
+    }
+    private IntData myPopulationSize;
+    private IntData myParents;
+    /// <summary>
+    /// Gets or sets the population size of the current instance.
+    /// </summary>
+    /// <remarks>The number of parents is set to two times the population size.</remarks>
+    public int PopulationSize {
+      get { return myPopulationSize.Data; }
+      set {
+        myPopulationSize.Data = value;
+        myParents.Data = value * 2;
+      }
+    }
+    private IntData myMaximumGenerations;
+    /// <summary>
+    /// Gets or sets the number of maximum generations.
+    /// </summary>
+    public int MaximumGenerations {
+      get { return myMaximumGenerations.Data; }
+      set { myMaximumGenerations.Data = value; }
+    }
+    private DoubleData myMutationRate;
+    /// <summary>
+    /// Gets or sets the mutation rate of the current instance.
+    /// </summary>
+    public double MutationRate {
+      get { return myMutationRate.Data; }
+      set { myMutationRate.Data = value; }
+    }
+    private IntData myElites;
+    /// <summary>
+    /// Gets or sets the elites of the current instance.
+    /// </summary>
+    public int Elites {
+      get { return myElites.Data; }
+      set { myElites.Data = value; }
+    }
+    private CombinedOperator mySGA;
+    private IOperator myVariableInjection;
+    /// <summary>
+    /// Gets or sets the problem injector of the current instance.
+    /// </summary>
+    public IOperator ProblemInjector {
+      get { return myVariableInjection.SubOperators[0]; }
+      set {
+        value.Name = "ProblemInjector";
+        mySGA.OperatorGraph.RemoveOperator(ProblemInjector.Guid);
+        mySGA.OperatorGraph.AddOperator(value);
+        myVariableInjection.AddSubOperator(value, 0);
+      }
+    }
+    private IOperator myPopulationInitialization;
+    /// <summary>
+    /// Gets or sets the solution generator of the current instance.
+    /// </summary>
+    public IOperator SolutionGenerator {
+      get { return myPopulationInitialization.SubOperators[0]; }
+      set {
+        value.Name = "SolutionGenerator";
+        mySGA.OperatorGraph.RemoveOperator(SolutionGenerator.Guid);
+        mySGA.OperatorGraph.AddOperator(value);
+        myPopulationInitialization.AddSubOperator(value, 0);
+      }
+    }
+    /// <summary>
+    /// Gets or sets the evaluator of the current instance.
+    /// </summary>
+    public IOperator Evaluator {
+      get { return myPopulationInitialization.SubOperators[1]; }
+      set {
+        value.Name = "Evaluator";
+        mySGA.OperatorGraph.RemoveOperator(Evaluator.Guid);
+        mySGA.OperatorGraph.AddOperator(value);
+        myPopulationInitialization.AddSubOperator(value, 1);
+        mySGAMain.AddSubOperator(value, 3);
+      }
+    }
+    private IOperator mySGAMain;
+    /// <summary>
+    /// Gets or sets the selection operator of the current instance.
+    /// </summary>
+    public IOperator Selector {
+      get { return mySGAMain.SubOperators[0]; }
+      set {
+        value.Name = "Selector";
+        mySGA.OperatorGraph.RemoveOperator(Selector.Guid);
+        mySGA.OperatorGraph.AddOperator(value);
+        mySGAMain.AddSubOperator(value, 0);
+      }
+    }
+    /// <summary>
+    /// Gets or sets the crossover operator of the current instance.
+    /// </summary>
+    public IOperator Crossover {
+      get { return mySGAMain.SubOperators[1]; }
+      set {
+        value.Name = "Crossover";
+        mySGA.OperatorGraph.RemoveOperator(Crossover.Guid);
+        mySGA.OperatorGraph.AddOperator(value);
+        mySGAMain.AddSubOperator(value, 1);
+      }
+    }
+    /// <summary>
+    /// Gets or sets the mutation operator of the current instance.
+    /// </summary>
+    public IOperator Mutator {
+      get { return mySGAMain.SubOperators[2]; }
+      set {
+        value.Name = "Mutator";
+        mySGA.OperatorGraph.RemoveOperator(Mutator.Guid);
+        mySGA.OperatorGraph.AddOperator(value);
+        mySGAMain.AddSubOperator(value, 2);
+      }
+    }
+    #endregion
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SGA"/>.
+    /// </summary>
+    public SGA() {
+      myEngine = new SequentialEngine.SequentialEngine();
+      Create(myEngine);
+      SetReferences();
+    }
+
+    /// <summary>
+    /// Creates a new instance of the <see cref="SGAEditor"/> class.
+    /// </summary>
+    /// <returns>The created instance of the <see cref="SGAEditor"/>.</returns>
+    public override IView CreateView() {
+      return new SGAEditor(this);
+    }
+    /// <summary>
+    /// Creates a new instance of the <see cref="SGAEditor"/> class.
+    /// </summary>
+    /// <returns>The created instance of the <see cref="SGAEditor"/>.</returns>
+    public virtual IEditor CreateEditor() {
+      return new SGAEditor(this);
+    }
+
+    /// <summary>
+    /// Clones the current instance (deep clone).
+    /// </summary>
+    /// <remarks>Deep clone through <see cref="Auxiliary.Clone"/> method of helper class 
+    /// <see cref="Auxiliary"/>.</remarks>
+    /// <param name="clonedObjects">Dictionary of all already cloned objects. (Needed to avoid cycles.)</param>
+    /// <returns>The cloned object as <see cref="SGA"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SGA clone = new SGA();
+      clonedObjects.Add(Guid, clone);
+      clone.myEngine = (IEngine)Auxiliary.Clone(Engine, clonedObjects);
+      return clone;
+    }
+
+    #region SetReferences Method
+    private void SetReferences() {
+      // SGA
+      CombinedOperator co1 = (CombinedOperator)Engine.OperatorGraph.InitialOperator;
+      mySGA = co1;
+      // SequentialProcessor in SGA
+      SequentialProcessor sp1 = (SequentialProcessor)co1.OperatorGraph.InitialOperator;
+      // Variable Injection
+      CombinedOperator co2 = (CombinedOperator)sp1.SubOperators[0];
+      myVariableInjection = co2;
+      // SequentialProcessor in Variable Injection
+      SequentialProcessor sp2 = (SequentialProcessor)co2.OperatorGraph.InitialOperator;
+      // RandomInjector
+      RandomInjector ri = (RandomInjector)sp2.SubOperators[0];
+      mySetSeedRandomly = ri.GetVariable("SetSeedRandomly").GetValue<BoolData>();
+      mySeed = ri.GetVariable("Seed").GetValue<IntData>();
+      // VariableInjector
+      VariableInjector vi = (VariableInjector)sp2.SubOperators[2];
+      myPopulationSize = vi.GetVariable("PopulationSize").GetValue<IntData>();
+      myParents = vi.GetVariable("Parents").GetValue<IntData>();
+      myMaximumGenerations = vi.GetVariable("MaximumGenerations").GetValue<IntData>();
+      myMutationRate = vi.GetVariable("MutationRate").GetValue<DoubleData>();
+      myElites = vi.GetVariable("Elites").GetValue<IntData>();
+      // Population Initialization
+      CombinedOperator co3 = (CombinedOperator)sp1.SubOperators[1];
+      myPopulationInitialization = co3;
+      // SGA Main
+      CombinedOperator co4 = (CombinedOperator)sp1.SubOperators[2];
+      mySGAMain = co4;
+    }
+    #endregion
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The engine of the current instance is saved as a child node with the tag name 
+    /// <c>Engine</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">A dictionary of all already persisted objects. (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Engine", Engine, document, persistedObjects));
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted instance from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The elements of the current instance must be saved in a special way, see 
+    /// <see cref="GetXmlNode"/>.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myEngine = (IEngine)PersistenceManager.Restore(node.SelectSingleNode("Engine"), restoredObjects);
+      SetReferences();
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,644 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.SGA {
+  partial class SGAEditor {
+    /// <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 (chooseOperatorDialog != null) chooseOperatorDialog.Dispose();
+      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.executeButton = new System.Windows.Forms.Button();
+      this.tabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.setEvaluationButton = new System.Windows.Forms.Button();
+      this.setMutationButton = new System.Windows.Forms.Button();
+      this.setCrossoverButton = new System.Windows.Forms.Button();
+      this.setSelectionButton = new System.Windows.Forms.Button();
+      this.setSolutionGenerationButton = new System.Windows.Forms.Button();
+      this.setProblemInitializationButton = new System.Windows.Forms.Button();
+      this.evaluationTextBox = new System.Windows.Forms.TextBox();
+      this.mutationTextBox = new System.Windows.Forms.TextBox();
+      this.crossoverTextBox = new System.Windows.Forms.TextBox();
+      this.selectionTextBox = new System.Windows.Forms.TextBox();
+      this.solutionGenerationTextBox = new System.Windows.Forms.TextBox();
+      this.problemInitializationTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyCheckBox = new System.Windows.Forms.CheckBox();
+      this.elitesTextBox = new System.Windows.Forms.TextBox();
+      this.evaluationLabel = new System.Windows.Forms.Label();
+      this.mutationLabel = new System.Windows.Forms.Label();
+      this.selectionLabel = new System.Windows.Forms.Label();
+      this.crossoverLabel = new System.Windows.Forms.Label();
+      this.solutionGenerationLabel = new System.Windows.Forms.Label();
+      this.problemInitializationLabel = new System.Windows.Forms.Label();
+      this.elitesLabel = new System.Windows.Forms.Label();
+      this.mutationRateTextBox = new System.Windows.Forms.TextBox();
+      this.mutationRateLabel = new System.Windows.Forms.Label();
+      this.maximumGenerationsTextBox = new System.Windows.Forms.TextBox();
+      this.maximumGenerationsLabel = new System.Windows.Forms.Label();
+      this.randomSeedTextBox = new System.Windows.Forms.TextBox();
+      this.populationSizeTextBox = new System.Windows.Forms.TextBox();
+      this.setRandomSeedRandomlyLabel = new System.Windows.Forms.Label();
+      this.randomSeedLabel = new System.Windows.Forms.Label();
+      this.populationSizeLabel = new System.Windows.Forms.Label();
+      this.scopesTabPage = new System.Windows.Forms.TabPage();
+      this.scopeView = new HeuristicLab.Core.ScopeView();
+      this.abortButton = new System.Windows.Forms.Button();
+      this.resetButton = new System.Windows.Forms.Button();
+      this.cloneEngineButton = new System.Windows.Forms.Button();
+      this.viewProblemInitializationButton = new System.Windows.Forms.Button();
+      this.viewSolutionGenerationButton = new System.Windows.Forms.Button();
+      this.viewSelectionButton = new System.Windows.Forms.Button();
+      this.viewCrossoverButton = new System.Windows.Forms.Button();
+      this.viewMutationButton = new System.Windows.Forms.Button();
+      this.viewEvaluationButton = new System.Windows.Forms.Button();
+      this.tabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.scopesTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // executeButton
+      // 
+      this.executeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.executeButton.Location = new System.Drawing.Point(0, 396);
+      this.executeButton.Name = "executeButton";
+      this.executeButton.Size = new System.Drawing.Size(75, 23);
+      this.executeButton.TabIndex = 1;
+      this.executeButton.Text = "&Execute";
+      this.executeButton.UseVisualStyleBackColor = true;
+      this.executeButton.Click += new System.EventHandler(this.executeButton_Click);
+      // 
+      // tabControl
+      // 
+      this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.tabControl.Controls.Add(this.parametersTabPage);
+      this.tabControl.Controls.Add(this.scopesTabPage);
+      this.tabControl.Location = new System.Drawing.Point(0, 0);
+      this.tabControl.Name = "tabControl";
+      this.tabControl.SelectedIndex = 0;
+      this.tabControl.Size = new System.Drawing.Size(526, 390);
+      this.tabControl.TabIndex = 0;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.setEvaluationButton);
+      this.parametersTabPage.Controls.Add(this.setMutationButton);
+      this.parametersTabPage.Controls.Add(this.setCrossoverButton);
+      this.parametersTabPage.Controls.Add(this.setSelectionButton);
+      this.parametersTabPage.Controls.Add(this.setSolutionGenerationButton);
+      this.parametersTabPage.Controls.Add(this.viewEvaluationButton);
+      this.parametersTabPage.Controls.Add(this.viewMutationButton);
+      this.parametersTabPage.Controls.Add(this.viewCrossoverButton);
+      this.parametersTabPage.Controls.Add(this.viewSelectionButton);
+      this.parametersTabPage.Controls.Add(this.viewSolutionGenerationButton);
+      this.parametersTabPage.Controls.Add(this.viewProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.setProblemInitializationButton);
+      this.parametersTabPage.Controls.Add(this.evaluationTextBox);
+      this.parametersTabPage.Controls.Add(this.mutationTextBox);
+      this.parametersTabPage.Controls.Add(this.crossoverTextBox);
+      this.parametersTabPage.Controls.Add(this.selectionTextBox);
+      this.parametersTabPage.Controls.Add(this.solutionGenerationTextBox);
+      this.parametersTabPage.Controls.Add(this.problemInitializationTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyCheckBox);
+      this.parametersTabPage.Controls.Add(this.elitesTextBox);
+      this.parametersTabPage.Controls.Add(this.evaluationLabel);
+      this.parametersTabPage.Controls.Add(this.mutationLabel);
+      this.parametersTabPage.Controls.Add(this.selectionLabel);
+      this.parametersTabPage.Controls.Add(this.crossoverLabel);
+      this.parametersTabPage.Controls.Add(this.solutionGenerationLabel);
+      this.parametersTabPage.Controls.Add(this.problemInitializationLabel);
+      this.parametersTabPage.Controls.Add(this.elitesLabel);
+      this.parametersTabPage.Controls.Add(this.mutationRateTextBox);
+      this.parametersTabPage.Controls.Add(this.mutationRateLabel);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsTextBox);
+      this.parametersTabPage.Controls.Add(this.maximumGenerationsLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedTextBox);
+      this.parametersTabPage.Controls.Add(this.populationSizeTextBox);
+      this.parametersTabPage.Controls.Add(this.setRandomSeedRandomlyLabel);
+      this.parametersTabPage.Controls.Add(this.randomSeedLabel);
+      this.parametersTabPage.Controls.Add(this.populationSizeLabel);
+      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(518, 364);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // setEvaluationButton
+      // 
+      this.setEvaluationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setEvaluationButton.Location = new System.Drawing.Point(469, 338);
+      this.setEvaluationButton.Name = "setEvaluationButton";
+      this.setEvaluationButton.Size = new System.Drawing.Size(43, 20);
+      this.setEvaluationButton.TabIndex = 35;
+      this.setEvaluationButton.Text = "Set...";
+      this.setEvaluationButton.UseVisualStyleBackColor = true;
+      this.setEvaluationButton.Click += new System.EventHandler(this.setEvaluationButton_Click);
+      // 
+      // setMutationButton
+      // 
+      this.setMutationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setMutationButton.Location = new System.Drawing.Point(469, 312);
+      this.setMutationButton.Name = "setMutationButton";
+      this.setMutationButton.Size = new System.Drawing.Size(43, 20);
+      this.setMutationButton.TabIndex = 31;
+      this.setMutationButton.Text = "Set...";
+      this.setMutationButton.UseVisualStyleBackColor = true;
+      this.setMutationButton.Click += new System.EventHandler(this.setMutationButton_Click);
+      // 
+      // setCrossoverButton
+      // 
+      this.setCrossoverButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setCrossoverButton.Location = new System.Drawing.Point(469, 286);
+      this.setCrossoverButton.Name = "setCrossoverButton";
+      this.setCrossoverButton.Size = new System.Drawing.Size(43, 20);
+      this.setCrossoverButton.TabIndex = 27;
+      this.setCrossoverButton.Text = "Set...";
+      this.setCrossoverButton.UseVisualStyleBackColor = true;
+      this.setCrossoverButton.Click += new System.EventHandler(this.setCrossoverButton_Click);
+      // 
+      // setSelectionButton
+      // 
+      this.setSelectionButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setSelectionButton.Location = new System.Drawing.Point(469, 260);
+      this.setSelectionButton.Name = "setSelectionButton";
+      this.setSelectionButton.Size = new System.Drawing.Size(43, 20);
+      this.setSelectionButton.TabIndex = 23;
+      this.setSelectionButton.Text = "Set...";
+      this.setSelectionButton.UseVisualStyleBackColor = true;
+      this.setSelectionButton.Click += new System.EventHandler(this.setSelectionButton_Click);
+      // 
+      // setSolutionGenerationButton
+      // 
+      this.setSolutionGenerationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setSolutionGenerationButton.Location = new System.Drawing.Point(469, 234);
+      this.setSolutionGenerationButton.Name = "setSolutionGenerationButton";
+      this.setSolutionGenerationButton.Size = new System.Drawing.Size(43, 20);
+      this.setSolutionGenerationButton.TabIndex = 19;
+      this.setSolutionGenerationButton.Text = "Set...";
+      this.setSolutionGenerationButton.UseVisualStyleBackColor = true;
+      this.setSolutionGenerationButton.Click += new System.EventHandler(this.setSolutionGenerationButton_Click);
+      // 
+      // setProblemInitializationButton
+      // 
+      this.setProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setProblemInitializationButton.Location = new System.Drawing.Point(469, 208);
+      this.setProblemInitializationButton.Name = "setProblemInitializationButton";
+      this.setProblemInitializationButton.Size = new System.Drawing.Size(43, 20);
+      this.setProblemInitializationButton.TabIndex = 15;
+      this.setProblemInitializationButton.Text = "Set...";
+      this.setProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.setProblemInitializationButton.Click += new System.EventHandler(this.setProblemInitializationButton_Click);
+      // 
+      // evaluationTextBox
+      // 
+      this.evaluationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.evaluationTextBox.Location = new System.Drawing.Point(218, 338);
+      this.evaluationTextBox.Name = "evaluationTextBox";
+      this.evaluationTextBox.ReadOnly = true;
+      this.evaluationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.evaluationTextBox.TabIndex = 33;
+      // 
+      // mutationTextBox
+      // 
+      this.mutationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationTextBox.Location = new System.Drawing.Point(218, 312);
+      this.mutationTextBox.Name = "mutationTextBox";
+      this.mutationTextBox.ReadOnly = true;
+      this.mutationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.mutationTextBox.TabIndex = 29;
+      // 
+      // crossoverTextBox
+      // 
+      this.crossoverTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.crossoverTextBox.Location = new System.Drawing.Point(218, 286);
+      this.crossoverTextBox.Name = "crossoverTextBox";
+      this.crossoverTextBox.ReadOnly = true;
+      this.crossoverTextBox.Size = new System.Drawing.Size(186, 20);
+      this.crossoverTextBox.TabIndex = 25;
+      // 
+      // selectionTextBox
+      // 
+      this.selectionTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionTextBox.Location = new System.Drawing.Point(218, 260);
+      this.selectionTextBox.Name = "selectionTextBox";
+      this.selectionTextBox.ReadOnly = true;
+      this.selectionTextBox.Size = new System.Drawing.Size(186, 20);
+      this.selectionTextBox.TabIndex = 21;
+      // 
+      // solutionGenerationTextBox
+      // 
+      this.solutionGenerationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.solutionGenerationTextBox.Location = new System.Drawing.Point(218, 234);
+      this.solutionGenerationTextBox.Name = "solutionGenerationTextBox";
+      this.solutionGenerationTextBox.ReadOnly = true;
+      this.solutionGenerationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.solutionGenerationTextBox.TabIndex = 17;
+      // 
+      // problemInitializationTextBox
+      // 
+      this.problemInitializationTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationTextBox.Location = new System.Drawing.Point(218, 208);
+      this.problemInitializationTextBox.Name = "problemInitializationTextBox";
+      this.problemInitializationTextBox.ReadOnly = true;
+      this.problemInitializationTextBox.Size = new System.Drawing.Size(186, 20);
+      this.problemInitializationTextBox.TabIndex = 13;
+      // 
+      // setRandomSeedRandomlyCheckBox
+      // 
+      this.setRandomSeedRandomlyCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyCheckBox.AutoSize = true;
+      this.setRandomSeedRandomlyCheckBox.Location = new System.Drawing.Point(218, 6);
+      this.setRandomSeedRandomlyCheckBox.Name = "setRandomSeedRandomlyCheckBox";
+      this.setRandomSeedRandomlyCheckBox.Size = new System.Drawing.Size(15, 14);
+      this.setRandomSeedRandomlyCheckBox.TabIndex = 1;
+      this.setRandomSeedRandomlyCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // elitesTextBox
+      // 
+      this.elitesTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesTextBox.Location = new System.Drawing.Point(218, 156);
+      this.elitesTextBox.Name = "elitesTextBox";
+      this.elitesTextBox.Size = new System.Drawing.Size(186, 20);
+      this.elitesTextBox.TabIndex = 11;
+      // 
+      // evaluationLabel
+      // 
+      this.evaluationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.evaluationLabel.AutoSize = true;
+      this.evaluationLabel.Location = new System.Drawing.Point(65, 341);
+      this.evaluationLabel.Name = "evaluationLabel";
+      this.evaluationLabel.Size = new System.Drawing.Size(60, 13);
+      this.evaluationLabel.TabIndex = 32;
+      this.evaluationLabel.Text = "&Evaluation:";
+      // 
+      // mutationLabel
+      // 
+      this.mutationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationLabel.AutoSize = true;
+      this.mutationLabel.Location = new System.Drawing.Point(65, 315);
+      this.mutationLabel.Name = "mutationLabel";
+      this.mutationLabel.Size = new System.Drawing.Size(51, 13);
+      this.mutationLabel.TabIndex = 28;
+      this.mutationLabel.Text = "&Mutation:";
+      // 
+      // selectionLabel
+      // 
+      this.selectionLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.selectionLabel.AutoSize = true;
+      this.selectionLabel.Location = new System.Drawing.Point(65, 263);
+      this.selectionLabel.Name = "selectionLabel";
+      this.selectionLabel.Size = new System.Drawing.Size(54, 13);
+      this.selectionLabel.TabIndex = 20;
+      this.selectionLabel.Text = "&Selection:";
+      // 
+      // crossoverLabel
+      // 
+      this.crossoverLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.crossoverLabel.AutoSize = true;
+      this.crossoverLabel.Location = new System.Drawing.Point(65, 289);
+      this.crossoverLabel.Name = "crossoverLabel";
+      this.crossoverLabel.Size = new System.Drawing.Size(57, 13);
+      this.crossoverLabel.TabIndex = 24;
+      this.crossoverLabel.Text = "&Crossover:";
+      // 
+      // solutionGenerationLabel
+      // 
+      this.solutionGenerationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.solutionGenerationLabel.AutoSize = true;
+      this.solutionGenerationLabel.Location = new System.Drawing.Point(65, 237);
+      this.solutionGenerationLabel.Name = "solutionGenerationLabel";
+      this.solutionGenerationLabel.Size = new System.Drawing.Size(103, 13);
+      this.solutionGenerationLabel.TabIndex = 16;
+      this.solutionGenerationLabel.Text = "&Solution Generation:";
+      // 
+      // problemInitializationLabel
+      // 
+      this.problemInitializationLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.problemInitializationLabel.AutoSize = true;
+      this.problemInitializationLabel.Location = new System.Drawing.Point(65, 211);
+      this.problemInitializationLabel.Name = "problemInitializationLabel";
+      this.problemInitializationLabel.Size = new System.Drawing.Size(105, 13);
+      this.problemInitializationLabel.TabIndex = 12;
+      this.problemInitializationLabel.Text = "&Problem Initialization:";
+      // 
+      // elitesLabel
+      // 
+      this.elitesLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.elitesLabel.AutoSize = true;
+      this.elitesLabel.Location = new System.Drawing.Point(65, 159);
+      this.elitesLabel.Name = "elitesLabel";
+      this.elitesLabel.Size = new System.Drawing.Size(35, 13);
+      this.elitesLabel.TabIndex = 10;
+      this.elitesLabel.Text = "&Elites:";
+      // 
+      // mutationRateTextBox
+      // 
+      this.mutationRateTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateTextBox.Location = new System.Drawing.Point(218, 130);
+      this.mutationRateTextBox.Name = "mutationRateTextBox";
+      this.mutationRateTextBox.Size = new System.Drawing.Size(186, 20);
+      this.mutationRateTextBox.TabIndex = 9;
+      // 
+      // mutationRateLabel
+      // 
+      this.mutationRateLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.mutationRateLabel.AutoSize = true;
+      this.mutationRateLabel.Location = new System.Drawing.Point(65, 133);
+      this.mutationRateLabel.Name = "mutationRateLabel";
+      this.mutationRateLabel.Size = new System.Drawing.Size(77, 13);
+      this.mutationRateLabel.TabIndex = 8;
+      this.mutationRateLabel.Text = "&Mutation Rate:";
+      // 
+      // maximumGenerationsTextBox
+      // 
+      this.maximumGenerationsTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsTextBox.Location = new System.Drawing.Point(218, 104);
+      this.maximumGenerationsTextBox.Name = "maximumGenerationsTextBox";
+      this.maximumGenerationsTextBox.Size = new System.Drawing.Size(186, 20);
+      this.maximumGenerationsTextBox.TabIndex = 7;
+      // 
+      // maximumGenerationsLabel
+      // 
+      this.maximumGenerationsLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumGenerationsLabel.AutoSize = true;
+      this.maximumGenerationsLabel.Location = new System.Drawing.Point(65, 107);
+      this.maximumGenerationsLabel.Name = "maximumGenerationsLabel";
+      this.maximumGenerationsLabel.Size = new System.Drawing.Size(114, 13);
+      this.maximumGenerationsLabel.TabIndex = 6;
+      this.maximumGenerationsLabel.Text = "Maximum &Generations:";
+      // 
+      // randomSeedTextBox
+      // 
+      this.randomSeedTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedTextBox.Location = new System.Drawing.Point(218, 26);
+      this.randomSeedTextBox.Name = "randomSeedTextBox";
+      this.randomSeedTextBox.Size = new System.Drawing.Size(186, 20);
+      this.randomSeedTextBox.TabIndex = 3;
+      // 
+      // populationSizeTextBox
+      // 
+      this.populationSizeTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeTextBox.Location = new System.Drawing.Point(218, 78);
+      this.populationSizeTextBox.Name = "populationSizeTextBox";
+      this.populationSizeTextBox.Size = new System.Drawing.Size(186, 20);
+      this.populationSizeTextBox.TabIndex = 5;
+      // 
+      // setRandomSeedRandomlyLabel
+      // 
+      this.setRandomSeedRandomlyLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.setRandomSeedRandomlyLabel.AutoSize = true;
+      this.setRandomSeedRandomlyLabel.Location = new System.Drawing.Point(65, 6);
+      this.setRandomSeedRandomlyLabel.Name = "setRandomSeedRandomlyLabel";
+      this.setRandomSeedRandomlyLabel.Size = new System.Drawing.Size(147, 13);
+      this.setRandomSeedRandomlyLabel.TabIndex = 0;
+      this.setRandomSeedRandomlyLabel.Text = "Set &Random Seed Randomly:";
+      // 
+      // randomSeedLabel
+      // 
+      this.randomSeedLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.randomSeedLabel.AutoSize = true;
+      this.randomSeedLabel.Location = new System.Drawing.Point(65, 29);
+      this.randomSeedLabel.Name = "randomSeedLabel";
+      this.randomSeedLabel.Size = new System.Drawing.Size(78, 13);
+      this.randomSeedLabel.TabIndex = 2;
+      this.randomSeedLabel.Text = "&Random Seed:";
+      // 
+      // populationSizeLabel
+      // 
+      this.populationSizeLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.populationSizeLabel.AutoSize = true;
+      this.populationSizeLabel.Location = new System.Drawing.Point(65, 81);
+      this.populationSizeLabel.Name = "populationSizeLabel";
+      this.populationSizeLabel.Size = new System.Drawing.Size(83, 13);
+      this.populationSizeLabel.TabIndex = 4;
+      this.populationSizeLabel.Text = "&Population Size:";
+      // 
+      // scopesTabPage
+      // 
+      this.scopesTabPage.Controls.Add(this.scopeView);
+      this.scopesTabPage.Location = new System.Drawing.Point(4, 22);
+      this.scopesTabPage.Name = "scopesTabPage";
+      this.scopesTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.scopesTabPage.Size = new System.Drawing.Size(518, 364);
+      this.scopesTabPage.TabIndex = 2;
+      this.scopesTabPage.Text = "Scopes";
+      this.scopesTabPage.UseVisualStyleBackColor = true;
+      // 
+      // scopeView
+      // 
+      this.scopeView.Caption = "Scope";
+      this.scopeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.scopeView.Location = new System.Drawing.Point(3, 3);
+      this.scopeView.Name = "scopeView";
+      this.scopeView.Scope = null;
+      this.scopeView.Size = new System.Drawing.Size(512, 358);
+      this.scopeView.TabIndex = 0;
+      // 
+      // abortButton
+      // 
+      this.abortButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.abortButton.Enabled = false;
+      this.abortButton.Location = new System.Drawing.Point(81, 396);
+      this.abortButton.Name = "abortButton";
+      this.abortButton.Size = new System.Drawing.Size(75, 23);
+      this.abortButton.TabIndex = 2;
+      this.abortButton.Text = "&Abort";
+      this.abortButton.UseVisualStyleBackColor = true;
+      this.abortButton.Click += new System.EventHandler(this.abortButton_Click);
+      // 
+      // resetButton
+      // 
+      this.resetButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.resetButton.Location = new System.Drawing.Point(162, 396);
+      this.resetButton.Name = "resetButton";
+      this.resetButton.Size = new System.Drawing.Size(75, 23);
+      this.resetButton.TabIndex = 3;
+      this.resetButton.Text = "&Reset";
+      this.resetButton.UseVisualStyleBackColor = true;
+      this.resetButton.Click += new System.EventHandler(this.resetButton_Click);
+      // 
+      // cloneEngineButton
+      // 
+      this.cloneEngineButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.cloneEngineButton.Location = new System.Drawing.Point(420, 396);
+      this.cloneEngineButton.Name = "cloneEngineButton";
+      this.cloneEngineButton.Size = new System.Drawing.Size(106, 23);
+      this.cloneEngineButton.TabIndex = 4;
+      this.cloneEngineButton.Text = "&Clone Engine...";
+      this.cloneEngineButton.UseVisualStyleBackColor = true;
+      this.cloneEngineButton.Click += new System.EventHandler(this.cloneEngineButton_Click);
+      // 
+      // viewProblemInitializationButton
+      // 
+      this.viewProblemInitializationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewProblemInitializationButton.Location = new System.Drawing.Point(410, 208);
+      this.viewProblemInitializationButton.Name = "viewProblemInitializationButton";
+      this.viewProblemInitializationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewProblemInitializationButton.TabIndex = 14;
+      this.viewProblemInitializationButton.Text = "View...";
+      this.viewProblemInitializationButton.UseVisualStyleBackColor = true;
+      this.viewProblemInitializationButton.Click += new System.EventHandler(this.viewProblemInitializationButton_Click);
+      // 
+      // viewSolutionGenerationButton
+      // 
+      this.viewSolutionGenerationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewSolutionGenerationButton.Location = new System.Drawing.Point(410, 234);
+      this.viewSolutionGenerationButton.Name = "viewSolutionGenerationButton";
+      this.viewSolutionGenerationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewSolutionGenerationButton.TabIndex = 18;
+      this.viewSolutionGenerationButton.Text = "View...";
+      this.viewSolutionGenerationButton.UseVisualStyleBackColor = true;
+      this.viewSolutionGenerationButton.Click += new System.EventHandler(this.viewSolutionGenerationButton_Click);
+      // 
+      // viewSelectionButton
+      // 
+      this.viewSelectionButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewSelectionButton.Location = new System.Drawing.Point(410, 260);
+      this.viewSelectionButton.Name = "viewSelectionButton";
+      this.viewSelectionButton.Size = new System.Drawing.Size(53, 20);
+      this.viewSelectionButton.TabIndex = 22;
+      this.viewSelectionButton.Text = "View...";
+      this.viewSelectionButton.UseVisualStyleBackColor = true;
+      this.viewSelectionButton.Click += new System.EventHandler(this.viewSelectionButton_Click);
+      // 
+      // viewCrossoverButton
+      // 
+      this.viewCrossoverButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewCrossoverButton.Location = new System.Drawing.Point(410, 286);
+      this.viewCrossoverButton.Name = "viewCrossoverButton";
+      this.viewCrossoverButton.Size = new System.Drawing.Size(53, 20);
+      this.viewCrossoverButton.TabIndex = 26;
+      this.viewCrossoverButton.Text = "View...";
+      this.viewCrossoverButton.UseVisualStyleBackColor = true;
+      this.viewCrossoverButton.Click += new System.EventHandler(this.viewCrossoverButton_Click);
+      // 
+      // viewMutationButton
+      // 
+      this.viewMutationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewMutationButton.Location = new System.Drawing.Point(410, 312);
+      this.viewMutationButton.Name = "viewMutationButton";
+      this.viewMutationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewMutationButton.TabIndex = 30;
+      this.viewMutationButton.Text = "View...";
+      this.viewMutationButton.UseVisualStyleBackColor = true;
+      this.viewMutationButton.Click += new System.EventHandler(this.viewMutationButton_Click);
+      // 
+      // viewEvaluationButton
+      // 
+      this.viewEvaluationButton.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.viewEvaluationButton.Location = new System.Drawing.Point(410, 338);
+      this.viewEvaluationButton.Name = "viewEvaluationButton";
+      this.viewEvaluationButton.Size = new System.Drawing.Size(53, 20);
+      this.viewEvaluationButton.TabIndex = 34;
+      this.viewEvaluationButton.Text = "View...";
+      this.viewEvaluationButton.UseVisualStyleBackColor = true;
+      this.viewEvaluationButton.Click += new System.EventHandler(this.viewEvaluationButton_Click);
+      // 
+      // SGAEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl);
+      this.Controls.Add(this.cloneEngineButton);
+      this.Controls.Add(this.resetButton);
+      this.Controls.Add(this.abortButton);
+      this.Controls.Add(this.executeButton);
+      this.Name = "SGAEditor";
+      this.Size = new System.Drawing.Size(526, 419);
+      this.tabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.parametersTabPage.PerformLayout();
+      this.scopesTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button executeButton;
+    private System.Windows.Forms.TabControl tabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private System.Windows.Forms.Button abortButton;
+    private System.Windows.Forms.Button resetButton;
+    private System.Windows.Forms.TextBox mutationRateTextBox;
+    private System.Windows.Forms.Label mutationRateLabel;
+    private System.Windows.Forms.TextBox populationSizeTextBox;
+    private System.Windows.Forms.Label populationSizeLabel;
+    private System.Windows.Forms.TabPage scopesTabPage;
+    private System.Windows.Forms.TextBox maximumGenerationsTextBox;
+    private System.Windows.Forms.Label maximumGenerationsLabel;
+    private System.Windows.Forms.TextBox elitesTextBox;
+    private System.Windows.Forms.Label elitesLabel;
+    private System.Windows.Forms.TextBox randomSeedTextBox;
+    private System.Windows.Forms.Label setRandomSeedRandomlyLabel;
+    private System.Windows.Forms.Label randomSeedLabel;
+    private System.Windows.Forms.CheckBox setRandomSeedRandomlyCheckBox;
+    private System.Windows.Forms.Label problemInitializationLabel;
+    private System.Windows.Forms.Label evaluationLabel;
+    private System.Windows.Forms.Label mutationLabel;
+    private System.Windows.Forms.Label crossoverLabel;
+    private System.Windows.Forms.Label solutionGenerationLabel;
+    private System.Windows.Forms.Button cloneEngineButton;
+    private System.Windows.Forms.TextBox mutationTextBox;
+    private System.Windows.Forms.TextBox crossoverTextBox;
+    private System.Windows.Forms.TextBox selectionTextBox;
+    private System.Windows.Forms.TextBox solutionGenerationTextBox;
+    private System.Windows.Forms.TextBox problemInitializationTextBox;
+    private System.Windows.Forms.Label selectionLabel;
+    private System.Windows.Forms.TextBox evaluationTextBox;
+    private System.Windows.Forms.Button setProblemInitializationButton;
+    private System.Windows.Forms.Button setEvaluationButton;
+    private System.Windows.Forms.Button setMutationButton;
+    private System.Windows.Forms.Button setCrossoverButton;
+    private System.Windows.Forms.Button setSelectionButton;
+    private System.Windows.Forms.Button setSolutionGenerationButton;
+    private HeuristicLab.Core.ScopeView scopeView;
+    private System.Windows.Forms.Button viewEvaluationButton;
+    private System.Windows.Forms.Button viewMutationButton;
+    private System.Windows.Forms.Button viewCrossoverButton;
+    private System.Windows.Forms.Button viewSelectionButton;
+    private System.Windows.Forms.Button viewSolutionGenerationButton;
+    private System.Windows.Forms.Button viewProblemInitializationButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.cs	(revision 1270)
@@ -0,0 +1,220 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.SGA {
+  /// <summary>
+  /// Visual representation of the <see cref="SGA"/> class.
+  /// </summary>
+  public partial class SGAEditor : EditorBase {
+    private ChooseOperatorDialog chooseOperatorDialog;
+
+    /// <summary>
+    /// Gets or sets the <see cref="SGA"/> item to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="EditorBase"/>.
+    /// No own data storage present!</remarks>
+    public SGA SGA {
+      get { return (SGA)Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SGAEditor"/>.
+    /// </summary>
+    public SGAEditor() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="SGAEditor"/> with the given <paramref name="sga"/>.
+    /// </summary>
+    /// <param name="sga">The simple genetic algorithm to represent visually.</param>
+    public SGAEditor(SGA sga)
+      : this() {
+      SGA = sga;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="IEngine"/> of the <see cref="SGA"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void RemoveItemEvents() {
+      SGA.Engine.ExceptionOccurred -= new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      SGA.Engine.Finished -= new EventHandler(Engine_Finished);
+      scopeView.Scope = null;
+      base.RemoveItemEvents();
+    }
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="IEngine"/> of the <see cref="SGA"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      SGA.Engine.ExceptionOccurred += new EventHandler<ExceptionEventArgs>(Engine_ExceptionOccurred);
+      SGA.Engine.Finished += new EventHandler(Engine_Finished);
+      SetDataBinding();
+      scopeView.Scope = SGA.Engine.GlobalScope;
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest data of the model.
+    /// </summary>
+    /// <remarks>Calls <see cref="EditorBase.UpdateControls"/> of base class <see cref="EditorBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (SGA == null) {
+        tabControl.Enabled = false;
+      } else {
+        tabControl.Enabled = true;
+        problemInitializationTextBox.Text = SGA.ProblemInjector.GetType().Name;
+        solutionGenerationTextBox.Text = SGA.SolutionGenerator.GetType().Name;
+        selectionTextBox.Text = SGA.Selector.GetType().Name;
+        crossoverTextBox.Text = SGA.Crossover.GetType().Name;
+        mutationTextBox.Text = SGA.Mutator.GetType().Name;
+        evaluationTextBox.Text = SGA.Evaluator.GetType().Name;
+      }
+    }
+
+    private void SetDataBinding() {
+      setRandomSeedRandomlyCheckBox.DataBindings.Add("Checked", SGA, "SetSeedRandomly");
+      randomSeedTextBox.DataBindings.Add("Text", SGA, "Seed");
+      populationSizeTextBox.DataBindings.Add("Text", SGA, "PopulationSize");
+      maximumGenerationsTextBox.DataBindings.Add("Text", SGA, "MaximumGenerations");
+      mutationRateTextBox.DataBindings.Add("Text", SGA, "MutationRate");
+      elitesTextBox.DataBindings.Add("Text", SGA, "Elites");
+    }
+
+    #region Button Events
+    private void viewProblemInitializationButton_Click(object sender, EventArgs e) {
+      IView view = SGA.ProblemInjector.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewSolutionGenerationButton_Click(object sender, EventArgs e) {
+      IView view = SGA.SolutionGenerator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewSelectionButton_Click(object sender, EventArgs e) {
+      IView view = SGA.Selector.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewCrossoverButton_Click(object sender, EventArgs e) {
+      IView view = SGA.Crossover.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewMutationButton_Click(object sender, EventArgs e) {
+      IView view = SGA.Mutator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void viewEvaluationButton_Click(object sender, EventArgs e) {
+      IView view = SGA.Evaluator.CreateView();
+      if (view != null)
+        PluginManager.ControlManager.ShowControl(view);
+    }
+    private void setProblemInitializationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        SGA.ProblemInjector = chooseOperatorDialog.Operator;
+        problemInitializationTextBox.Text = SGA.ProblemInjector.GetType().Name;
+      }
+    }
+    private void setSolutionGenerationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        SGA.SolutionGenerator= chooseOperatorDialog.Operator;
+        solutionGenerationTextBox.Text = SGA.SolutionGenerator.GetType().Name;
+      }
+    }
+    private void setSelectionButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        SGA.Selector = chooseOperatorDialog.Operator;
+        selectionTextBox.Text = SGA.Selector.GetType().Name;
+      }
+    }
+    private void setCrossoverButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        SGA.Crossover = chooseOperatorDialog.Operator;
+        crossoverTextBox.Text = SGA.Crossover.GetType().Name;
+      }
+    }
+    private void setMutationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        SGA.Mutator = chooseOperatorDialog.Operator;
+        mutationTextBox.Text = SGA.Mutator.GetType().Name;
+      }
+    }
+    private void setEvaluationButton_Click(object sender, EventArgs e) {
+      if (chooseOperatorDialog == null) chooseOperatorDialog = new ChooseOperatorDialog();
+      if (chooseOperatorDialog.ShowDialog(this) == DialogResult.OK) {
+        SGA.Evaluator = chooseOperatorDialog.Operator;
+        evaluationTextBox.Text = SGA.Evaluator.GetType().Name;
+      }
+    }
+    private void executeButton_Click(object sender, EventArgs e) {
+      executeButton.Enabled = false;
+      abortButton.Enabled = true;
+      SGA.Engine.Execute();
+    }
+    private void abortButton_Click(object sender, EventArgs e) {
+      SGA.Engine.Abort();
+    }
+    private void resetButton_Click(object sender, EventArgs e) {
+      SGA.Engine.Reset();
+    }
+    private void cloneEngineButton_Click(object sender, EventArgs e) {
+      IEngine clone = (IEngine)SGA.Engine.Clone();
+      IEditor editor = ((IEditable)clone).CreateEditor();
+      PluginManager.ControlManager.ShowControl(editor);
+    }
+    #endregion
+
+    #region Engine Events
+    private delegate void OnExceptionEventDelegate(object sender, ExceptionEventArgs e);
+    private void Engine_ExceptionOccurred(object sender, ExceptionEventArgs e) {
+      if (InvokeRequired)
+        Invoke(new OnExceptionEventDelegate(Engine_ExceptionOccurred), sender, e);
+      else
+        Auxiliary.ShowErrorMessageBox(e.Exception);
+    }
+    private void Engine_Finished(object sender, EventArgs e) {
+      scopeView.Refresh();
+      executeButton.Enabled = true;
+      abortButton.Enabled = false;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SGA/SGAEditor.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/HeuristicLab.SQLite.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/HeuristicLab.SQLite.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/HeuristicLab.SQLite.csproj	(revision 1270)
@@ -0,0 +1,102 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6960CBCD-E44B-49B0-BA86-671091C42C36}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.SQLite</RootNamespace>
+    <AssemblyName>HeuristicLab.SQLite-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.SQLite-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.SQLite-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabSQLitePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="SQLite.NET.chm" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="SQLite License.txt" />
+    <Content Include="System.Data.SQLite.DLL" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/HeuristicLabSQLitePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/HeuristicLabSQLitePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/HeuristicLabSQLitePlugin.cs	(revision 1270)
@@ -0,0 +1,35 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.SQLite {
+  [ClassInfo(Name = "HeuristicLab.SQLite-3.2")]
+  [PluginFile(Filename = "HeuristicLab.SQLite-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [PluginFile(Filename = "System.Data.SQLite.dll", Filetype = PluginFileType.Assembly)]
+  [PluginFile(Filename = "SQLite License.txt", Filetype = PluginFileType.License)]
+  [PluginFile(Filename = "SQLite.NET.chm")]
+  public class HeuristicLabSQLitePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.SQLite")]
+[assembly: AssemblyDescription("Provides an interface to create and access local SQLite databases")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("3f5083f8-2738-4573-b230-e9928ef61e6b")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/SQLite License.txt
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/SQLite License.txt	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SQLite/SQLite License.txt	(revision 1270)
@@ -0,0 +1,21 @@
+﻿SQLite Copyright
+
+All of the deliverable code in SQLite has been dedicated to the public domain by the authors. 
+All code authors, and representatives of the companies they work for, have signed affidavits 
+dedicating their contributions to the public domain and originals of those signed affidavits 
+are stored in a firesafe at the main offices of Hwaci. Anyone is free to copy, modify, publish, 
+use, compile, sell, or distribute the original SQLite code, either in source code form or as a 
+compiled binary, for any purpose, commercial or non-commercial, and by any means.
+
+The previous paragraph applies to the deliverable code in SQLite - those parts of the SQLite 
+library that you actually bundle and ship with a larger application. Portions of the documentation
+and some code used as part of the build process might fall under other licenses. The details 
+here are unclear. We do not worry about the licensing of the documentation and build code so 
+much because none of these things are part of the core deliverable SQLite library.
+
+All of the deliverable code in SQLite has been written from scratch. No code has been taken 
+from other projects or from the open internet. Every line of code can be traced back to its 
+original author, and all of those authors have public domain dedications on file. So the SQLite 
+code base is clean and is uncontaminated with licensed code from other projects. 
+
+(http://www.sqlite.org/copyright.html)
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ConditionalSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ConditionalSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ConditionalSelector.cs	(revision 1270)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class ConditionalSelector : SelectorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public ConditionalSelector()
+      : base() {
+      AddVariableInfo(new VariableInfo("Condition", "Input condition", typeof(BoolData), VariableKind.In));
+    }
+
+    private int GetFirstSelectedScopeIndex(IScope source) {
+      for (int i = 0; i < source.SubScopes.Count; i++) {
+        bool condition = GetVariableValue<BoolData>("Condition", source.SubScopes[i], true).Data;
+        if (condition) {
+          return i;
+        }
+      }
+      return -1;
+    }
+
+    protected override void Select(IScope source, IScope target, bool copySelected) {
+      if (copySelected) {
+        for (int i = 0; i < source.SubScopes.Count; i++) {
+          IScope selectedScope = source.SubScopes[i];
+          bool condition = GetVariableValue<BoolData>("Condition", source.SubScopes[i], true).Data;
+          if (condition) {
+            target.AddSubScope((IScope)selectedScope.Clone());
+          }
+        }
+      } else {
+        int removeAt = GetFirstSelectedScopeIndex(source);
+        while (removeAt != -1) {
+          IScope selectedScope = source.SubScopes[removeAt];
+          target.AddSubScope(selectedScope);
+          source.RemoveSubScope(selectedScope);
+          removeAt = GetFirstSelectedScopeIndex(source);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/CopyVariableFromSubScope.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/CopyVariableFromSubScope.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/CopyVariableFromSubScope.cs	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class CopyVariableFromSubScope : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public CopyVariableFromSubScope()
+      : base() {
+      AddVariableInfo(new VariableInfo("Variable", "Variable to move.", typeof(IItem), VariableKind.In | VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SubScope", "Index of the subscope.", typeof(IntData), VariableKind.In));
+      GetVariableInfo("SubScope").Local = true;
+      AddVariable(new Variable("SubScope", new IntData(0)));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      int scopeIndex = GetVariableValue<IntData>("SubScope", scope, false).Data;
+      if(scope.SubScopes.Count >= scopeIndex + 1) {
+        IScope s = scope.SubScopes[scopeIndex];
+        IItem var = GetVariableValue<IItem>("Variable", s, false);
+        if(var != null) {
+          if(scope.GetVariable(scope.TranslateName("Variable")) != null) {
+            scope.RemoveVariable(scope.TranslateName("Variable"));
+          }
+          scope.AddVariable(new Variable(scope.TranslateName("Variable"), var));
+          return null;
+        }
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/HeuristicLab.Scheduling.JSSP.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/HeuristicLab.Scheduling.JSSP.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/HeuristicLab.Scheduling.JSSP.csproj	(revision 1270)
@@ -0,0 +1,185 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{4C0EF782-CC94-4A94-BC3E-661D2600559B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Scheduling.JSSP</RootNamespace>
+    <AssemblyName>HeuristicLab.Scheduling.JSSP-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <StartupObject>
+    </StartupObject>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <PublishUrl>http://localhost/HeuristicLab.Scheduling.JSSP/</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Web</InstallFrom>
+    <UpdateEnabled>true</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>true</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Scheduling.JSSP-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Scheduling.JSSP-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ItemListIndexer.cs" />
+    <Compile Include="JSSPInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="JSSPInjectorView.Designer.cs">
+      <DependentUpon>JSSPInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="JSSPInjector.cs" />
+    <Compile Include="ConditionalSelector.cs" />
+    <Compile Include="CopyVariableFromSubScope.cs" />
+    <Compile Include="IsSchedulable.cs" />
+    <Compile Include="Scores\RemainingNrOfOperations.cs" />
+    <Compile Include="Operation.cs" />
+    <Compile Include="OperationScheduler.cs" />
+    <Compile Include="Scores\OperationScoreBase.cs" />
+    <Compile Include="OperationUpdater.cs" />
+    <Compile Include="OperationView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="OperationView.Designer.cs">
+      <DependentUpon>OperationView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Scores\ProcessingTime.cs" />
+    <Compile Include="Scores\RemainingProcessingTime.cs" />
+    <Compile Include="Schedule.cs" />
+    <Compile Include="ScheduleInjector.cs" />
+    <Compile Include="ScheduleTree.cs" />
+    <Compile Include="HeuristicLabJSSPPlugin.cs" />
+    <Compile Include="JSSPParser.cs" />
+    <Compile Include="TimeSlot.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Permutation\HeuristicLab.Permutation.csproj">
+      <Project>{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}</Project>
+      <Name>HeuristicLab.Permutation</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
+      <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
+      <Name>HeuristicLab.Selection</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="JSSPInjectorView.resx">
+      <DependentUpon>JSSPInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="OperationView.resx">
+      <DependentUpon>OperationView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/HeuristicLabJSSPPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/HeuristicLabJSSPPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/HeuristicLabJSSPPlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  [ClassInfo(Name = "HeuristicLab.Scheduling.JSSP-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Scheduling.JSSP-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Permutation-3.2")]
+  public class HeuristicLabSchedulingJSPPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/IsSchedulable.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/IsSchedulable.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/IsSchedulable.cs	(revision 1270)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class IsSchedulable : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public IsSchedulable()
+      : base() {
+      AddVariableInfo(new VariableInfo("Operation", "One operation of JSSP job", typeof(Operation), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Schedulable", "Is the operation schedulable?", typeof(BoolData), VariableKind.New | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Operation op = GetVariableValue<Operation>("Operation", scope, true);
+      if(scope.GetVariable(scope.TranslateName("Schedulable")) != null) {
+        BoolData isSchedulable = GetVariableValue<BoolData>("Schedulable", scope, false);
+        isSchedulable.Data = (op.Predecessors.Count == 0);
+      } else {
+        scope.AddVariable(new Variable(scope.TranslateName("Schedulable"), new BoolData((op.Predecessors.Count == 0))));
+      }
+      return null;
+    }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ItemListIndexer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ItemListIndexer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ItemListIndexer.cs	(revision 1270)
@@ -0,0 +1,56 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class ItemListIndexer : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public ItemListIndexer()
+      : base() {
+      AddVariableInfo(new VariableInfo("List", "List of IItem objects", typeof(ItemList), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Index", "Index of list element to extract", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Object", "List element at index", typeof(IItem), VariableKind.New));
+    }
+
+    // ToDo: Make more generic (for all array data types)
+    public override IOperation Apply(IScope scope) {
+      ItemList list = GetVariableValue<ItemList>("List", scope, true);
+      int index = GetVariableValue<IntData>("Index", scope, true).Data;
+      if(scope.GetVariable(scope.TranslateName("Object")) != null) {
+        scope.RemoveVariable(scope.TranslateName("Object"));
+      }
+      if((list != null) && (index < list.Count)) {
+        scope.AddVariable(new Variable(scope.TranslateName("Object"), (IItem)list[index].Clone()));
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjector.cs	(revision 1270)
@@ -0,0 +1,98 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml; 
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class JSSPInjector : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    private ItemList operations; 
+    public ItemList Operations {
+      get { return operations; }
+      set { operations = value; }
+    }
+
+    private IntData machines;
+    public int NrOfMachines {
+      get { return machines.Data; }
+      set { machines.Data = value; }
+    }
+    private IntData jobs;
+    public int NrOfJobs {
+      get { return jobs.Data; }
+      set { jobs.Data = value; }
+    }
+
+    public JSSPInjector()
+      : base() {
+      operations = new ItemList();
+      machines = new IntData();
+      jobs = new IntData(); 
+      AddVariableInfo(new VariableInfo("Machines", "Number of machines", typeof(IntData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("Jobs", "Number of jobs", typeof(IntData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("Operations", "List of JSSP operations", typeof(ItemList), VariableKind.New));
+    }
+
+    public override IView CreateView() {
+      return new JSSPInjectorView(this);
+    }
+
+    public override IOperation Apply(IScope scope) {
+      scope.AddVariable(new Variable(scope.TranslateName("Machines"), machines.Clone() as IntData));
+      scope.AddVariable(new Variable(scope.TranslateName("Jobs"), jobs.Clone() as IntData));
+      scope.AddVariable(new Variable(scope.TranslateName("Operations"), (ItemList)operations.Clone()));
+      return base.Apply(scope);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      JSSPInjector clone = (JSSPInjector)base.Clone(clonedObjects);
+      clone.operations = (ItemList)Auxiliary.Clone(operations, clonedObjects);
+      clone.jobs = (IntData)Auxiliary.Clone(jobs, clonedObjects);
+      clone.machines = (IntData)Auxiliary.Clone(machines, clonedObjects); 
+      return clone;
+    }
+
+    #region IStorable Members
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Machines", machines, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Jobs", jobs, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Operations", operations, document, persistedObjects));
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      operations = (ItemList)PersistenceManager.Restore(node.SelectSingleNode("Operations"), restoredObjects);
+      jobs = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Jobs"), restoredObjects);
+      machines = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Machines"), restoredObjects); 
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,200 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Scheduling.JSSP {
+  partial class JSSPInjectorView {
+    /// <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.tabPage1 = new System.Windows.Forms.TabPage();
+      this.tb_jobs = new System.Windows.Forms.TextBox();
+      this.tb_machines = new System.Windows.Forms.TextBox();
+      this.label2 = new System.Windows.Forms.Label();
+      this.label1 = new System.Windows.Forms.Label();
+      this.button1 = new System.Windows.Forms.Button();
+      this.tabControl1 = new System.Windows.Forms.TabControl();
+      this.tabvariables = new System.Windows.Forms.TabPage();
+      this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+      this.descriptionTabPage = new System.Windows.Forms.TabPage();
+      this.operatorBaseDescriptionView = new HeuristicLab.Core.OperatorBaseDescriptionView();
+      this.tabPage1.SuspendLayout();
+      this.tabControl1.SuspendLayout();
+      this.descriptionTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.tb_jobs);
+      this.tabPage1.Controls.Add(this.tb_machines);
+      this.tabPage1.Controls.Add(this.label2);
+      this.tabPage1.Controls.Add(this.label1);
+      this.tabPage1.Controls.Add(this.button1);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(228, 133);
+      this.tabPage1.TabIndex = 0;
+      this.tabPage1.Text = "JSSP Data";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // tb_jobs
+      // 
+      this.tb_jobs.BackColor = System.Drawing.SystemColors.Control;
+      this.tb_jobs.Location = new System.Drawing.Point(96, 42);
+      this.tb_jobs.Name = "tb_jobs";
+      this.tb_jobs.ReadOnly = true;
+      this.tb_jobs.Size = new System.Drawing.Size(100, 20);
+      this.tb_jobs.TabIndex = 4;
+      // 
+      // tb_machines
+      // 
+      this.tb_machines.BackColor = System.Drawing.SystemColors.Control;
+      this.tb_machines.Location = new System.Drawing.Point(96, 16);
+      this.tb_machines.Name = "tb_machines";
+      this.tb_machines.ReadOnly = true;
+      this.tb_machines.Size = new System.Drawing.Size(101, 20);
+      this.tb_machines.TabIndex = 3;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(11, 45);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(35, 13);
+      this.label2.TabIndex = 2;
+      this.label2.Text = "Jobs: ";
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(11, 19);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(56, 13);
+      this.label1.TabIndex = 1;
+      this.label1.Text = "Machines:";
+      // 
+      // button1
+      // 
+      this.button1.Location = new System.Drawing.Point(3, 97);
+      this.button1.Name = "button1";
+      this.button1.Size = new System.Drawing.Size(216, 25);
+      this.button1.TabIndex = 0;
+      this.button1.Text = "Import Instance from JSSPLib ";
+      this.button1.UseVisualStyleBackColor = true;
+      this.button1.Click += new System.EventHandler(this.button1_Click);
+      // 
+      // tabControl1
+      // 
+      this.tabControl1.Controls.Add(this.tabPage1);
+      this.tabControl1.Controls.Add(this.tabvariables);
+      this.tabControl1.Controls.Add(this.descriptionTabPage);
+      this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.tabControl1.Location = new System.Drawing.Point(0, 0);
+      this.tabControl1.Name = "tabControl1";
+      this.tabControl1.SelectedIndex = 0;
+      this.tabControl1.Size = new System.Drawing.Size(236, 159);
+      this.tabControl1.TabIndex = 0;
+      // 
+      // tabvariables
+      // 
+      this.tabvariables.Location = new System.Drawing.Point(4, 22);
+      this.tabvariables.Name = "tabvariables";
+      this.tabvariables.Size = new System.Drawing.Size(228, 133);
+      this.tabvariables.TabIndex = 1;
+      this.tabvariables.Text = "Variables";
+      this.tabvariables.UseVisualStyleBackColor = true;
+      // 
+      // openFileDialog
+      // 
+      this.openFileDialog.DefaultExt = "jssp";
+      this.openFileDialog.Title = "Import JSSP Instance";
+      // 
+      // descriptionTabPage
+      // 
+      this.descriptionTabPage.Controls.Add(this.operatorBaseDescriptionView);
+      this.descriptionTabPage.Location = new System.Drawing.Point(4, 22);
+      this.descriptionTabPage.Name = "descriptionTabPage";
+      this.descriptionTabPage.Padding = new System.Windows.Forms.Padding(3);
+      this.descriptionTabPage.Size = new System.Drawing.Size(228, 133);
+      this.descriptionTabPage.TabIndex = 2;
+      this.descriptionTabPage.Text = "Description";
+      this.descriptionTabPage.UseVisualStyleBackColor = true;
+      // 
+      // operatorBaseDescriptionView
+      // 
+      this.operatorBaseDescriptionView.Caption = "Operator";
+      this.operatorBaseDescriptionView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.operatorBaseDescriptionView.Location = new System.Drawing.Point(3, 3);
+      this.operatorBaseDescriptionView.Name = "operatorBaseDescriptionView";
+      this.operatorBaseDescriptionView.Operator = null;
+      this.operatorBaseDescriptionView.Size = new System.Drawing.Size(222, 127);
+      this.operatorBaseDescriptionView.TabIndex = 0;
+      // 
+      // JSSPInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.tabControl1);
+      this.Name = "JSSPInjectorView";
+      this.Size = new System.Drawing.Size(236, 159);
+      this.tabPage1.ResumeLayout(false);
+      this.tabPage1.PerformLayout();
+      this.tabControl1.ResumeLayout(false);
+      this.descriptionTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabPage tabPage1;
+    private System.Windows.Forms.TextBox tb_jobs;
+    private System.Windows.Forms.TextBox tb_machines;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.Button button1;
+    private System.Windows.Forms.TabControl tabControl1;
+    private System.Windows.Forms.OpenFileDialog openFileDialog;
+    private System.Windows.Forms.TabPage tabvariables;
+    private System.Windows.Forms.TabPage descriptionTabPage;
+    private HeuristicLab.Core.OperatorBaseDescriptionView operatorBaseDescriptionView;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.cs	(revision 1270)
@@ -0,0 +1,97 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public partial class JSSPInjectorView : ViewBase {
+
+    public JSSPInjector JSSPInjector {
+      get { return (JSSPInjector)Item; }
+      set { base.Item = value; }
+    }
+
+    public JSSPInjectorView() {
+      InitializeComponent();
+    }
+    public JSSPInjectorView(JSSPInjector jsspInjector)
+      : this() {
+      JSSPInjector = jsspInjector;
+    }
+
+    protected override void RemoveItemEvents() {
+      JSSPInjector.Operations.Changed -= new EventHandler(JSSP_Changed);
+      operatorBaseDescriptionView.Operator = null;
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      JSSPInjector.Operations.Changed += new EventHandler(JSSP_Changed);
+      operatorBaseDescriptionView.Operator = JSSPInjector;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      OperatorBaseView view = new OperatorBaseView(JSSPInjector);
+      tabvariables.Controls.Clear();
+      tabvariables.Controls.Add(view);
+      view.Dock = DockStyle.Fill;
+      if (JSSPInjector != null) {
+        tb_jobs.Text = JSSPInjector.NrOfJobs.ToString();
+        tb_machines.Text = JSSPInjector.NrOfMachines.ToString();
+      }
+    }
+
+    private void button1_Click(object sender, EventArgs e) {
+      if (openFileDialog.ShowDialog(this) == DialogResult.OK) {
+        JSSPParser parser = null;
+        bool success = false;
+        try {
+          parser = new JSSPParser(openFileDialog.FileName);
+          parser.Parse();
+          success = true;
+        }
+        catch (Exception ex) {
+          MessageBox.Show(this, ex.Message, ex.GetType().Name, MessageBoxButtons.OK, MessageBoxIcon.Error);
+        }
+        if (success) {
+          JSSPInjector.Operations = (ItemList)parser.Operations.Clone();
+          JSSPInjector.NrOfJobs = parser.NrOfJobs;
+          JSSPInjector.NrOfMachines = parser.NrOfMachines;
+          Refresh();
+        }
+      }
+    }
+
+    private void JSSP_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPInjectorView.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>139, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPParser.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPParser.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/JSSPParser.cs	(revision 1270)
@@ -0,0 +1,105 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using HeuristicLab.Core;
+using HeuristicLab.Data; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class JSSPParser {
+    private StreamReader source;
+    private int nrOfJobs;
+    public int NrOfJobs {
+      get { return nrOfJobs; }
+    }
+
+    private int nrOfMachines;
+    public int NrOfMachines {
+      get { return nrOfMachines; }
+    }
+
+    private int[,] machineSequence; // each row: machine sequence per job
+    public int[,] MachineSequence {
+      get { return machineSequence; }
+    }
+
+    private int[,] processingTime;  // each row: processing time per job and machine
+    public int[,] ProcessingTime {
+      get { return processingTime; }
+    }
+
+    private ItemList operations;
+    public ItemList Operations {
+      get { return operations; }
+    }
+
+    public JSSPParser(String path) {
+      if(!path.EndsWith(".jssp"))
+        throw new ArgumentException("Input file name has to be in JSSP format (*.jssp)");
+      source = new StreamReader(path);
+    }
+
+    private ItemList getOperations() {
+      ItemList ops = new ItemList();
+      for(int i = 0; i < NrOfJobs; i++) {
+        for(int j = 0; j < NrOfMachines; j++) {
+          List<int> opMachines = new List<int>();
+          opMachines.Add(MachineSequence[i, j]);
+          List<int> opPredecessors = new List<int>();
+          if(j > 0) {
+            opPredecessors.Add(j - 1);
+          }
+          Operation op = new Operation(i, 0, ProcessingTime[i, MachineSequence[i, j]], j, opMachines.ToArray(), opPredecessors.ToArray());
+          ops.Add(op);
+        }
+      }
+      return ops;
+    }
+
+    // File structure of *.jssp files: 
+    // #jobs #machines
+    // one line for each job; start count from zero
+    // machineNumber processingTime machineNumber processingTime ....
+    public void Parse() {
+      string str = source.ReadLine();
+      string[] tokens = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
+      if(tokens.Length != 2)
+        throw new InvalidDataException("Invalid problem specification!");
+      nrOfJobs = Int32.Parse(tokens[0]);
+      nrOfMachines = Int32.Parse(tokens[1]);
+      // Console.WriteLine("nrOfMachines: {0}, nrOfJobs: {1}", nrOfMachines, nrOfJobs);
+      machineSequence = new int[nrOfJobs, nrOfMachines];
+      processingTime = new int[nrOfJobs, nrOfMachines];
+      for(int i = 0; i < nrOfJobs; i++) {
+        str = source.ReadLine();
+        tokens = str.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
+        for(int j = 0; j < nrOfMachines; j++) {
+          machineSequence[i, j] = Int32.Parse(tokens[2 * j]);
+          processingTime[i, machineSequence[i, j]] = Int32.Parse(tokens[2 * j + 1]);
+        }
+      }
+      operations = getOperations(); 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Operation.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Operation.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Operation.cs	(revision 1270)
@@ -0,0 +1,164 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.Collections;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class Operation : ItemBase, IComparable {
+
+    #region Data
+    private IntData start;
+    public int Start {
+      get { return start.Data; }
+      set {
+        start.Data = value;
+        OnChanged();
+      }
+    }
+
+    private IntData duration;
+    public int Duration {
+      get { return duration.Data; }
+      set {
+        duration.Data = value;
+        OnChanged();
+      }
+    }
+
+    private IntData job;
+    public int Job {
+      get { return job.Data; }
+      set {
+        job.Data = value;
+        OnChanged();
+      }
+    }
+
+    private IntData operationIndex;
+    public int OperationIndex {
+      get { return operationIndex.Data; }
+      set { operationIndex.Data = value; }
+    }
+
+    private IntArrayData machines;
+    public int[] Machines {
+      get { return machines.Data; }
+      set {
+        machines.Data = value;
+        OnChanged();
+      }
+    }
+
+    private ItemList predecessors;
+    public ItemList Predecessors {
+      get { return predecessors; }
+      set { predecessors = value; }
+    }
+    #endregion
+
+    public Operation()
+      : this(-1, 0, 0, -1, new int[0], null) {
+    }
+
+    public Operation(int job, int earliestStart, int duration, int operationIndex, int[] machines, int[] predecessors) {
+      this.start = new IntData(earliestStart);
+      this.duration = new IntData(duration);
+      this.job = new IntData(job);
+      this.machines = new IntArrayData(machines);
+      this.predecessors = new ItemList();
+      if(predecessors != null) {
+        for(int i = 0; i < predecessors.Length; i++) {
+          this.predecessors.Add(new IntData(predecessors[i]));
+        }
+      }
+      this.operationIndex = new IntData(operationIndex);
+    }
+
+    public override string ToString() {
+      if(this.Job == -1) {
+        return "";
+      }
+      return (String.Format("|{2},{3}:[m:{0} d:{1}]", machines.Data[0], duration, job, operationIndex));
+    }
+
+    #region IComparable Members
+
+    public int CompareTo(object obj) {
+      if(obj is Operation) {
+        Operation bin = (Operation)obj;
+        return (start.CompareTo(bin.start));
+      } else { throw new ArgumentException("Object is not an Operation"); }
+    }
+
+    #endregion
+
+    #region IViewable Members
+
+    public override IView CreateView() {
+      return new OperationView(this);
+    }
+
+    #endregion
+
+    #region IStorable Members
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      Operation clone = new Operation();
+      clonedObjects.Add(Guid, clone);
+      clone.duration = (IntData)Auxiliary.Clone(duration, clonedObjects);
+      clone.start = (IntData)Auxiliary.Clone(start, clonedObjects);
+      clone.operationIndex = (IntData)Auxiliary.Clone(operationIndex, clonedObjects);
+      clone.job = (IntData)Auxiliary.Clone(job, clonedObjects);
+      clone.machines = (IntArrayData)Auxiliary.Clone(machines, clonedObjects);
+      clone.predecessors = (ItemList)Auxiliary.Clone(predecessors, clonedObjects);
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.AppendChild(PersistenceManager.Persist("Job", job, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("OperationIndex", operationIndex, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Start", start, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Duration", duration, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Predecessors", predecessors, document, persistedObjects));
+      node.AppendChild(PersistenceManager.Persist("Machines", machines, document, persistedObjects));
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      job = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Job"), restoredObjects);
+      operationIndex = (IntData)PersistenceManager.Restore(node.SelectSingleNode("OperationIndex"), restoredObjects);
+      start = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Start"), restoredObjects);
+      duration = (IntData)PersistenceManager.Restore(node.SelectSingleNode("Duration"), restoredObjects);
+      predecessors = (ItemList)PersistenceManager.Restore(node.SelectSingleNode("Predecessors"), restoredObjects);
+      machines = (IntArrayData)PersistenceManager.Restore(node.SelectSingleNode("Machines"), restoredObjects);
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationScheduler.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationScheduler.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationScheduler.cs	(revision 1270)
@@ -0,0 +1,49 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml; 
+using HeuristicLab.Core;
+using HeuristicLab.Data; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class OperationScheduler : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public OperationScheduler()
+      : base() {
+      AddVariableInfo(new VariableInfo("PartialSchedule", "(Partial) schedule", typeof(Schedule), VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("Operation", "Operation to be scheduled. Start date is updated after scheduling.", typeof(Operation), VariableKind.In | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Schedule pSchedule = GetVariableValue<Schedule>("PartialSchedule", scope, true);
+      Operation op = GetVariableValue<Operation>("Operation", scope, true);
+      int operationStartDate = pSchedule.ScheduleOperation(op);
+      op.Start = operationStartDate; 
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationUpdater.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationUpdater.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationUpdater.cs	(revision 1270)
@@ -0,0 +1,60 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System.Collections; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class OperationUpdater : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public OperationUpdater()
+      : base() {
+      AddVariableInfo(new VariableInfo("Operation", "Scheduled operation and unscheduled operation which shall be updated.", typeof(Operation), VariableKind.In | VariableKind.Out));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      Operation scheduledOp = GetVariableValue<Operation>("Operation", scope, false);
+      for(int i = 0; i < scope.SubScopes.Count; i++) {
+        Operation op = GetVariableValue<Operation>("Operation", scope.SubScopes[i], false);
+        if((op.Job == scheduledOp.Job) && (op.Predecessors != null)) {
+          int index = -1; 
+          for(int j = 0; j < op.Predecessors.Count; j++) {
+            if(((IntData)op.Predecessors[j]).Data == scheduledOp.OperationIndex) {
+              index = j; 
+            }
+          }
+          if(index != -1) {
+            op.Predecessors.RemoveAt(index); // remove scheduled op from predecessor list
+            op.Start = Math.Max(scheduledOp.Start + scheduledOp.Duration, op.Start); // new earliest start date
+          }
+        }
+      }
+      return null; 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.Designer.cs	(revision 1270)
@@ -0,0 +1,180 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  partial class OperationView {
+    /// <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.label2 = new System.Windows.Forms.Label();
+      this.label3 = new System.Windows.Forms.Label();
+      this.label4 = new System.Windows.Forms.Label();
+      this.label5 = new System.Windows.Forms.Label();
+      this.jobTextBox = new System.Windows.Forms.TextBox();
+      this.opTextBox = new System.Windows.Forms.TextBox();
+      this.startTextBox = new System.Windows.Forms.TextBox();
+      this.durTextBox = new System.Windows.Forms.TextBox();
+      this.predTextBox = new System.Windows.Forms.TextBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(5, 3);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(30, 13);
+      this.label2.TabIndex = 5;
+      this.label2.Text = "Job: ";
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(5, 31);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(56, 13);
+      this.label3.TabIndex = 6;
+      this.label3.Text = "Operation:";
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(5, 57);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(32, 13);
+      this.label4.TabIndex = 7;
+      this.label4.Text = "Start:";
+      // 
+      // label5
+      // 
+      this.label5.AutoSize = true;
+      this.label5.Location = new System.Drawing.Point(5, 84);
+      this.label5.Name = "label5";
+      this.label5.Size = new System.Drawing.Size(50, 13);
+      this.label5.TabIndex = 8;
+      this.label5.Text = "Duration:";
+      // 
+      // jobTextBox
+      // 
+      this.jobTextBox.Location = new System.Drawing.Point(71, 4);
+      this.jobTextBox.Name = "jobTextBox";
+      this.jobTextBox.Size = new System.Drawing.Size(38, 20);
+      this.jobTextBox.TabIndex = 9;
+      this.jobTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.jobTextBox_Validating);
+      // 
+      // opTextBox
+      // 
+      this.opTextBox.Location = new System.Drawing.Point(71, 29);
+      this.opTextBox.Name = "opTextBox";
+      this.opTextBox.Size = new System.Drawing.Size(38, 20);
+      this.opTextBox.TabIndex = 10;
+      this.opTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.opTextBox_Validating);
+      // 
+      // startTextBox
+      // 
+      this.startTextBox.Location = new System.Drawing.Point(71, 55);
+      this.startTextBox.Name = "startTextBox";
+      this.startTextBox.Size = new System.Drawing.Size(38, 20);
+      this.startTextBox.TabIndex = 11;
+      this.startTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.startTextBox_Validating);
+      // 
+      // durTextBox
+      // 
+      this.durTextBox.Location = new System.Drawing.Point(71, 82);
+      this.durTextBox.Name = "durTextBox";
+      this.durTextBox.Size = new System.Drawing.Size(38, 20);
+      this.durTextBox.TabIndex = 12;
+      this.durTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.durTextBox_Validating);
+      // 
+      // predTextBox
+      // 
+      this.predTextBox.Location = new System.Drawing.Point(8, 128);
+      this.predTextBox.Name = "predTextBox";
+      this.predTextBox.Size = new System.Drawing.Size(101, 20);
+      this.predTextBox.TabIndex = 13;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(7, 112);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(74, 13);
+      this.label1.TabIndex = 14;
+      this.label1.Text = "Predecessors:";
+      // 
+      // OperationView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.label1);
+      this.Controls.Add(this.predTextBox);
+      this.Controls.Add(this.durTextBox);
+      this.Controls.Add(this.startTextBox);
+      this.Controls.Add(this.opTextBox);
+      this.Controls.Add(this.jobTextBox);
+      this.Controls.Add(this.label5);
+      this.Controls.Add(this.label4);
+      this.Controls.Add(this.label3);
+      this.Controls.Add(this.label2);
+      this.Name = "OperationView";
+      this.Size = new System.Drawing.Size(130, 178);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.Label label5;
+    private System.Windows.Forms.TextBox jobTextBox;
+    private System.Windows.Forms.TextBox opTextBox;
+    private System.Windows.Forms.TextBox startTextBox;
+    private System.Windows.Forms.TextBox durTextBox;
+    private System.Windows.Forms.TextBox predTextBox;
+    private System.Windows.Forms.Label label1;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.cs	(revision 1270)
@@ -0,0 +1,128 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public partial class OperationView : ViewBase {
+    public Operation Operation {
+      get { return (Operation)Item; }
+      set { base.Item = value; }
+    }
+
+    public OperationView() {
+      InitializeComponent();
+    }
+    public OperationView(Operation operation)
+      : this() {
+      Operation = operation;
+    }
+
+    protected override void RemoveItemEvents() {
+      Operation.Changed -= new EventHandler(Operation_Changed);
+      base.RemoveItemEvents();
+    }
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      Operation.Changed += new EventHandler(Operation_Changed);
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      predTextBox.Enabled = false;
+      if (Operation == null) {
+        jobTextBox.Enabled = false;
+        opTextBox.Enabled = false;
+        startTextBox.Enabled = false;
+        durTextBox.Enabled = false;
+      } else {
+        jobTextBox.Enabled = true;
+        opTextBox.Enabled = true;
+        startTextBox.Enabled = true;
+        durTextBox.Enabled = true;
+        this.jobTextBox.Text = Operation.Job.ToString();
+        this.opTextBox.Text = Operation.OperationIndex.ToString();
+        this.startTextBox.Text = Operation.Start.ToString();
+        this.durTextBox.Text = Operation.Duration.ToString();
+        if (Operation.Predecessors != null) {
+          this.predTextBox.Text = Operation.Predecessors.ToString();
+        }
+      }
+    }
+
+    private void Operation_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void jobTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        Operation.Job = int.Parse(jobTextBox.Text);
+      }
+      catch (Exception) {
+        jobTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void startTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        Operation.Start = int.Parse(startTextBox.Text);
+      }
+      catch (Exception) {
+        startTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void opTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        Operation.OperationIndex = int.Parse(opTextBox.Text);
+      }
+      catch (Exception) {
+        opTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+    private void durTextBox_Validating(object sender, CancelEventArgs e) {
+      e.Cancel = false;
+      try {
+        Operation.Duration = int.Parse(durTextBox.Text);
+      }
+      catch (Exception) {
+        durTextBox.SelectAll();
+        e.Cancel = true;
+      }
+    }
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/OperationView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Scheduling.JSSP")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab.Scheduling.JSSP")]
+[assembly: AssemblyCopyright("Copyright Â©  2008")]
+[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("9099e296-3c3e-463b-8368-2935e1506496")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Schedule.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Schedule.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Schedule.cs	(revision 1270)
@@ -0,0 +1,104 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class Schedule : ItemBase {
+
+    private ScheduleTree[] schedule;
+
+    public Schedule(int nrOfMachines, int timeSpan)
+      : base() {
+      schedule = new ScheduleTree[nrOfMachines];
+      for(int i = 0; i < nrOfMachines; i++) {
+        schedule[i] = new ScheduleTree(timeSpan);
+      }
+    }
+
+    public Schedule() : this(0, 100) { }
+
+    public int Machines {
+      get { return schedule.Length; }
+    }
+
+    public ScheduleTree GetMachineSchedule(int machineIndex) {
+      return schedule[machineIndex];
+    }
+
+    // return value: operation completion time
+    public int ScheduleOperation(Operation op) {
+      int machine = op.Machines[0];
+      return schedule[machine].Insert(op);
+    }
+
+    public override string ToString() {
+      string s = "";
+      for(int i = 0; i < this.Machines; i++) {
+        s += schedule[i].ToString();
+        s += "\n";
+      }
+      return s;
+    }
+
+    #region IStorable Members
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute machineAttribute = document.CreateAttribute("Machines");
+      machineAttribute.Value = Machines.ToString();
+      node.Attributes.Append(machineAttribute);
+      for(int i = 0; i < Machines; i++) {
+        node.AppendChild(PersistenceManager.Persist("Machine" + i.ToString(), schedule[i], document, persistedObjects));
+      }
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      int machines = int.Parse(node.Attributes["Machines"].Value);
+      schedule = new ScheduleTree[machines];
+      for(int i = 0; i < machines; i++) {
+        schedule[i] = (ScheduleTree)PersistenceManager.Restore(node.SelectSingleNode("Machine" + i.ToString()), restoredObjects);
+      }
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      int timespan = 0;
+      if ((schedule != null) && (schedule.Length > 0)) {
+        timespan = schedule[0].Timespan;
+      }
+      Schedule clone = new Schedule(this.Machines, timespan);
+      clonedObjects.Add(Guid, clone);
+      clone.schedule = new ScheduleTree[this.Machines];
+      for(int i = 0; i < this.Machines; i++) {
+        clone.schedule[i] = (ScheduleTree)Auxiliary.Clone(schedule[i], clonedObjects);
+      }
+      return clone;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ScheduleInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ScheduleInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ScheduleInjector.cs	(revision 1270)
@@ -0,0 +1,83 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class ScheduleInjector : OperatorBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    private Schedule schedule;
+    public Schedule Schedule {
+      get { return schedule; }
+    }
+
+    public ScheduleInjector()
+      : base() {
+      AddVariableInfo(new VariableInfo("Machines", "Number of machines", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Timespan", "Desired timespan for the schedule", typeof(IntData), VariableKind.In));
+      GetVariableInfo("Timespan").Local = true;
+      AddVariable(new Variable("Timespan", new IntData(Int32.MaxValue)));
+      AddVariableInfo(new VariableInfo("Schedule", "Schedule", typeof(Schedule), VariableKind.New));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      IntData machines = GetVariableValue<IntData>("Machines", scope, true);
+      IntData timespan = GetVariableValue<IntData>("Timespan", scope, true);
+      schedule = new Schedule(machines.Data, timespan.Data);
+      scope.AddVariable(new Variable(scope.TranslateName("Schedule"), schedule));
+      return null;
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ScheduleInjector clone = (ScheduleInjector)base.Clone(clonedObjects);
+      if(schedule != null) {
+        clone.schedule = (Schedule)Auxiliary.Clone(schedule, clonedObjects);
+      }
+      return clone;
+    }
+
+    #region IStorable Members
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      if(schedule != null) {
+        node.AppendChild(PersistenceManager.Persist("Schedule", schedule, document, persistedObjects));
+      }
+      return node;
+    }
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      XmlNode scheduleNode = node.SelectSingleNode("Schedule");
+      if(scheduleNode != null) {
+        schedule = (Schedule)PersistenceManager.Restore(scheduleNode, restoredObjects);
+      }
+    }
+    #endregion
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ScheduleTree.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ScheduleTree.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/ScheduleTree.cs	(revision 1270)
@@ -0,0 +1,257 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Data;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Scheduling.JSSP {
+
+  public class ScheduleTreeNode {
+    private TimeSlot data;
+    private ScheduleTreeNode left;
+    private ScheduleTreeNode right;
+    private ScheduleTreeNode parent;
+
+    public ScheduleTreeNode(TimeSlot t) {
+      data = t;
+    }
+
+    public ScheduleTreeNode Left {
+      get { return left; }
+      set { left = value; }
+    }
+
+    public ScheduleTreeNode Right {
+      get { return right; }
+      set { right = value; }
+    }
+
+    public ScheduleTreeNode Parent {
+      get { return parent; }
+      set { parent = value; }
+    }
+
+    public void SetLeft(ScheduleTreeNode child) {
+      this.Left = child;
+      child.Parent = this;
+    }
+
+    public void SetRight(ScheduleTreeNode child) {
+      this.Right = child;
+      child.Parent = this;
+    }
+
+    public TimeSlot Data {
+      get { return data; }
+      set { data = value; }
+    }
+  }
+
+  public class ScheduleTree : StorableBase {
+    private ScheduleTreeNode root;
+
+    public ScheduleTreeNode Root {
+      get { return root; }
+    }
+
+    private int timespan;
+    public int Timespan {
+      get { return timespan; }
+    }
+
+    public ScheduleTree(int timespan) {
+      root = new ScheduleTreeNode(new TimeSlot(0, timespan));
+      this.timespan = timespan;
+    }
+
+    public ScheduleTree() : this(10000) { }
+
+    private int InsertOperation(Operation op) {
+      return Insert(this.Root, op);
+    }
+
+    private int InsertOperation(TimeSlot t) {
+      return Insert(this.Root, t.operation);
+    }
+
+    // ToDo: Rewrite code! (not efficient)
+    public int Insert(Operation op) {
+      foreach(ScheduleTreeNode node in this.InOrder) {
+        int start = Math.Max(node.Data.start, op.Start);
+        if((IsLeaf(node)) && (FitsIntoEmptySlot(node.Data, start, op.Duration))) {
+          op.Start = start;
+          return Insert(node, op);
+        }
+      }
+      return -1;
+    }
+
+    private bool FitsIntoEmptySlot(TimeSlot slot, int start, int duration) {
+      // beware of operations with processing time zero --> check operation != null
+      return ((slot.free >= duration) && (slot.start <= start) && (slot.end >= start + duration) && (slot.operation == null));
+    }
+
+    private void UpdateMaxFreeSlot(ScheduleTreeNode slot) {
+      while(slot != null) {
+        if(!IsLeaf(slot)) {
+          int newMax = Math.Max(slot.Left.Data.maxFreeSlot, slot.Right.Data.maxFreeSlot);
+          slot.Data.free = slot.Left.Data.free + slot.Right.Data.free;
+          slot.Data.maxFreeSlot = newMax;
+        }
+        slot = slot.Parent;
+      }
+    }
+
+    public int Insert(ScheduleTreeNode slot, Operation op) {
+      if (op == null) {
+        return -1;
+      }
+      int end = op.Start + op.Duration;;
+      if(slot.Data.maxFreeSlot < op.Duration) {
+        return -1;
+      }
+      if(IsLeaf(slot)) {
+        // fits exactly into slot; beware of operations with processing time 0 --> check operation != null
+        if((slot.Data.start == op.Start) && (slot.Data.end == end) && (slot.Data.operation == null)) {
+          slot.Data = new TimeSlot(op);
+          UpdateMaxFreeSlot(slot);
+          return op.Start;
+        }
+        // empty slot before op. 
+        if(slot.Data.start < op.Start) {
+          ScheduleTreeNode empty1 = new ScheduleTreeNode(new TimeSlot(slot.Data.start, op.Start));
+          slot.SetLeft(empty1);
+          if(slot.Data.end > end) {
+            ScheduleTreeNode empty2 = new ScheduleTreeNode(new TimeSlot(op.Start, slot.Data.end));
+            slot.SetRight(empty2);
+            return Insert(empty2, op);
+          } else {
+            slot.SetRight(new ScheduleTreeNode(new TimeSlot(op)));
+            UpdateMaxFreeSlot(slot);
+            return op.Start;
+          }
+        }
+        // empty after op. 
+        if(slot.Data.end > end) {
+          ScheduleTreeNode occupied = new ScheduleTreeNode(new TimeSlot(op));
+          ScheduleTreeNode empty2 = new ScheduleTreeNode(new TimeSlot(end, slot.Data.end));
+          slot.SetRight(empty2);
+          slot.SetLeft(occupied);
+          UpdateMaxFreeSlot(slot);
+          return op.Start;
+        }
+      } else {
+        if(slot.Left.Data.end < end) {
+          return Insert(slot.Right, op);
+        } else {
+          return Insert(slot.Left, op);
+        }
+      }
+      return -1;
+    }
+
+    public bool IsLeaf(ScheduleTreeNode slot) {
+      return ((slot.Right == null) && (slot.Left == null));
+    }
+
+    public ScheduleTreeNode GetFirstNode() { // left-most slot
+      ScheduleTreeNode node = root;
+      while (node.Left != null) {
+        node = node.Left;
+      }
+      return node; 
+    }
+
+    public ScheduleTreeNode GetLastNode() { // right-most slot
+      ScheduleTreeNode node = root;
+      while (node.Right != null) {
+        node = node.Right;
+      }
+      return node; 
+    }
+
+    public override string ToString() {
+      StringBuilder builder = new StringBuilder();
+      foreach(ScheduleTreeNode node in this.InOrder) {
+        if(IsLeaf(node)) {
+          builder.Append(node.Data.ToString());
+          builder.Append(";");
+        }
+      }
+      return builder.ToString();
+    }
+
+    #region IEnumerable Members
+    public IEnumerable<ScheduleTreeNode> InOrder {
+      get { return ScanInOrder(root); }
+    }
+
+    IEnumerable<ScheduleTreeNode> ScanInOrder(ScheduleTreeNode root) {
+      if(root.Left != null) {
+        foreach(ScheduleTreeNode node in ScanInOrder(root.Left)) {
+          yield return node;
+        }
+      }
+      yield return root;
+      if(root.Right != null) {
+        foreach(ScheduleTreeNode node in ScanInOrder(root.Right)) {
+          yield return node;
+        }
+      }
+    }
+    #endregion
+
+    #region IStorable Members
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      node.InnerText = this.ToString();
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      string[] tokens = node.InnerText.Split(';');
+      for(int i = 0; i < tokens.Length - 1; i++) {
+        TimeSlot t = new TimeSlot(tokens[i]);
+        if(t.job > -1) {
+          this.InsertOperation(t);
+        }
+      }
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ScheduleTree clone = new ScheduleTree(timespan);
+      clonedObjects.Add(Guid, clone);
+      foreach (ScheduleTreeNode node in this.InOrder) {
+        if (IsLeaf(node) && (node.Data.job > -1)) {
+          clone.InsertOperation(node.Data);
+        }
+      }
+      return clone;
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/OperationScoreBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/OperationScoreBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/OperationScoreBase.cs	(revision 1270)
@@ -0,0 +1,54 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public abstract class OperationScoreBase : OperatorBase {
+    public OperationScoreBase() : base() {
+      AddVariableInfo(new VariableInfo("Schedule", "Partial Schedule", typeof(Schedule), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Index", "Index of operation from schedulable set to evaluate", typeof(IntData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Operation", "Schedulable Operation to evaluate", typeof(Operation), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Result", "Result of the operator", typeof(DoubleData), VariableKind.Out));
+    }
+
+    public abstract double GetOpScore(IScope unscheduled, Operation op, Schedule s);
+
+    public override IOperation Apply(IScope scope) {
+      IntData i = this.GetVariableValue<IntData>("Index", scope, false);
+      Operation op = null; 
+      if((scope.SubScopes.Count == 2) && (scope.SubScopes[1].SubScopes.Count > 0)) {
+        op = this.GetVariableValue<Operation>("Operation", scope.SubScopes[1].SubScopes[i.Data], false);
+      } else {
+        throw new Exception("SubScope structure not valid!");
+      }
+      Schedule s = this.GetVariableValue<Schedule>("Schedule", scope, false);
+      
+      GetVariableValue<DoubleData>("Result", scope, true).Data = GetOpScore(scope.SubScopes[0], op, s);
+
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/ProcessingTime.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/ProcessingTime.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/ProcessingTime.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class ProcessingTime : OperationScoreBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public override double GetOpScore(IScope unscheduled, Operation op, Schedule s) {
+      return op.Duration; 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/RemainingNrOfOperations.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/RemainingNrOfOperations.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/RemainingNrOfOperations.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class RemainingNrOfOperations : OperationScoreBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public override double GetOpScore(IScope unscheduled, Operation op, Schedule s) {
+      double score = 1; 
+      for(int i = 0; i < unscheduled.SubScopes.Count; i++) { 
+        Operation unscheduledOp = this.GetVariableValue<Operation>("Operation", unscheduled.SubScopes[i], false); 
+        if (unscheduledOp.Job == op.Job) {
+          score++; 
+        }
+      }
+      return score; 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/RemainingProcessingTime.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/RemainingProcessingTime.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/Scores/RemainingProcessingTime.cs	(revision 1270)
@@ -0,0 +1,44 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class RemainingProcessingTime : OperationScoreBase {
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    public override double GetOpScore(IScope unscheduled, Operation op, Schedule s) {
+      int remainingTime = op.Duration; 
+      for(int i = 0; i < unscheduled.SubScopes.Count; i++) { 
+        Operation unscheduledOp = this.GetVariableValue<Operation>("Operation", unscheduled.SubScopes[i], false); 
+        if (unscheduledOp.Job == op.Job) {
+          remainingTime += unscheduledOp.Duration; 
+        }
+      }
+      return remainingTime; 
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/TimeSlot.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/TimeSlot.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Scheduling.JSSP/TimeSlot.cs	(revision 1270)
@@ -0,0 +1,93 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Data; 
+
+namespace HeuristicLab.Scheduling.JSSP {
+  public class TimeSlot {
+    public int start;
+    public int end;
+    public int free;
+    public int maxFreeSlot;
+    public int job {
+      get {
+        if (operation != null) {
+          return operation.Job;
+        } else {
+          return -1;
+        }
+      }
+    } 
+    public Operation operation;
+    public List<TimeSlot> dependentSlots;
+    public TimeSlot parent; 
+
+    public TimeSlot(int start, int end) {
+      this.start = start;
+      this.end = end;
+      free = end - start;
+      maxFreeSlot = end - start;
+      dependentSlots = new List<TimeSlot>(); 
+    }
+
+    public TimeSlot(Operation op) {
+      operation = (Operation) op.Clone();
+      start = op.Start;
+      end = op.Start + op.Duration;
+      free = 0;
+      maxFreeSlot = 0;
+      dependentSlots = new List<TimeSlot>(); 
+    }
+
+    public TimeSlot(string s) {
+      string[] tokens = s.Split(',');
+      start = int.Parse(tokens[1]);
+      end = int.Parse(tokens[2]);
+      free = int.Parse(tokens[3]);
+      maxFreeSlot = int.Parse(tokens[4]);
+      int job = int.Parse(tokens[0]);
+      if (job != -1) {
+        int opIndex = int.Parse(tokens[5]);
+        int[] machines = new int[tokens.Length - 5];
+        for(int i = 0; i < tokens.Length - 5; i++) {
+          machines[i] = int.Parse(tokens[i]); 
+        }
+        operation = new Operation(job, start, end - start, opIndex, machines, null); 
+      }
+      dependentSlots = new List<TimeSlot>(); 
+    }
+
+    public override string ToString() {
+      StringBuilder builder = new StringBuilder();
+      builder.Append(String.Format("{2},{0},{1},{3},{4}", start, end, job, free, maxFreeSlot));
+      if(operation != null) {
+        builder.Append(String.Format(",{0}", operation.OperationIndex)); 
+        for (int i = 0; i < operation.Machines.Length; i++) {
+          builder.Append(String.Format(",{0}", operation.Machines[i])); 
+        }
+      }
+      return builder.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/HeuristicLab.Selection.OffspringSelection.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/HeuristicLab.Selection.OffspringSelection.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/HeuristicLab.Selection.OffspringSelection.csproj	(revision 1270)
@@ -0,0 +1,102 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{205898D3-2717-4686-AF17-52409B7EC0C6}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Selection.OffspringSelection</RootNamespace>
+    <AssemblyName>HeuristicLab.Selection.OffspringSelection-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Selection.OffspringSelection-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Selection.OffspringSelection-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabSelectionOffspringSelectionPlugin.cs" />
+    <Compile Include="OffspringAnalyzer.cs" />
+    <Compile Include="OffspringSelector.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="WeightedOffspringFitnessComparer.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/HeuristicLabSelectionOffspringSelectionPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/HeuristicLabSelectionOffspringSelectionPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/HeuristicLabSelectionOffspringSelectionPlugin.cs	(revision 1270)
@@ -0,0 +1,37 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Selection.OffspringSelection {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Selection.OffspringSelection plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Selection.OffspringSelection-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Selection.OffspringSelection-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  public class HeuristicLabSelectionOffspringSelectionPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/OffspringAnalyzer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/OffspringAnalyzer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/OffspringAnalyzer.cs	(revision 1270)
@@ -0,0 +1,136 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Selection.OffspringSelection {
+  /// <summary>
+  /// Analyzes the offspring in a given scope whether it is successful or not.
+  /// </summary>
+  public class OffspringAnalyzer : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OffspringAnalyzer"/> with six variable infos 
+    /// (<c>Maximization</c>, <c>Quality</c>, <c>ParentQualities</c>, <c>SuccessfulChild</c>,
+    /// <c>ComparisonFactor</c> and <c>ParentsCount</c>).
+    /// </summary>
+    public OffspringAnalyzer() {
+      AddVariableInfo(new VariableInfo("Maximization", "Problem is a maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("ParentQualities", "Temporarily store parent qualities", typeof(DoubleArrayData), VariableKind.New | VariableKind.Out | VariableKind.In | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("SuccessfulChild", "True if the child was successful", typeof(BoolData), VariableKind.New));
+
+      VariableInfo compFactorInfo = new VariableInfo("ComparisonFactor", "Factor for comparing the quality of a child with the qualities of its parents (0 = better than worst parent, 1 = better than best parent)", typeof(DoubleData), VariableKind.In);
+      compFactorInfo.Local = true;
+      AddVariableInfo(compFactorInfo);
+      AddVariable(new Variable("ComparisonFactor", new DoubleData(0.5)));
+      VariableInfo parentCount = new VariableInfo("ParentsCount", "How many parents created the offspring", typeof(IntData), VariableKind.In);
+      parentCount.Local = true;
+      AddVariableInfo(parentCount);
+      AddVariable(new Variable("ParentsCount", new IntData(2)));
+    }
+
+    /// <summary>
+    /// Analyzes the offspring in the given scope whether the children are successful or not.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when <c>ParentsCount</c> smaller than 1.</exception>
+    /// <exception cref="InvalidOperationException">Thrown when the number of children is not constant or
+    /// smaller than 1.</exception>
+    /// <param name="scope">The scope whose offspring should be analyzed.</param>
+    /// <returns>The next operation or <c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      bool maximize = GetVariableValue<BoolData>("Maximization", scope, true).Data;
+      double compFact = GetVariableValue<DoubleData>("ComparisonFactor", scope, true).Data;
+      int parentsCount = GetVariableValue<IntData>("ParentsCount", scope, true).Data;
+      if (parentsCount < 1) throw new InvalidOperationException("OffspringAnalyzer: ParentsCount must be >= 1");
+
+      DoubleArrayData qualities = GetVariableValue<DoubleArrayData>("ParentQualities", scope, false, false);
+      if (qualities == null) {
+        // fetch and store parent qualities
+        IVariableInfo qualityInfo = GetVariableInfo("Quality");
+        double[] qualitiesArray = new double[scope.SubScopes.Count];
+        for (int i = 0; i < qualitiesArray.Length; i++)
+          qualitiesArray[i] = scope.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+        qualities = new DoubleArrayData(qualitiesArray);
+        IVariableInfo parentQualitiesInfo = GetVariableInfo("ParentQualities");
+        if (parentQualitiesInfo.Local)
+          AddVariable(new Variable(parentQualitiesInfo.ActualName, qualities));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(parentQualitiesInfo.FormalName), qualities));
+
+        CompositeOperation next = new CompositeOperation();
+        next.AddOperation(new AtomicOperation(SubOperators[0], scope));
+        next.AddOperation(new AtomicOperation(this, scope));
+        return next;
+      } else {
+        int crossoverEvents = qualities.Data.Length / parentsCount;
+        int childrenPerCrossoverEvent = scope.SubScopes.Count / crossoverEvents;
+        if (scope.SubScopes.Count % crossoverEvents != 0 ||
+          childrenPerCrossoverEvent < 1) throw new InvalidOperationException("OffspringAnalyzer: The number of children per crossover event has to be constant and >= 1");
+        // analyze offspring of all crossoverEvents
+        for (int i = 0; i < crossoverEvents; i++) {
+          double worstParent = double.MaxValue; // lowest quality parent
+          double bestParent = double.MinValue; // highest quality parent
+          for (int y = 0; y < parentsCount; y++) {
+            if (qualities.Data[i * parentsCount + y] < worstParent) worstParent = qualities.Data[i * parentsCount + y];
+            if (qualities.Data[i * parentsCount + y] > bestParent) bestParent = qualities.Data[i * parentsCount + y];
+          }
+          for (int j = 0; j < childrenPerCrossoverEvent; j++) {
+            IVariableInfo qualityInfo = GetVariableInfo("Quality");
+            double child = scope.SubScopes[i * childrenPerCrossoverEvent + j].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+            double threshold;
+
+            if (!maximize)
+              threshold = bestParent + (worstParent - bestParent) * compFact;
+            else
+              threshold = worstParent + (bestParent - worstParent) * compFact;
+
+            IVariableInfo successfulInfo = GetVariableInfo("SuccessfulChild");
+            BoolData successful;
+            if (((!maximize) && (child < threshold)) ||
+                ((maximize) && (child > threshold)))
+              successful = new BoolData(true);
+            else
+              successful = new BoolData(false);
+            scope.SubScopes[i * childrenPerCrossoverEvent + j].AddVariable(new Variable(scope.TranslateName(successfulInfo.FormalName), successful));
+          }
+        }
+
+        // remove parent qualities again
+        IVariableInfo parentQualitiesInfo = GetVariableInfo("ParentQualities");
+        if (parentQualitiesInfo.Local)
+          RemoveVariable(parentQualitiesInfo.ActualName);
+        else
+          scope.RemoveVariable(scope.TranslateName(parentQualitiesInfo.FormalName));
+
+        return null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/OffspringSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/OffspringSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/OffspringSelector.cs	(revision 1270)
@@ -0,0 +1,172 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Selection.OffspringSelection {
+  /// <summary>
+  /// Selects successful and also according to the selection pressure some unsuccessful children.
+  /// </summary>
+  public class OffspringSelector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="OffspringSelector"/> with seven variable infos
+    /// (<c>SuccessfulChild</c>, <c>SelectionPressureLimit</c>, <c>SuccessRatioLimit</c>, 
+    /// <c>SelectionPressure</c>, <c>SuccessRatio</c>, <c>GoodChildren</c> and <c>BadChildren</c>).
+    /// </summary>
+    public OffspringSelector() {
+      AddVariableInfo(new VariableInfo("SuccessfulChild", "True if the child was successful", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SelectionPressureLimit", "Maximum selection pressure", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SuccessRatioLimit", "Maximum success ratio", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SelectionPressure", "Current selection pressure", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("SuccessRatio", "Current success ratio", typeof(DoubleData), VariableKind.New | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("GoodChildren", "Temporarily store successful children", typeof(ItemList<IScope>), VariableKind.New | VariableKind.Out | VariableKind.In | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("BadChildren", "Temporarily store unsuccessful children", typeof(ItemList<IScope>), VariableKind.New | VariableKind.Out | VariableKind.In | VariableKind.Deleted));
+    }
+
+    /// <summary>
+    /// Selects successful children and also some bad ones depending on the selection
+    /// pressure out of a population.
+    /// </summary>
+    /// <param name="scope">The current scope of the parents and the children.</param>
+    /// <returns>The next operation or <c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      double selectionPressureLimit = GetVariableValue<DoubleData>("SelectionPressureLimit", scope, true).Data;
+      double successRatioLimit = GetVariableValue<DoubleData>("SuccessRatioLimit", scope, true).Data;
+
+      IScope parents = scope.SubScopes[0];
+      IScope children = scope.SubScopes[1];
+
+      // retrieve actual selection pressure and success ratio
+      DoubleData selectionPressure = GetVariableValue<DoubleData>("SelectionPressure", scope, false, false);
+      if (selectionPressure == null) {
+        IVariableInfo selectionPressureInfo = GetVariableInfo("SelectionPressure");
+        selectionPressure = new DoubleData(0);
+        if (selectionPressureInfo.Local)
+          AddVariable(new Variable(selectionPressureInfo.ActualName, selectionPressure));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(selectionPressureInfo.FormalName), selectionPressure));
+      }
+      DoubleData successRatio = GetVariableValue<DoubleData>("SuccessRatio", scope, false, false);
+      if (successRatio == null) {
+        IVariableInfo successRatioInfo = GetVariableInfo("SuccessRatio");
+        successRatio = new DoubleData(0);
+        if (successRatioInfo.Local)
+          AddVariable(new Variable(successRatioInfo.ActualName, successRatio));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(successRatioInfo.FormalName), successRatio));
+      }
+
+      // retrieve good and bad children
+      ItemList<IScope> goodChildren = GetVariableValue<ItemList<IScope>>("GoodChildren", scope, false, false);
+      if (goodChildren == null) {
+        goodChildren = new ItemList<IScope>();
+        IVariableInfo goodChildrenInfo = GetVariableInfo("GoodChildren");
+        if (goodChildrenInfo.Local)
+          AddVariable(new Variable(goodChildrenInfo.ActualName, goodChildren));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(goodChildrenInfo.FormalName), goodChildren));
+
+        // no good children available -> first iteration of this generation -> initialize selection pressure
+        selectionPressure.Data = 0;
+      }
+      ItemList<IScope> badChildren = GetVariableValue<ItemList<IScope>>("BadChildren", scope, false, false);
+      if (badChildren == null) {
+        badChildren = new ItemList<IScope>();
+        IVariableInfo badChildrenInfo = GetVariableInfo("BadChildren");
+        if (badChildrenInfo.Local)
+          AddVariable(new Variable(badChildrenInfo.ActualName, badChildren));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(badChildrenInfo.FormalName), badChildren));
+      }
+
+      // separate new children in good and bad children
+      int goodCount = 0;
+      int badCount = 0;
+      IVariableInfo successfulInfo = GetVariableInfo("SuccessfulChild");
+      while (children.SubScopes.Count > 0) {
+        IScope child = children.SubScopes[0];
+        bool successful = child.GetVariableValue<BoolData>(successfulInfo.FormalName, false).Data;
+        if (successful) {
+          goodCount++;
+          goodChildren.Add(child);
+        } else {
+          badCount++;
+          // only keep the child if we have not filled up the pool or if we reached the
+          // selection pressure limit in which case we have to keep more lucky losers than usual
+          if ((1 - successRatioLimit) * parents.SubScopes.Count > badChildren.Count ||
+            selectionPressure.Data >= selectionPressureLimit) {
+            badChildren.Add(child);
+          }
+        }
+        children.RemoveSubScope(child);
+      }
+
+      // calculate actual selection pressure and success ratio
+      selectionPressure.Data += (goodCount + badCount) / ((double)parents.SubScopes.Count);
+      successRatio.Data = goodChildren.Count / ((double)parents.SubScopes.Count);
+
+      // check if enough children have been generated
+      if (((selectionPressure.Data < selectionPressureLimit) && (successRatio.Data < successRatioLimit)) ||
+          ((goodChildren.Count + badChildren.Count) < parents.SubScopes.Count)) {
+        // more children required -> reduce left and start children generation again
+        scope.RemoveSubScope(parents);
+        scope.RemoveSubScope(children);
+        for (int i = 0; i < parents.SubScopes.Count; i++)
+          scope.AddSubScope(parents.SubScopes[i]);
+
+        return new AtomicOperation(SubOperators[0], scope);
+      } else {
+        // enough children generated
+        while (children.SubScopes.Count < parents.SubScopes.Count) {
+          if (goodChildren.Count > 0) {
+            children.AddSubScope((IScope)goodChildren[0]);
+            goodChildren.RemoveAt(0);
+          } else {
+            children.AddSubScope((IScope)badChildren[0]);
+            badChildren.RemoveAt(0);
+          }
+        }
+
+        // remove good and bad children again
+        IVariableInfo goodChildrenInfo = GetVariableInfo("GoodChildren");
+        if (goodChildrenInfo.Local)
+          RemoveVariable(goodChildrenInfo.ActualName);
+        else
+          scope.RemoveVariable(scope.TranslateName(goodChildrenInfo.FormalName));
+        IVariableInfo badChildrenInfo = GetVariableInfo("BadChildren");
+        if (badChildrenInfo.Local)
+          RemoveVariable(badChildrenInfo.ActualName);
+        else
+          scope.RemoveVariable(scope.TranslateName(badChildrenInfo.FormalName));
+        return null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Selection.OffspringSelection")]
+[assembly: AssemblyDescription("HeuristicLab Offspring Selection operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("b09e28c5-1ac5-4f1c-ba80-60558319828e")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/WeightedOffspringFitnessComparer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/WeightedOffspringFitnessComparer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection.OffspringSelection/WeightedOffspringFitnessComparer.cs	(revision 1270)
@@ -0,0 +1,89 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2009 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Selection.OffspringSelection {
+  /// <summary>
+  /// Analyzes the offspring on whether it is successful or not based on its quality in comparison to its best and worst parents' qualities.
+  /// </summary>
+  public class WeightedOffspringFitnessComparer : OperatorBase  {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Compares the quality values of the child with a weighted average of the best and worst parents' qualities.
+Adds a variable SuccessfulChild into the current scope with the result of the comparison.";
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="WeightedOffspringFitnessComparer"/> with four variable infos 
+    /// (<c>Maximization</c>, <c>Quality</c>, <c>SuccessfulChild</c>, and <c>ComparisonFactor</c>).
+    /// </summary>
+    public WeightedOffspringFitnessComparer()
+      : base() {
+      AddVariableInfo(new VariableInfo("Maximization", "True if the problem is a maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("SuccessfulChild", "True if the child is successful", typeof(BoolData), VariableKind.New));
+      AddVariableInfo(new VariableInfo("ComparisonFactor", "Factor for comparing the quality of a child with the qualities of its parents (0 = better than worst parent, 1 = better than best parent)", typeof(DoubleData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Weighs the worst and best parent quality with a given factor and decides whether the child is better than this threshold.
+    /// The result of this decision is added as variable "SuccessfulChild" into the scope.
+    /// </summary>
+    /// <param name="scope">The current scope which represents a new child.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      bool maximize = GetVariableValue<BoolData>("Maximization", scope, true).Data;
+      double compFactor = GetVariableValue<DoubleData>("ComparisonFactor", scope, true).Data;
+      double child = GetVariableValue<DoubleData>("Quality", scope, false).Data;
+
+      double lowParent = double.MaxValue; // lowest quality parent
+      double highParent = double.MinValue; // highest quality parent
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        double parentQuality = scope.SubScopes[i].GetVariableValue<DoubleData>("Quality", false).Data;
+        if (parentQuality < lowParent) lowParent = parentQuality;
+        if (parentQuality > highParent) highParent = parentQuality;
+      }
+
+      double threshold;
+      if (!maximize)
+        threshold = highParent + (lowParent - highParent) * compFactor;
+      else
+        threshold = lowParent + (highParent - lowParent) * compFactor;
+
+      BoolData successful;
+      if (((!maximize) && (child < threshold)) ||
+          ((maximize) && (child > threshold)))
+        successful = new BoolData(true);
+      else
+        successful = new BoolData(false);
+
+      scope.AddVariable(new Variable(scope.TranslateName("SuccessfulChild"), successful));
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/HeuristicLab.Selection.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/HeuristicLab.Selection.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/HeuristicLab.Selection.csproj	(revision 1270)
@@ -0,0 +1,116 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Selection</RootNamespace>
+    <AssemblyName>HeuristicLab.Selection-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.Selection-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Selection-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="RightChildReducer.cs" />
+    <Compile Include="LeftReducer.cs" />
+    <Compile Include="MergingReducer.cs" />
+    <Compile Include="ProportionalSelector.cs" />
+    <Compile Include="LinearRankSelector.cs" />
+    <Compile Include="LeftSelector.cs" />
+    <Compile Include="RandomSelector.cs" />
+    <Compile Include="ReducerBase.cs" />
+    <Compile Include="RightReducer.cs" />
+    <Compile Include="RightSelector.cs" />
+    <Compile Include="SelectorBase.cs" />
+    <Compile Include="StochasticSelectorBase.cs" />
+    <Compile Include="TournamentSelector.cs" />
+    <Compile Include="HeuristicLabSelectionPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/HeuristicLabSelectionPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/HeuristicLabSelectionPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/HeuristicLabSelectionPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Selection plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.Selection-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Selection-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabSelectionPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LeftReducer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LeftReducer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LeftReducer.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Takes only sub scopes from the left child of the tree.
+  /// </summary>
+  public class LeftReducer : ReducerBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Takes only the sub scopes from the left sub scope of the tree.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <returns>All sub scopes from the left part of the tree.</returns>
+    protected override ICollection<IScope> Reduce(IScope scope) {
+      List<IScope> subScopes = new List<IScope>();
+
+      if (scope.SubScopes.Count > 0)
+        subScopes.AddRange(scope.SubScopes[0].SubScopes);
+      return subScopes;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LeftSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LeftSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LeftSelector.cs	(revision 1270)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Copies or moves a defined number of sub scopes from a source scope to a target scope, starting at
+  /// the left side of the tree.
+  /// </summary>
+  public class LeftSelector : StochasticSelectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Copies or moves a number of sub scopes (<paramref name="selected"/>) from <paramref name="source"/>
+    /// starting at the left end to the <paramref name="target"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="source">The source scope from which to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to move. Can be also bigger than the total 
+    /// number of sub scopes in <paramref name="source"/>, then the copying process starts again from the 
+    /// beginning.</param>
+    /// <param name="target">The target where to copy/move the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be copied or moved.</param>
+    protected override void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected) {
+      int index = 0;
+      for (int i = 0; i < selected; i++) {
+        if (copySelected) {
+          target.AddSubScope((IScope)source.SubScopes[index].Clone());
+          index++;
+          if (index >= source.SubScopes.Count) index = 0;
+        } else {
+          IScope s = source.SubScopes[0];
+          source.RemoveSubScope(s);
+          target.AddSubScope(s);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LinearRankSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LinearRankSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/LinearRankSelector.cs	(revision 1270)
@@ -0,0 +1,85 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Selects scopes based on their rank, which has been determined through their quality.
+  /// </summary>
+  public class LinearRankSelector : StochasticSelectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="LinearRankSelector"/> with the <c>CopySelected</c> flag
+    /// set to <c>true</c>.
+    /// </summary>
+    public LinearRankSelector() {
+      GetVariable("CopySelected").GetValue<BoolData>().Data = true;
+    }
+
+    /// <summary>
+    /// Copies or moves sub scopes from the given <paramref name="source"/> to the specified
+    /// <paramref name="target"/> according to their rank which is determined through their quality.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when no source sub scopes are available.</exception>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="source">The source scope from where to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to copy/move.</param>
+    /// <param name="target">The target scope where to add the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be moved or copied.</param>
+    protected override void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected) {
+      int subScopes = source.SubScopes.Count;
+      int lotSum = (subScopes * (subScopes + 1)) / 2;
+      int selectedLot;
+      int currentLot;
+      int index;
+
+      for (int i = 0; i < selected; i++) {
+        if (subScopes < 1) throw new InvalidOperationException("No source scopes available to select.");
+
+        selectedLot = random.Next(1, lotSum + 1);
+        currentLot = subScopes;  // first individual is the best one
+        index = 0;
+        while (currentLot < selectedLot) {
+          index++;
+          currentLot += subScopes - index;
+        }
+        IScope selectedScope = source.SubScopes[index];
+        if (copySelected)
+          target.AddSubScope((IScope)selectedScope.Clone());
+        else {
+          source.RemoveSubScope(selectedScope);
+          target.AddSubScope(selectedScope);
+          subScopes--;
+          lotSum = (subScopes * (subScopes + 1)) / 2;
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/MergingReducer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/MergingReducer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/MergingReducer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Merges all sub scopes of the children to one list.
+  /// </summary>
+  public class MergingReducer : ReducerBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Merges all sub scopes of the sub scopes of the current <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The current scope whose sub scopes to merge.</param>
+    /// <returns>A list of all merged subscopes of the given <paramref name="scope"/>.</returns>
+    protected override ICollection<IScope> Reduce(IScope scope) {
+      List<IScope> subScopes = new List<IScope>();
+
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        for (int j = 0; j < scope.SubScopes[i].SubScopes.Count; j++)
+          subScopes.Add(scope.SubScopes[i].SubScopes[j]);
+      }
+      return subScopes;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Selection")]
+[assembly: AssemblyDescription("HeuristicLab selection operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("ed119c1e-a48f-41de-a797-43352ff4f1a3")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/ProportionalSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/ProportionalSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/ProportionalSelector.cs	(revision 1270)
@@ -0,0 +1,155 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Copies or moves a number of sub scopes from a source scope to a target scope, their probability
+  /// to be selected depending on their quality.
+  /// </summary>
+  public class ProportionalSelector : StochasticSelectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ProportionalSelector"/> with three variable infos 
+    /// (<c>Maximization</c>, <c>Quality</c> and <c>Windowing</c>, being a local variable and initialized 
+    /// with <c>true</c>) and the <c>CopySelected</c> flag set to <c>true</c>.
+    /// </summary>
+    public ProportionalSelector() {
+      AddVariableInfo(new VariableInfo("Maximization", "Maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Windowing", "Apply windowing strategy (selection probability is proportional to the quality differences and not to the total quality)", typeof(BoolData), VariableKind.In));
+      GetVariableInfo("Windowing").Local = true;
+      AddVariable(new Variable("Windowing", new BoolData(true)));
+      GetVariable("CopySelected").GetValue<BoolData>().Data = true;
+    }
+
+    /// <summary>
+    /// Copies or movies a number of sub scopes (<paramref name="selected"/>) in the given 
+    /// <paramref name="source"/> to the given <paramref name="target"/>, selection takes place with respect
+    /// to the quality of the scope.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="source">The source scope from where to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to copy/move.</param>
+    /// <param name="target">The target scope where to add the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be moved or copied.</param>
+    protected override void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected) {
+      bool maximization = GetVariableValue<BoolData>("Maximization", source, true).Data;
+      IVariableInfo qualityInfo = GetVariableInfo("Quality");
+      bool windowing = GetVariableValue<BoolData>("Windowing", source, true).Data;
+
+      double[] qualities;
+      double qualitySum;
+      double selectedQuality;
+      double sum;
+      int j;
+
+      GenerateQualitiesArray(source, maximization, qualityInfo, windowing, out qualities, out qualitySum);
+
+      // perform selection
+      for (int i = 0; i < selected; i++) {
+        selectedQuality = random.NextDouble() * qualitySum;
+        sum = 0;
+        j = 0;
+        while ((j < qualities.Length) && (sum <= selectedQuality)) {
+          sum += qualities[j];
+          j++;
+        }
+        IScope selectedScope = source.SubScopes[j - 1];
+        if (copySelected)
+          target.AddSubScope((IScope)selectedScope.Clone());
+        else {
+          source.RemoveSubScope(selectedScope);
+          target.AddSubScope(selectedScope);
+          GenerateQualitiesArray(source, maximization, qualityInfo, windowing, out qualities, out qualitySum);
+        }
+      }
+    }
+
+    /// <summary>
+    /// Calculates the qualities of the sub scopes of the given <paramref name="source"/>.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when the sub scopes are not sorted according
+    /// to their solution qualities or if the quality value is beyond zero and the <c>windowing</c>
+    /// flag is set to <c>false</c>.</exception>
+    /// <param name="source">The scource scope where to calculate the qualities.</param>
+    /// <param name="maximization">Boolean flag whether is a maximization problem.</param>
+    /// <param name="qualityInfo">The quality variable info.</param>
+    /// <param name="windowing">Boolean flag whether the windowing strategy shall be applied.</param>
+    /// <param name="qualities">Output parameter; contains all qualities of the sub scopes.</param>
+    /// <param name="qualitySum">Output parameter; the sum of all qualities.</param>
+    private void GenerateQualitiesArray(IScope source, bool maximization, IVariableInfo qualityInfo, bool windowing, out double[] qualities, out double qualitySum) {
+      int subScopes = source.SubScopes.Count;
+      qualities = new double[subScopes];
+      qualitySum = 0;
+
+      if (subScopes < 1) throw new InvalidOperationException("No source scopes to select available.");
+
+      double best = source.SubScopes[0].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+      double worst = source.SubScopes[subScopes - 1].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+      double limit = Math.Min(worst * 2, double.MaxValue);
+      double min = Math.Min(best, worst);
+      double max = Math.Max(best, worst);
+      double solutionQuality;
+
+      // preprocess fitness values, apply windowing if desired
+      for (int i = 0; i < qualities.Length; i++) {
+        solutionQuality = source.SubScopes[i].GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+        if (solutionQuality < min || solutionQuality > max) {
+          // something has obviously gone wrong here
+          string errorMessage = "There is a problem with the ordering of the source sub-scopes in " + Name + ".\r\n" +
+            "The quality of solution number " + i.ToString() + " is ";
+          if (solutionQuality < min) errorMessage += "below";
+          else errorMessage += "greater than";
+          errorMessage += " the calculated qualities range:\r\n";
+          errorMessage += solutionQuality.ToString() + " is outside the interval [ " + min.ToString() + " ; " + max.ToString() + " ].";
+          throw new InvalidOperationException(errorMessage);
+        }
+        if (best != worst) {  // prevent division by zero
+          if (windowing) {
+            if (!maximization) {
+              qualities[i] = 1 - ((solutionQuality - best) / (worst - best));
+            } else {
+              qualities[i] = (solutionQuality - worst) / (best - worst);
+            }
+          } else {
+            if (solutionQuality < 0.0) throw new InvalidOperationException("ERROR in ProportionalSelector: Non-windowing is not working with quality values < 0. Use windowing.");
+            if (!maximization) qualities[i] = limit - solutionQuality;
+            else qualities[i] = solutionQuality;
+          }
+        } else {  // best == worst -> all fitness values are equal
+          qualities[i] = 1;
+        }
+        qualitySum += qualities[i];
+      }
+      if (double.IsInfinity(qualitySum)) qualitySum = double.MaxValue;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RandomSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RandomSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RandomSelector.cs	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Copies or moves a defined number of sub scopes from a source scope to a target scope, being selected
+  /// randomly.
+  /// </summary>
+  public class RandomSelector : StochasticSelectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Copies or moves a number of sub scopes (<paramref name="selected"/>) from <paramref name="source"/>
+    /// to the <paramref name="target"/>, chosen randomly.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="source">The source scope from which to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to move.</param>
+    /// <param name="target">The target where to copy/move the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be copied or moved.</param>
+    protected override void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected) {
+      for (int i = 0; i < selected; i++) {
+        if (copySelected) {
+          target.AddSubScope((IScope)source.SubScopes[random.Next(source.SubScopes.Count)].Clone());
+        } else {
+          IScope s = source.SubScopes[random.Next(source.SubScopes.Count)];
+          source.RemoveSubScope(s);
+          target.AddSubScope(s);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/ReducerBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/ReducerBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/ReducerBase.cs	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Base class for all reducers.
+  /// </summary>
+  public abstract class ReducerBase : OperatorBase {
+    /// <summary>
+    /// Reduces the given <paramref name="scope"/> so that it contains in the end only the reduced
+    /// elements.
+    /// </summary>
+    /// <remarks>Calls <see cref="Reduce"/>.</remarks>
+    /// <param name="scope">The scope to reduce.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      ICollection<IScope> subScopes = Reduce(scope);
+
+      while (scope.SubScopes.Count > 0)
+        scope.RemoveSubScope(scope.SubScopes[0]);
+
+      foreach (IScope s in subScopes)
+        scope.AddSubScope(s);
+
+      return null;
+    }
+
+    /// <summary>
+    /// Reduces the current <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope to reduce.</param>
+    /// <returns>The reduced list of scopes, that should be kept.</returns>
+    protected abstract ICollection<IScope> Reduce(IScope scope);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightChildReducer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightChildReducer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightChildReducer.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Reduces the sub scopes by one level, so that the right sub scope contains also the right child scopes
+  /// of the left sub scope and the left sub scope represents its left child scope.
+  /// <pre>                                                      
+  ///                   scope             scope  
+  ///                   / | \             /   \      
+  ///                  L ... R   =>      A     R                 
+  ///                / | \    \              / /\ \       
+  ///               A ... LR   C             C D E F      
+  ///                     /|\                              
+  ///                    D E F                             
+  /// </pre>
+  /// </summary>
+  public class RightChildReducer : ReducerBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Reduces the right child of the left sub scope and adds its sub scopes to the right sub scope.
+    /// The left sub scope is also narrowed, which means it represents then its left child.
+    /// </summary>
+    /// <param name="scope">The current scope to reduce.</param>
+    /// <returns>A list of the new reduced sub scopes.</returns>
+    protected override ICollection<IScope> Reduce(IScope scope) {
+      IScope rightChild = scope.SubScopes[scope.SubScopes.Count - 1];
+      IScope leftChild = scope.SubScopes[0];
+      IScope leftRightChild = leftChild.SubScopes[leftChild.SubScopes.Count - 1];
+
+      // merge right children
+      for (int i = 0; i < leftRightChild.SubScopes.Count; i++)
+        rightChild.AddSubScope(leftRightChild.SubScopes[i]);
+
+      leftChild = leftChild.SubScopes[0];
+
+      List<IScope> subScopes = new List<IScope>();
+      subScopes.Add(leftChild);
+      subScopes.Add(rightChild);
+      return subScopes;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightReducer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightReducer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightReducer.cs	(revision 1270)
@@ -0,0 +1,51 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Takes only sub scopes from the right child of the tree.
+  /// </summary>
+  public class RightReducer : ReducerBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Takes only the sub scopes from the right part of the tree.
+    /// </summary>
+    /// <param name="scope">The current scope.</param>
+    /// <returns>All sub scopes from the right sub scope of the tree.</returns>
+    protected override ICollection<IScope> Reduce(IScope scope) {
+      List<IScope> subScopes = new List<IScope>();
+
+      if (scope.SubScopes.Count > 0)
+        subScopes.AddRange(scope.SubScopes[scope.SubScopes.Count - 1].SubScopes);
+      return subScopes;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/RightSelector.cs	(revision 1270)
@@ -0,0 +1,64 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Copies or moves a defined number of sub scopes from a source scope to a target scope, starting at
+  /// the right side of the tree.
+  /// </summary>
+  public class RightSelector : StochasticSelectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Copies or moves a number of sub scopes (<paramref name="selected"/>) from <paramref name="source"/>
+    /// starting at the right end to the <paramref name="target"/>.
+    /// </summary>
+    /// <param name="random">A random number generator.</param>
+    /// <param name="source">The source scope from which to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to move. Can be also bigger than the total 
+    /// number of sub scopes in <paramref name="source"/>, then the copying process starts again from the 
+    /// beginning.</param>
+    /// <param name="target">The target where to copy/move the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be copied or moved.</param>
+    protected override void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected) {
+      int index = source.SubScopes.Count - 1;
+      for (int i = 0; i < selected; i++) {
+        if (copySelected) {
+          target.AddSubScope((IScope)source.SubScopes[index].Clone());
+          index--;
+          if (index < 0) index = source.SubScopes.Count - 1;
+        } else {
+          IScope s = source.SubScopes[source.SubScopes.Count - 1];
+          source.RemoveSubScope(s);
+          target.AddSubScope(s);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/SelectorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/SelectorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/SelectorBase.cs	(revision 1270)
@@ -0,0 +1,79 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Base class for all selectors.
+  /// </summary>
+  public abstract class SelectorBase : OperatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="SelectorBase"/> with one variable infos 
+    /// (<c>CopySelected</c>), which is a local one.
+    /// </summary>
+    public SelectorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("CopySelected", "Copy or move selected sub-scopes", typeof(BoolData), VariableKind.In));
+      GetVariableInfo("CopySelected").Local = true;
+      AddVariable(new Variable("CopySelected", new BoolData(false)));
+    }
+
+    /// <summary>
+    /// Inserts a new level of sub scopes in the given <paramref name="scope"/> with a scope containing the
+    /// remaining sub scopes and another with the selected ones.
+    /// </summary>
+    /// <remarks>Calls <see cref="Select"/>.</remarks>
+    /// <param name="scope">The scope where to select the sub scopes.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      BoolData copySelected = GetVariableValue<BoolData>("CopySelected", scope, true);
+
+      IScope source = new Scope("Remaining");
+      while (scope.SubScopes.Count > 0) {
+        IScope s = scope.SubScopes[0];
+        scope.RemoveSubScope(s);
+        source.AddSubScope(s);
+      }
+      scope.AddSubScope(source);
+      IScope target = new Scope("Selected");
+      scope.AddSubScope(target);
+
+      Select(source, target, copySelected.Data);
+
+      return null;
+    }
+
+    /// <summary>
+    /// Selects sub scopes from the specified <paramref name="source"/> and moves or copies it to the
+    /// specified <paramref name="target"/>.
+    /// </summary>
+    /// <param name="source">The source scope where to select the sub scopes.</param>
+    /// <param name="target">The target where to add the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether to copy or move the selected sub scopes.</param>
+    protected abstract void Select(IScope source, IScope target, bool copySelected);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/StochasticSelectorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/StochasticSelectorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/StochasticSelectorBase.cs	(revision 1270)
@@ -0,0 +1,71 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Base class for all selectors that use a random number generator.
+  /// </summary>
+  public abstract class StochasticSelectorBase : SelectorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="StochasticSelectorBase"/> with two variable infos
+    /// (<c>Random</c> and <c>Selected</c>).
+    /// </summary>
+    public StochasticSelectorBase()
+      : base() {
+      AddVariableInfo(new VariableInfo("Random", "Pseudo random number generator", typeof(IRandom), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Selected", "Number of selected sub-scopes", typeof(IntData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Copies or moves randomly chosen sub scopes from the given <paramref name="source"/> to the specified 
+    /// <paramref name="target"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Select(HeuristicLab.Core.IRandom, HeuristicLab.Core.IScope, int,
+    /// HeuristicLab.Core.IScope, bool)"/></remarks>
+    /// <param name="source">The source scope from where to copy/move the sub scopes.</param>
+    /// <param name="target">The target scope where to add the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be moved or copied.</param>
+    protected sealed override void Select(IScope source, IScope target, bool copySelected) {
+      IRandom random = GetVariableValue<IRandom>("Random", source, true);
+      IntData selected = GetVariableValue<IntData>("Selected", source, true);
+
+      Select(random, source, selected.Data, target, copySelected);
+    }
+
+    /// <summary>
+    /// Copies or moves randomly chosen sub scopes from the given <paramref name="source"/> to the specified 
+    /// <paramref name="target"/>.
+    /// </summary>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="source">The source scope from where to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to copy/move.</param>
+    /// <param name="target">The target scope where to add the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be moved or copied.</param>
+    protected abstract void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/TournamentSelector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/TournamentSelector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Selection/TournamentSelector.cs	(revision 1270)
@@ -0,0 +1,90 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Selection {
+  /// <summary>
+  /// Moves or copies a defined number of the best sub scopes from a source scope to a target scope.
+  /// </summary>
+  public class TournamentSelector : StochasticSelectorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"TODO\r\nOperator description still missing ..."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TournamentSelector"/> with three variable infos 
+    /// (<c>Maximization</c>, <c>Quality</c> and <c>GroupSize</c>, being a local variable and set to 
+    /// <c>2</c>) with <c>CopySelected</c> set to <c>true</c>.
+    /// </summary>
+    public TournamentSelector() {
+      AddVariableInfo(new VariableInfo("Maximization", "Maximization problem", typeof(BoolData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("Quality", "Quality value", typeof(DoubleData), VariableKind.In));
+      AddVariableInfo(new VariableInfo("GroupSize", "Size of the tournament group", typeof(IntData), VariableKind.In));
+      GetVariableInfo("GroupSize").Local = true;
+      AddVariable(new Variable("GroupSize", new IntData(2)));
+      GetVariable("CopySelected").GetValue<BoolData>().Data = true;
+    }
+
+    /// <summary>
+    /// Copies or moves the best sub scopes from the given <paramref name="source"/> to the specified
+    /// <paramref name="target"/>.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown when no source sub scopes are available.</exception>
+    /// <param name="random">The random number generator.</param>
+    /// <param name="source">The source scope from where to copy/move the sub scopes.</param>
+    /// <param name="selected">The number of sub scopes to copy/move.</param>
+    /// <param name="target">The target scope where to add the sub scopes.</param>
+    /// <param name="copySelected">Boolean flag whether the sub scopes shall be moved or copied.</param>
+    protected override void Select(IRandom random, IScope source, int selected, IScope target, bool copySelected) {
+      IVariableInfo qualityInfo = GetVariableInfo("Quality");
+      bool maximization = GetVariableValue<BoolData>("Maximization", source, true).Data;
+      int groupSize = GetVariableValue<IntData>("GroupSize", source, true).Data;
+      for (int i = 0; i < selected; i++) {
+        if (source.SubScopes.Count < 1) throw new InvalidOperationException("No source scopes available to select.");
+
+        IScope selectedScope = source.SubScopes[random.Next(source.SubScopes.Count)];
+        double best = selectedScope.GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+        for (int j = 1; j < groupSize; j++) {
+          IScope scope = source.SubScopes[random.Next(source.SubScopes.Count)];
+          double quality = scope.GetVariableValue<DoubleData>(qualityInfo.FormalName, false).Data;
+          if (((maximization) && (quality > best)) ||
+              ((!maximization) && (quality < best))) {
+            best = quality;
+            selectedScope = scope;
+          }
+        }
+
+        if (copySelected)
+          target.AddSubScope((IScope)selectedScope.Clone());
+        else {
+          source.RemoveSubScope(selectedScope);
+          target.AddSubScope(selectedScope);
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/HeuristicLab.SequentialEngine.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/HeuristicLab.SequentialEngine.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/HeuristicLab.SequentialEngine.csproj	(revision 1270)
@@ -0,0 +1,104 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B4BE8E53-BA06-4237-9A01-24255F880201}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.SequentialEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.SequentialEngine-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.SequentialEngine-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.SequentialEngine-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabSequentialEnginePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SequentialEngine.cs" />
+    <Compile Include="SequentialEngineEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SequentialEngineEditor.Designer.cs">
+      <DependentUpon>SequentialEngineEditor.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/HeuristicLabSequentialEnginePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/HeuristicLabSequentialEnginePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/HeuristicLabSequentialEnginePlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.SequentialEngine {
+  /// <summary>
+  /// Plugin class for HeuristicLab.SequentialEngine plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.SequentialEngine-3.2")]
+  [PluginFile(Filename = "HeuristicLab.SequentialEngine-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabSequentialEnginePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.SequentialEngine")]
+[assembly: AssemblyDescription("HeuristicLab engine for sequential processing")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("00484492-6cc5-4a0a-9876-327488f08c49")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngine.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngine.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngine.cs	(revision 1270)
@@ -0,0 +1,96 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using System.Threading;
+
+namespace HeuristicLab.SequentialEngine {
+  /// <summary>
+  /// Represents an engine that executes its steps sequentially, also if they could be executed 
+  /// in parallel.
+  /// </summary>
+  public class SequentialEngine : EngineBase, IEditable {
+    private IOperator currentOperator;
+
+    /// <summary>
+    /// Creates a new instance of <see cref="SequentialEngineEditor"/>.
+    /// </summary>
+    /// <returns>The created view as <see cref="SequentialEngineEditor"/>.</returns>
+    public override IView CreateView() {
+      return new SequentialEngineEditor(this);
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="SequentialEngineEditor"/>.
+    /// </summary>
+    /// <returns>The created editor as <see cref="SequentialEngineEditor"/>.</returns>
+    public virtual IEditor CreateEditor() {
+      return new SequentialEngineEditor(this);
+    }
+
+    /// <summary>
+    /// Aborts the current operator.
+    /// </summary>
+    /// <remarks>Calls <see cref="EngineBase.Abort"/> of base class <see cref="EngineBase"/> and
+    /// <see cref="IOperator.Abort"/> of the current <see cref="IOperator"/>.</remarks>
+    public override void Abort() {
+      base.Abort();
+      if (currentOperator != null)
+        currentOperator.Abort();
+    }
+
+    /// <summary>
+    /// Deals with the next operation, if it is an <see cref="AtomicOperation"/> it is executed,
+    /// if it is a <see cref="CompositeOperation"/> its single operations are pushed on the execution stack.
+    /// </summary>
+    /// <remarks>If an error occurs during the execution the operation is aborted and the operation
+    /// is pushed on the stack again.<br/>
+    /// If the execution was successful <see cref="EngineBase.OnOperationExecuted"/> is called.</remarks>
+    protected override void ProcessNextOperation() {
+      IOperation operation = myExecutionStack.Pop();
+      if (operation is AtomicOperation) {
+        AtomicOperation atomicOperation = (AtomicOperation)operation;
+        IOperation next = null;
+        try {
+          currentOperator = atomicOperation.Operator;
+          next = atomicOperation.Operator.Execute(atomicOperation.Scope);
+        }
+        catch (Exception ex) {
+          // push operation on stack again
+          myExecutionStack.Push(atomicOperation);
+          Abort();
+          ThreadPool.QueueUserWorkItem(delegate(object state) { OnExceptionOccurred(ex);});
+        }
+        if (next != null)
+          myExecutionStack.Push(next);
+        OnOperationExecuted(atomicOperation);
+        if (atomicOperation.Operator.Breakpoint) Abort();
+      } else if (operation is CompositeOperation) {
+        CompositeOperation compositeOperation = (CompositeOperation)operation;
+        for (int i = compositeOperation.Operations.Count - 1; i >= 0; i--)
+          myExecutionStack.Push(compositeOperation.Operations[i]);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngineEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngineEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngineEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,91 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.SequentialEngine {
+  partial class SequentialEngineEditor {
+    /// <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.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.operatorGraphGroupBox.SuspendLayout();
+      this.globalScopeGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.SplitterDistance = 495;
+      // 
+      // operatorGraphGroupBox
+      // 
+      this.operatorGraphGroupBox.Size = new System.Drawing.Size(495, 441);
+      // 
+      // globalScopeGroupBox
+      // 
+      this.globalScopeGroupBox.Size = new System.Drawing.Size(141, 441);
+      // 
+      // operatorGraphView
+      // 
+      this.operatorGraphView.Size = new System.Drawing.Size(489, 422);
+      // 
+      // scopeView
+      // 
+      this.scopeView.Size = new System.Drawing.Size(135, 422);
+      // 
+      // SequentialEngineEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "SequentialEngineEditor";
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.operatorGraphGroupBox.ResumeLayout(false);
+      this.globalScopeGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngineEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngineEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SequentialEngine/SequentialEngineEditor.cs	(revision 1270)
@@ -0,0 +1,62 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.SequentialEngine {
+  /// <summary>
+  /// Visual representation of a <see cref="SequentialEngine"/>.
+  /// </summary>
+  public partial class SequentialEngineEditor : EngineBaseEditor {
+    /// <summary>
+    /// Gets or set the engine to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="EngineBaseEditor.Engine"/> of base class 
+    /// <see cref="EngineBaseEditor"/>. No own data storage present.</remarks>
+    public SequentialEngine SequentialEngine {
+      get { return (SequentialEngine)Engine; }
+      set { base.Engine = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="SequentialEngineEditor"/>.
+    /// </summary>
+    public SequentialEngineEditor() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="SequentialEngineEditor"/> with the given
+    /// <paramref name="sequentialEngine"/>.
+    /// </summary>
+    /// <param name="sequentialEngine">The engine to display.</param>
+    public SequentialEngineEditor(SequentialEngine sequentialEngine)
+      : this() {
+      SequentialEngine = sequentialEngine;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraint.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraint.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraint.cs	(revision 1270)
@@ -0,0 +1,202 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Globalization;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Constraints;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public class DoubleParameterBoundConstraint : ConstraintBase {
+    private double lowerBound;
+    public double LowerBound {
+      get { return lowerBound; }
+      set {
+        lowerBound = value;
+        OnChanged();
+      }
+    }
+    private bool lowerBoundIncluded;
+    public bool LowerBoundIncluded {
+      get { return lowerBoundIncluded; }
+      set {
+        lowerBoundIncluded = value;
+        OnChanged();
+      }
+    }
+    private bool lowerBoundEnabled;
+    public bool LowerBoundEnabled {
+      get { return lowerBoundEnabled; }
+      set {
+        lowerBoundEnabled = value;
+        OnChanged();
+      }
+    }
+    private double upperBound;
+    public double UpperBound {
+      get { return upperBound; }
+      set {
+        upperBound = value;
+        OnChanged();
+      }
+    }
+    private bool upperBoundIncluded;
+    public bool UpperBoundIncluded {
+      get { return upperBoundIncluded; }
+      set {
+        upperBoundIncluded = value;
+        OnChanged();
+      }
+    }
+    private bool upperBoundEnabled;
+    public bool UpperBoundEnabled {
+      get { return upperBoundEnabled; }
+      set {
+        upperBoundEnabled = value;
+        OnChanged();
+      }
+    }
+    private string parameterName;
+    public string ParameterName {
+      get { return parameterName; }
+      set {
+        parameterName = value;
+        OnChanged();
+      }
+    }
+
+    public override string Description {
+      get { return "The double is limited one or two sided by a lower and/or upper boundary"; }
+    }
+
+    public DoubleParameterBoundConstraint()
+      : this(double.MinValue, double.MaxValue, "undefined") {
+    }
+
+    public DoubleParameterBoundConstraint(double lowerBound, double upperBound, string parameterName)
+      : this(lowerBound, true, upperBound, true, parameterName) {
+    }
+
+    public DoubleParameterBoundConstraint(double lowerBound, bool lowerBoundIncluded, double upperBound, bool upperBoundIncluded, string parameterName)
+      : base() {
+      this.lowerBound = lowerBound;
+      this.lowerBoundIncluded = lowerBoundIncluded;
+      this.lowerBoundEnabled = true;
+      this.upperBound = upperBound;
+      this.upperBoundIncluded = upperBoundIncluded;
+      this.upperBoundEnabled = true;
+      this.parameterName = parameterName;
+    }
+
+
+    public override bool Check(IItem data) {
+      ConstrainedItemList list = (data as ConstrainedItemList);
+      if (list == null) return false;
+      for (int i = 0; i < list.Count; i++) {
+        if (list[i] is IVariable && ((IVariable)list[i]).Name.Equals(parameterName) && ((IVariable)list[i]).Value is DoubleData) {
+          if (LowerBoundEnabled && ((LowerBoundIncluded && ((IComparable)((IVariable)list[i]).Value).CompareTo(LowerBound) < 0)
+            || (!LowerBoundIncluded && ((IComparable)((IVariable)list[i]).Value).CompareTo(LowerBound) <= 0))) return false;
+          if (UpperBoundEnabled && ((UpperBoundIncluded && ((IComparable)((IVariable)list[i]).Value).CompareTo(UpperBound) > 0)
+            || (!UpperBoundIncluded && ((IComparable)((IVariable)list[i]).Value).CompareTo(UpperBound) >= 0))) return false;
+        }
+      }
+      return true;
+    }
+
+    public override IView CreateView() {
+      return new DoubleParameterBoundConstraintView(this);
+    }
+
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      DoubleParameterBoundConstraint clone = new DoubleParameterBoundConstraint();
+      clonedObjects.Add(Guid, clone);
+      clone.parameterName = (string)parameterName.Clone();
+      clone.upperBound = UpperBound;
+      clone.upperBoundIncluded = UpperBoundIncluded;
+      clone.upperBoundEnabled = UpperBoundEnabled;
+      clone.lowerBound = LowerBound;
+      clone.lowerBoundIncluded = LowerBoundIncluded;
+      clone.lowerBoundEnabled = LowerBoundEnabled;
+      return clone;
+    }
+
+    #region persistence
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute pm = document.CreateAttribute("ParameterName");
+      pm.Value = parameterName;
+      XmlAttribute lb = document.CreateAttribute("LowerBound");
+      lb.Value = LowerBound.ToString("r", CultureInfo.InvariantCulture);
+      XmlAttribute lbi = document.CreateAttribute("LowerBoundIncluded");
+      lbi.Value = lowerBoundIncluded.ToString();
+      XmlAttribute lbe = document.CreateAttribute("LowerBoundEnabled");
+      lbe.Value = lowerBoundEnabled.ToString();
+      XmlAttribute ub = document.CreateAttribute("UpperBound");
+      ub.Value = upperBound.ToString("r", CultureInfo.InvariantCulture);
+      XmlAttribute ubi = document.CreateAttribute("UpperBoundIncluded");
+      ubi.Value = upperBoundIncluded.ToString();
+      XmlAttribute ube = document.CreateAttribute("UpperBoundEnabled");
+      ube.Value = upperBoundEnabled.ToString();
+      node.Attributes.Append(pm);
+      node.Attributes.Append(lb);
+      if (!lowerBoundIncluded) node.Attributes.Append(lbi);
+      if (!lowerBoundEnabled) node.Attributes.Append(lbe);
+      node.Attributes.Append(ub);
+      if (!upperBoundIncluded) node.Attributes.Append(ubi);
+      if (!upperBoundEnabled) node.Attributes.Append(ube);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      parameterName = node.Attributes["ParameterName"].Value;
+      lowerBound = double.Parse(node.Attributes["LowerBound"].Value, CultureInfo.InvariantCulture);
+      if (node.Attributes["LowerBoundIncluded"] != null) {
+        lowerBoundIncluded = bool.Parse(node.Attributes["LowerBoundIncluded"].Value);
+      } else {
+        lowerBoundIncluded = true;
+      }
+      if (node.Attributes["LowerBoundEnabled"] != null) {
+        lowerBoundEnabled = bool.Parse(node.Attributes["LowerBoundEnabled"].Value);
+      } else {
+        lowerBoundEnabled = true;
+      }
+
+      upperBound = double.Parse(node.Attributes["UpperBound"].Value, CultureInfo.InvariantCulture);
+      if (node.Attributes["UpperBoundIncluded"] != null) {
+        upperBoundIncluded = bool.Parse(node.Attributes["UpperBoundIncluded"].Value);
+      } else {
+        upperBoundIncluded = true;
+      }
+      if (node.Attributes["UpperBoundEnabled"] != null) {
+        upperBoundEnabled = bool.Parse(node.Attributes["UpperBoundEnabled"].Value);
+      } else {
+        upperBoundEnabled = true;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.Designer.cs	(revision 1270)
@@ -0,0 +1,170 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.SimOpt {
+  partial class DoubleParameterBoundConstraintView {
+    /// <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.ubTextBox = new System.Windows.Forms.TextBox();
+      this.lbTextBox = new System.Windows.Forms.TextBox();
+      this.ubIncludedCheckBox = new System.Windows.Forms.CheckBox();
+      this.lbIncludedCheckBox = new System.Windows.Forms.CheckBox();
+      this.ubEnabledCheckBox = new System.Windows.Forms.CheckBox();
+      this.lbEnabledCheckBox = new System.Windows.Forms.CheckBox();
+      this.pmTextBox = new System.Windows.Forms.TextBox();
+      this.pmLabel = new System.Windows.Forms.Label();
+      this.SuspendLayout();
+      // 
+      // ubTextBox
+      // 
+      this.ubTextBox.Location = new System.Drawing.Point(47, 107);
+      this.ubTextBox.Name = "ubTextBox";
+      this.ubTextBox.Size = new System.Drawing.Size(83, 20);
+      this.ubTextBox.TabIndex = 31;
+      this.ubTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      this.ubTextBox.Validated += new System.EventHandler(this.ubTextBox_Validated);
+      this.ubTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.ubTextBox_Validating);
+      // 
+      // lbTextBox
+      // 
+      this.lbTextBox.Location = new System.Drawing.Point(47, 58);
+      this.lbTextBox.Name = "lbTextBox";
+      this.lbTextBox.Size = new System.Drawing.Size(83, 20);
+      this.lbTextBox.TabIndex = 30;
+      this.lbTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
+      this.lbTextBox.Validated += new System.EventHandler(this.lbTextBox_Validated);
+      this.lbTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.lbTextBox_Validating);
+      // 
+      // ubIncludedCheckBox
+      // 
+      this.ubIncludedCheckBox.AutoSize = true;
+      this.ubIncludedCheckBox.Location = new System.Drawing.Point(136, 109);
+      this.ubIncludedCheckBox.Name = "ubIncludedCheckBox";
+      this.ubIncludedCheckBox.Size = new System.Drawing.Size(73, 17);
+      this.ubIncludedCheckBox.TabIndex = 29;
+      this.ubIncludedCheckBox.Text = "Included?";
+      this.ubIncludedCheckBox.UseVisualStyleBackColor = true;
+      this.ubIncludedCheckBox.CheckedChanged += new System.EventHandler(this.ubIncludedCheckBox_CheckedChanged);
+      // 
+      // lbIncludedCheckBox
+      // 
+      this.lbIncludedCheckBox.AutoSize = true;
+      this.lbIncludedCheckBox.Location = new System.Drawing.Point(136, 61);
+      this.lbIncludedCheckBox.Name = "lbIncludedCheckBox";
+      this.lbIncludedCheckBox.Size = new System.Drawing.Size(73, 17);
+      this.lbIncludedCheckBox.TabIndex = 28;
+      this.lbIncludedCheckBox.Text = "Included?";
+      this.lbIncludedCheckBox.UseVisualStyleBackColor = true;
+      this.lbIncludedCheckBox.CheckedChanged += new System.EventHandler(this.lbIncludedCheckBox_CheckedChanged);
+      // 
+      // ubEnabledCheckBox
+      // 
+      this.ubEnabledCheckBox.AutoSize = true;
+      this.ubEnabledCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.ubEnabledCheckBox.Location = new System.Drawing.Point(3, 84);
+      this.ubEnabledCheckBox.Name = "ubEnabledCheckBox";
+      this.ubEnabledCheckBox.Size = new System.Drawing.Size(91, 17);
+      this.ubEnabledCheckBox.TabIndex = 27;
+      this.ubEnabledCheckBox.Text = "Upper bound:";
+      this.ubEnabledCheckBox.UseVisualStyleBackColor = true;
+      this.ubEnabledCheckBox.CheckedChanged += new System.EventHandler(this.ubEnabledCheckBox_CheckedChanged);
+      // 
+      // lbEnabledCheckBox
+      // 
+      this.lbEnabledCheckBox.AutoSize = true;
+      this.lbEnabledCheckBox.CheckAlign = System.Drawing.ContentAlignment.MiddleRight;
+      this.lbEnabledCheckBox.Location = new System.Drawing.Point(3, 35);
+      this.lbEnabledCheckBox.Name = "lbEnabledCheckBox";
+      this.lbEnabledCheckBox.Size = new System.Drawing.Size(91, 17);
+      this.lbEnabledCheckBox.TabIndex = 26;
+      this.lbEnabledCheckBox.Text = "Lower bound:";
+      this.lbEnabledCheckBox.UseVisualStyleBackColor = true;
+      this.lbEnabledCheckBox.CheckedChanged += new System.EventHandler(this.lbEnabledCheckBox_CheckedChanged);
+      // 
+      // pmTextBox
+      // 
+      this.pmTextBox.Location = new System.Drawing.Point(47, 7);
+      this.pmTextBox.Name = "pmTextBox";
+      this.pmTextBox.Size = new System.Drawing.Size(156, 20);
+      this.pmTextBox.TabIndex = 32;
+      this.pmTextBox.TextChanged += new System.EventHandler(this.pmTextBox_TextChanged);
+      // 
+      // pmLabel
+      // 
+      this.pmLabel.AutoSize = true;
+      this.pmLabel.Location = new System.Drawing.Point(3, 10);
+      this.pmLabel.Name = "pmLabel";
+      this.pmLabel.Size = new System.Drawing.Size(38, 13);
+      this.pmLabel.TabIndex = 33;
+      this.pmLabel.Text = "Name:";
+      // 
+      // DoubleParameterBoundConstraintView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.pmLabel);
+      this.Controls.Add(this.pmTextBox);
+      this.Controls.Add(this.ubTextBox);
+      this.Controls.Add(this.lbTextBox);
+      this.Controls.Add(this.ubIncludedCheckBox);
+      this.Controls.Add(this.lbIncludedCheckBox);
+      this.Controls.Add(this.ubEnabledCheckBox);
+      this.Controls.Add(this.lbEnabledCheckBox);
+      this.Name = "DoubleParameterBoundConstraintView";
+      this.Size = new System.Drawing.Size(206, 131);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TextBox ubTextBox;
+    private System.Windows.Forms.TextBox lbTextBox;
+    private System.Windows.Forms.CheckBox ubIncludedCheckBox;
+    private System.Windows.Forms.CheckBox lbIncludedCheckBox;
+    private System.Windows.Forms.CheckBox ubEnabledCheckBox;
+    private System.Windows.Forms.CheckBox lbEnabledCheckBox;
+    private System.Windows.Forms.TextBox pmTextBox;
+    private System.Windows.Forms.Label pmLabel;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.cs	(revision 1270)
@@ -0,0 +1,140 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public partial class DoubleParameterBoundConstraintView : ViewBase {
+    public DoubleParameterBoundConstraint DoubleParameterBoundConstraint {
+      get { return (DoubleParameterBoundConstraint)Item; }
+      set { base.Item = value; }
+    }
+
+    public DoubleParameterBoundConstraintView() {
+      InitializeComponent();
+    }
+
+    public DoubleParameterBoundConstraintView(DoubleParameterBoundConstraint dpbc)
+      : this() {
+      DoubleParameterBoundConstraint = dpbc;
+    }
+
+    protected override void RemoveItemEvents() {
+      DoubleParameterBoundConstraint.Changed -= new EventHandler(DoubleParameterBoundConstraint_Changed);
+      base.RemoveItemEvents();
+    }
+
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      DoubleParameterBoundConstraint.Changed += new EventHandler(DoubleParameterBoundConstraint_Changed);
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (DoubleParameterBoundConstraint == null) {
+        pmTextBox.Enabled = false;
+        lbTextBox.Enabled = false;
+        lbTextBox.Text = "";
+        lbIncludedCheckBox.Enabled = false;
+        lbEnabledCheckBox.Checked = false;
+
+        ubTextBox.Enabled = false;
+        ubTextBox.Text = "";
+        ubIncludedCheckBox.Checked = false;
+        ubEnabledCheckBox.Enabled = false;
+      } else {
+        pmTextBox.Text = DoubleParameterBoundConstraint.ParameterName;
+        lbTextBox.Text = DoubleParameterBoundConstraint.LowerBound.ToString("r");
+        lbTextBox.Enabled = DoubleParameterBoundConstraint.LowerBoundEnabled;
+        lbIncludedCheckBox.Checked = DoubleParameterBoundConstraint.LowerBoundIncluded;
+        lbIncludedCheckBox.Enabled = true;
+        lbEnabledCheckBox.Checked = DoubleParameterBoundConstraint.LowerBoundEnabled;
+        lbEnabledCheckBox.Enabled = true;
+
+        ubTextBox.Text = DoubleParameterBoundConstraint.UpperBound.ToString("r");
+        ubTextBox.Enabled = DoubleParameterBoundConstraint.UpperBoundEnabled;
+        ubIncludedCheckBox.Checked = DoubleParameterBoundConstraint.UpperBoundIncluded;
+        ubIncludedCheckBox.Enabled = true;
+        ubEnabledCheckBox.Checked = DoubleParameterBoundConstraint.UpperBoundEnabled;
+        ubEnabledCheckBox.Enabled = true;
+      }
+    }
+
+    void DoubleParameterBoundConstraint_Changed(object sender, EventArgs e) {
+      Refresh();
+    }
+
+    private void lbEnabledCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.LowerBoundEnabled = lbEnabledCheckBox.Checked;
+      lbTextBox.Enabled = lbEnabledCheckBox.Checked;
+      lbIncludedCheckBox.Enabled = lbEnabledCheckBox.Checked;
+    }
+
+    private void ubEnabledCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.UpperBoundEnabled = ubEnabledCheckBox.Checked;
+      ubTextBox.Enabled = ubEnabledCheckBox.Checked;
+      ubIncludedCheckBox.Enabled = ubEnabledCheckBox.Checked;
+    }
+
+    private void lbIncludedCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.LowerBoundIncluded = lbIncludedCheckBox.Checked;
+    }
+
+    private void ubIncludedCheckBox_CheckedChanged(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.UpperBoundIncluded = ubIncludedCheckBox.Checked;
+    }
+
+    private void lbTextBox_Validating(object sender, CancelEventArgs e) {
+      double result;
+      if (!double.TryParse(lbTextBox.Text, out result)) {
+        e.Cancel = true;
+      } 
+    }
+
+    private void ubTextBox_Validating(object sender, CancelEventArgs e) {
+      double result;
+      if (!double.TryParse(ubTextBox.Text, out result)) {
+        e.Cancel = true;
+      } 
+    }
+
+    private void lbTextBox_Validated(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.LowerBound = double.Parse(lbTextBox.Text);
+    }
+
+    private void ubTextBox_Validated(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.UpperBound = double.Parse(ubTextBox.Text);
+    }
+
+    private void pmTextBox_TextChanged(object sender, EventArgs e) {
+      DoubleParameterBoundConstraint.ParameterName = pmTextBox.Text;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/DoubleParameterBoundConstraintView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/HeuristicLab.SimOpt.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/HeuristicLab.SimOpt.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/HeuristicLab.SimOpt.csproj	(revision 1270)
@@ -0,0 +1,155 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{32DAA44F-944A-465F-A5C9-1C491EE4976D}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.SimOpt</RootNamespace>
+    <AssemblyName>HeuristicLab.SimOpt-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="SimOptCrossoverPreparator.cs" />
+    <Compile Include="SimOptSequentialSubOperatorProcessor.cs" />
+    <Compile Include="SimOptSquentialSubOperatorCrossover.cs" />
+    <Compile Include="DoubleParameterBoundConstraint.cs" />
+    <Compile Include="DoubleParameterBoundConstraintView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DoubleParameterBoundConstraintView.Designer.cs">
+      <DependentUpon>DoubleParameterBoundConstraintView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="HeuristicLabSimOptPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SimOptDiscreteMultiCrossover.cs" />
+    <Compile Include="SimOptParameterExtractor.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="SimOptParameterPacker.cs" />
+    <Compile Include="SimOptProblemInjector.cs" />
+    <Compile Include="SimOptProblemInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SimOptProblemInjectorView.Designer.cs">
+      <DependentUpon>SimOptProblemInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SimOptSinglePointCrossover.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="DoubleParameterBoundConstraintView.resx">
+      <DependentUpon>DoubleParameterBoundConstraintView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SimOptProblemInjectorView.resx">
+      <DependentUpon>SimOptProblemInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Constraints\HeuristicLab.Constraints.csproj">
+      <Project>{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}</Project>
+      <Name>HeuristicLab.Constraints</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj">
+      <Project>{F5614C53-153C-4A37-A608-121E1C087F07}</Project>
+      <Name>HeuristicLab.Evolutionary</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Selection\HeuristicLab.Selection.csproj">
+      <Project>{F7CF0571-25CB-43D5-8443-0843A1E2861A}</Project>
+      <Name>HeuristicLab.Selection</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/HeuristicLabSimOptPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/HeuristicLabSimOptPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/HeuristicLabSimOptPlugin.cs	(revision 1270)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.SimOpt {
+  [ClassInfo(Name = "HeuristicLab.SimOpt-3.2")]
+  [PluginFile(Filename = "HeuristicLab.SimOpt-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Constraints-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Evolutionary-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Selection-3.2")]
+  public class HeuristicLabSimOptPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,36 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.SimOpt")]
+[assembly: AssemblyDescription("Assembly containing simulation optimization operators")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("fb2b106d-27b3-4a6f-97e2-5c0bab351c64")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptCrossoverPreparator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptCrossoverPreparator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptCrossoverPreparator.cs	(revision 1270)
@@ -0,0 +1,44 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptCrossoverPreparator : OperatorBase {
+    public override string Description {
+      get {
+        return @"Prepares the parent parameters for crossing";
+      }
+    }
+
+    public SimOptCrossoverPreparator()
+      : base() {
+      AddVariableInfo(new VariableInfo("Parents", "Number of parents per child", typeof(IntData), VariableKind.In));
+    }
+
+    public override IOperation Apply(IScope scope) {
+      int parents = GetVariableValue<IntData>("Parents", scope, true).Data;
+      int populationSize = scope.SubScopes.Count;
+      int childrenSize = populationSize / parents;
+      if (populationSize % parents > 0) throw new ArgumentException("ERROR in SimOptCrossoverPreparator: The number of subscopes is not a multiple of the number of parents per child");
+      for (int i = 0; i < childrenSize; i++) {
+        IScope child = new Scope(i.ToString());
+        int parameters = scope.SubScopes[0].SubScopes.Count;
+        for (int k = 0; k < parameters; k++) {
+          child.AddSubScope(new Scope("Parameter_" + (k+1).ToString()));
+          for (int j = 0; j < parents; j++) {
+            IScope param = scope.SubScopes[j].SubScopes[0]; // take scope containing the parameter from the parent
+            child.SubScopes[k].AddSubScope(param); // add it to the child
+            scope.SubScopes[j].RemoveSubScope(param);
+          }
+        }
+        for (int j = 0; j < parents; j++)
+          scope.RemoveSubScope(scope.SubScopes[0]); // remove the parent
+        scope.SubScopes.Add(child); // add the child to the end of the scope list
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptDiscreteMultiCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptDiscreteMultiCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptDiscreteMultiCrossover.cs	(revision 1270)
@@ -0,0 +1,67 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptDiscreteMultiCrossover : CrossoverBase {
+
+    public override string Description {
+      get { return @"This operator applies a discrete recombination on the variables defined"; }
+    }
+
+    public SimOptDiscreteMultiCrossover()
+      : base() {
+      AddVariableInfo(new VariableInfo("Item", "The item list to be recombined", typeof(ConstrainedItemList), VariableKind.In));
+    }
+
+    protected override void Cross(IScope scope, IRandom random) {
+      ICollection<IConstraint> violated;
+
+      ConstrainedItemList[] p = new ConstrainedItemList[scope.SubScopes.Count];
+      for (int i = 0; i < p.Length; i++) {
+        p[i] = scope.SubScopes[i].GetVariableValue<ConstrainedItemList>("Item", false);
+        if (i > 0 && p[i].Count != p[i-1].Count) throw new InvalidOperationException("ERROR: the lists do not contain the same number of items");
+      }
+
+      ConstrainedItemList childList = (ConstrainedItemList)p[0].Clone();
+      if (childList.Count > 1) {
+        int iter = 0;
+        do {
+          childList.BeginCombinedOperation();
+          for (int i = 0; i < childList.Count; i++) {
+            int nextParent = random.Next(0, scope.SubScopes.Count);
+            if (nextParent > 0) childList.TrySetAt(i, (IItem)p[nextParent].Clone(), out violated);
+          }
+        } while (!childList.EndCombinedOperation(out violated) && ++iter < 100);
+        if (violated.Count == 0) {
+          scope.AddVariable(new Variable(scope.SubScopes[0].TranslateName("Item"), childList));
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptParameterExtractor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptParameterExtractor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptParameterExtractor.cs	(revision 1270)
@@ -0,0 +1,64 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptParameterExtractor : OperatorBase {
+    public override string Description {
+      get { return @"Appends each parameter as subscope to the current scope."; }
+    }
+
+    public SimOptParameterExtractor()
+      : base() {
+      AddVariableInfo(new VariableInfo("Items", "The ConstrainedItemList to be extracted", typeof(ConstrainedItemList), VariableKind.In | VariableKind.Deleted));
+      AddVariableInfo(new VariableInfo("DeleteItems", "Whether or not to remove items from the current scope", typeof(BoolData), VariableKind.In));
+      AddVariable(new Variable("DeleteItems", new BoolData(false)));
+      GetVariableInfo("DeleteItems").Local = true;
+    }
+
+    public override IOperation Apply(IScope scope) {
+      ConstrainedItemList cil = GetVariableValue<ConstrainedItemList>("Items", scope, false);
+      bool delete = GetVariableValue<BoolData>("DeleteItems", scope, true).Data;
+      for (int i = 0; i < cil.Count; i++) {
+        IScope tmp = new Scope(scope.Name + "_Param" + i.ToString());
+        scope.AddSubScope(tmp);
+        try {
+          tmp.AddVariable(cil[i].Clone() as Variable);
+        } catch (InvalidCastException ice) {
+          throw new InvalidCastException("Parameters in the constrained item list have to be encapsulated in a variable!\r\n\r\n" + ice.Message);
+        }
+      }
+      if (delete) {
+        IVariableInfo info = GetVariableInfo("Items");
+        if (info.Local) RemoveVariable(info.ActualName);
+        else scope.RemoveVariable(info.ActualName);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptParameterPacker.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptParameterPacker.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptParameterPacker.cs	(revision 1270)
@@ -0,0 +1,94 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptParameterPacker : OperatorBase {
+    public override string Description {
+      get { return @"Takes the parameters in the subscope and creates or a updates a parameter vector. The order of the subscopes is assumed to be the same as the parameters appear in the vector.
+If the parameter vector could not be updated due to a constraint violation, the first suboperator is returned as the next operation."; }
+    }
+
+    public SimOptParameterPacker()
+      : base() {
+      AddVariableInfo(new VariableInfo("Items", "The ConstrainedItemList to be updated or created", typeof(ConstrainedItemList), VariableKind.New | VariableKind.In | VariableKind.Out));
+      AddVariableInfo(new VariableInfo("DeleteParameters", "Whether or not the subscopes containing the parameters should be removed afterwards", typeof(BoolData), VariableKind.In));
+      AddVariable(new Variable("DeleteParameters", new BoolData(true)));
+      GetVariableInfo("DeleteParameters").Local = true;
+    }
+
+    public override IOperation Apply(IScope scope) {
+      // ----- FETCH THE PARAMETER VECTOR ----- //
+      bool updateVector = true;
+      ConstrainedItemList cil;
+      try {
+        cil = GetVariableValue<ConstrainedItemList>("Items", scope, false);
+      } catch (ArgumentException) {
+        updateVector = false;
+        // the parameter vector is fetched from a higher scope and added locally
+        cil = GetVariableValue<ConstrainedItemList>("Items", scope, true);
+      }
+      ConstrainedItemList tempcil = (ConstrainedItemList)cil.Clone();
+      bool delete = GetVariableValue<BoolData>("DeleteParameters", scope, true).Data;
+
+      ICollection<IConstraint> violatedConstraints;
+
+      tempcil.BeginCombinedOperation();
+      // ----- FETCH PARAMETERS AND UPDATE TEMPORARY VECTOR ----- //
+      for (int i = 0; i < scope.SubScopes.Count; i++) {
+        IVariable var = scope.SubScopes[i].GetVariable(((IVariable)tempcil[i]).Name);
+        if (var == null) throw new ArgumentNullException(scope.SubScopes[i].Name, "Could not find parameter " + ((IVariable)tempcil[i]).Name + " in this scope");
+        tempcil.TrySetAt(i, var, out violatedConstraints);
+      }
+
+      // ----- CONSTRAINT HANDLING ----- //
+      IVariableInfo info = GetVariableInfo("Items");
+      bool success = tempcil.EndCombinedOperation(out violatedConstraints);
+      if (success) {
+        if (!updateVector) {
+          if (info.Local) AddVariable(new Variable(info.ActualName, tempcil));
+          else scope.AddVariable(new Variable(scope.TranslateName("Items"), tempcil));
+        } else {
+          if (info.Local) GetVariable(info.ActualName).Value = tempcil;
+          else scope.GetVariable(scope.TranslateName("Items")).Value = tempcil;
+        }
+      } else if (!updateVector) { // in case there was an error and the parameter vector is not in the current scope, add it
+        if (info.Local) AddVariable(new Variable(info.ActualName, cil));
+        else scope.AddVariable(new Variable(scope.TranslateName("Items"), cil));
+      }
+
+      // ----- DELETE SUBSCOPES ----- //
+      if (delete) {
+        while (scope.SubScopes.Count > 0) scope.RemoveSubScope(scope.SubScopes[0]);
+      }
+
+      if (!success) return new AtomicOperation(SubOperators[0], scope);
+      else return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjector.cs	(revision 1270)
@@ -0,0 +1,114 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptProblemInjector : OperatorBase {
+
+    public override string Description {
+      get { return @"Injects the parameters used for simulation parameter optimization"; }
+    }
+
+    private BoolData myMaximization;
+    public BoolData Maximization {
+      get { return myMaximization; }
+      set { myMaximization = value; }
+    }
+
+    private StringData myGeneName;
+    public StringData GeneName {
+      get { return myGeneName; }
+      set { myGeneName = value; }
+    }
+
+    private ConstrainedItemList myParameters;
+    public ConstrainedItemList Parameters {
+      get { return myParameters; }
+      set { myParameters = value; }
+    }
+
+    public SimOptProblemInjector()
+      : base() {
+      myParameters = new ConstrainedItemList();
+      myGeneName = new StringData("Items");
+      myMaximization = new BoolData(false);
+    }
+
+    public override IOperation Apply(IScope scope) {
+      scope.AddVariable(new Variable("Maximization", (BoolData)Maximization.Clone()));
+      scope.AddVariable(new Variable(myGeneName.Data, (ConstrainedItemList)Parameters.Clone()));
+      return null;
+    }
+
+    public override IView CreateView() {
+      return new SimOptProblemInjectorView(this);
+    }
+
+    #region Clone & Persistence Methods
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      SimOptProblemInjector clone = new SimOptProblemInjector();
+      clonedObjects.Add(Guid, clone);
+      clone.Maximization = (BoolData)myMaximization.Clone(clonedObjects);
+      clone.GeneName = (StringData)myGeneName.Clone(clonedObjects);
+      clone.myParameters = (ConstrainedItemList)myParameters.Clone(clonedObjects);
+      return clone;
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      // variable infos should not be persisted
+      XmlNode infosNode = node.SelectSingleNode("VariableInfos");
+      infosNode.RemoveAll();
+      XmlNode maxNode = PersistenceManager.Persist("Maximization", Maximization, document, persistedObjects);
+      node.AppendChild(maxNode);
+      XmlNode nameNode = PersistenceManager.Persist("GeneName", GeneName, document, persistedObjects);
+      node.AppendChild(nameNode);
+      XmlNode parametersNode = PersistenceManager.Persist("Items", Parameters, document, persistedObjects);
+      node.AppendChild(parametersNode);
+      return node;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      if (node.SelectSingleNode("Maximization") != null) {
+        myMaximization = (BoolData)PersistenceManager.Restore(node.SelectSingleNode("Maximization"), restoredObjects);
+      }
+      if (node.SelectSingleNode("GeneName") != null) {
+        myGeneName = (StringData)PersistenceManager.Restore(node.SelectSingleNode("GeneName"), restoredObjects);
+      }
+      IStorable items = (ConstrainedItemList)PersistenceManager.Restore(node.SelectSingleNode("Items"), restoredObjects);
+      try {
+        myParameters = (ConstrainedItemList)items;
+      } catch (InvalidCastException ice) {
+        IVariable var = (Variable)items;
+        myParameters = (ConstrainedItemList)var.Value;
+      }
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,194 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.SimOpt {
+  partial class SimOptProblemInjectorView {
+    /// <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.splitContainer1 = new System.Windows.Forms.SplitContainer();
+      this.dataTypeTreeView = new System.Windows.Forms.TreeView();
+      this.label1 = new System.Windows.Forms.Label();
+      this.geneNameStringDataView = new HeuristicLab.Data.StringDataView();
+      this.parametersTabControl = new System.Windows.Forms.TabControl();
+      this.parametersTabPage = new System.Windows.Forms.TabPage();
+      this.objectParameterDataView = new HeuristicLab.Data.ConstrainedItemListView();
+      this.variableNameLabel = new System.Windows.Forms.Label();
+      this.maximizationBoolDataView = new HeuristicLab.Data.BoolDataView();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.parametersTabControl.SuspendLayout();
+      this.parametersTabPage.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer1
+      // 
+      this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.splitContainer1.Location = new System.Drawing.Point(0, 0);
+      this.splitContainer1.Name = "splitContainer1";
+      // 
+      // splitContainer1.Panel1
+      // 
+      this.splitContainer1.Panel1.Controls.Add(this.dataTypeTreeView);
+      // 
+      // splitContainer1.Panel2
+      // 
+      this.splitContainer1.Panel2.Controls.Add(this.label1);
+      this.splitContainer1.Panel2.Controls.Add(this.geneNameStringDataView);
+      this.splitContainer1.Panel2.Controls.Add(this.parametersTabControl);
+      this.splitContainer1.Panel2.Controls.Add(this.variableNameLabel);
+      this.splitContainer1.Panel2.Controls.Add(this.maximizationBoolDataView);
+      this.splitContainer1.Size = new System.Drawing.Size(552, 439);
+      this.splitContainer1.SplitterDistance = 184;
+      this.splitContainer1.TabIndex = 0;
+      // 
+      // dataTypeTreeView
+      // 
+      this.dataTypeTreeView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.dataTypeTreeView.Location = new System.Drawing.Point(0, 0);
+      this.dataTypeTreeView.Name = "dataTypeTreeView";
+      this.dataTypeTreeView.Size = new System.Drawing.Size(184, 439);
+      this.dataTypeTreeView.TabIndex = 0;
+      this.dataTypeTreeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.dataTypeTreeView_ItemDrag);
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(245, 9);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(67, 13);
+      this.label1.TabIndex = 7;
+      this.label1.Text = "Maximization";
+      // 
+      // geneNameStringDataView
+      // 
+      this.geneNameStringDataView.Caption = "View";
+      this.geneNameStringDataView.Location = new System.Drawing.Point(47, 7);
+      this.geneNameStringDataView.Name = "geneNameStringDataView";
+      this.geneNameStringDataView.Size = new System.Drawing.Size(163, 19);
+      this.geneNameStringDataView.StringData = null;
+      this.geneNameStringDataView.TabIndex = 5;
+      // 
+      // parametersTabControl
+      // 
+      this.parametersTabControl.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.parametersTabControl.Controls.Add(this.parametersTabPage);
+      this.parametersTabControl.Location = new System.Drawing.Point(6, 32);
+      this.parametersTabControl.Name = "parametersTabControl";
+      this.parametersTabControl.SelectedIndex = 0;
+      this.parametersTabControl.Size = new System.Drawing.Size(358, 407);
+      this.parametersTabControl.TabIndex = 4;
+      // 
+      // parametersTabPage
+      // 
+      this.parametersTabPage.Controls.Add(this.objectParameterDataView);
+      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(350, 381);
+      this.parametersTabPage.TabIndex = 0;
+      this.parametersTabPage.Text = "Parameters";
+      this.parametersTabPage.UseVisualStyleBackColor = true;
+      // 
+      // objectParameterDataView
+      // 
+      this.objectParameterDataView.AllowDrop = true;
+      this.objectParameterDataView.Caption = "View";
+      this.objectParameterDataView.ConstrainedItemList = null;
+      this.objectParameterDataView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.objectParameterDataView.Location = new System.Drawing.Point(3, 3);
+      this.objectParameterDataView.Name = "objectParameterDataView";
+      this.objectParameterDataView.Size = new System.Drawing.Size(344, 375);
+      this.objectParameterDataView.TabIndex = 1;
+      this.objectParameterDataView.DragDrop += new System.Windows.Forms.DragEventHandler(this.objectParameterDataView_DragDrop);
+      this.objectParameterDataView.DragEnter += new System.Windows.Forms.DragEventHandler(this.objectParameterDataView_DragEnter);
+      // 
+      // variableNameLabel
+      // 
+      this.variableNameLabel.AutoSize = true;
+      this.variableNameLabel.Location = new System.Drawing.Point(3, 9);
+      this.variableNameLabel.Name = "variableNameLabel";
+      this.variableNameLabel.Size = new System.Drawing.Size(38, 13);
+      this.variableNameLabel.TabIndex = 2;
+      this.variableNameLabel.Text = "Name:";
+      // 
+      // maximizationBoolDataView
+      // 
+      this.maximizationBoolDataView.BoolData = null;
+      this.maximizationBoolDataView.Caption = "Maximization";
+      this.maximizationBoolDataView.Location = new System.Drawing.Point(225, 9);
+      this.maximizationBoolDataView.Name = "maximizationBoolDataView";
+      this.maximizationBoolDataView.Size = new System.Drawing.Size(19, 18);
+      this.maximizationBoolDataView.TabIndex = 6;
+      // 
+      // SimOptProblemInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.splitContainer1);
+      this.Name = "SimOptProblemInjectorView";
+      this.Size = new System.Drawing.Size(552, 439);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.Panel2.PerformLayout();
+      this.splitContainer1.ResumeLayout(false);
+      this.parametersTabControl.ResumeLayout(false);
+      this.parametersTabPage.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.SplitContainer splitContainer1;
+    private HeuristicLab.Data.ConstrainedItemListView objectParameterDataView;
+    private System.Windows.Forms.TreeView dataTypeTreeView;
+    private System.Windows.Forms.Label variableNameLabel;
+    private System.Windows.Forms.TabControl parametersTabControl;
+    private System.Windows.Forms.TabPage parametersTabPage;
+    private HeuristicLab.Data.StringDataView geneNameStringDataView;
+    private HeuristicLab.Data.BoolDataView maximizationBoolDataView;
+    private System.Windows.Forms.Label label1;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.cs	(revision 1270)
@@ -0,0 +1,114 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.SimOpt {
+  public partial class SimOptProblemInjectorView : ViewBase {
+    public SimOptProblemInjector SimOptProblemInjector {
+      get { return (SimOptProblemInjector)base.Item; }
+      set { base.Item = value; }
+    }
+
+    public SimOptProblemInjectorView() {
+      InitializeComponent();
+      UpdateDataTypeTreeView();
+    }
+
+    public SimOptProblemInjectorView(SimOptProblemInjector simOptProblemInjector)
+      : this() {
+      SimOptProblemInjector = simOptProblemInjector;
+    }
+
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (SimOptProblemInjector == null) {
+        geneNameStringDataView.Enabled = false;
+        geneNameStringDataView.StringData = null;
+        objectParameterDataView.Enabled = false;
+        objectParameterDataView.ConstrainedItemList = null;
+        maximizationBoolDataView.Enabled = false;
+        maximizationBoolDataView.BoolData = null;
+      } else {
+        objectParameterDataView.ConstrainedItemList = SimOptProblemInjector.Parameters;
+        objectParameterDataView.Enabled = true;
+        geneNameStringDataView.StringData = SimOptProblemInjector.GeneName;
+        geneNameStringDataView.Enabled = true;
+        maximizationBoolDataView.BoolData = SimOptProblemInjector.Maximization;
+        maximizationBoolDataView.Enabled = true;
+      }
+    }
+
+    private void UpdateDataTypeTreeView() {
+      dataTypeTreeView.Nodes.Clear();
+      DiscoveryService discoveryService = new DiscoveryService();
+      foreach (PluginInfo plugin in discoveryService.Plugins) {
+        TreeNode pluginNode = new TreeNode(plugin.Name);
+        pluginNode.Tag = null;
+
+        Type[] types = discoveryService.GetTypes(typeof(IObjectData), plugin);
+        foreach (Type type in types) {
+          if (!type.IsAbstract) {
+            TreeNode itemNode = new TreeNode();
+            itemNode.Text = type.Name;
+            itemNode.Tag = type;
+            pluginNode.Nodes.Add(itemNode);
+          }
+        }
+        if (pluginNode.Nodes.Count > 0) {
+          dataTypeTreeView.Nodes.Add(pluginNode);
+        }
+      }
+      if (dataTypeTreeView.Nodes.Count == 0) {
+        dataTypeTreeView.Enabled = false;
+        dataTypeTreeView.Nodes.Add(new TreeNode("No item types available"));
+      }
+    }
+
+    private void dataTypeTreeView_ItemDrag(object sender, ItemDragEventArgs e) {
+      DoDragDrop(e.Item, DragDropEffects.Copy);
+    }
+
+    private void objectParameterDataView_DragDrop(object sender, DragEventArgs e) {
+      TreeNode node = (TreeNode)e.Data.GetData(typeof(TreeNode));
+      IVariable var = new Variable();
+      var.Name = "Unnamed";
+      var.Value = (IItem)Activator.CreateInstance((Type)node.Tag);
+      ICollection<IConstraint> tmp;
+      objectParameterDataView.ConstrainedItemList.TryAdd(var, out tmp);
+    }
+
+    private void objectParameterDataView_DragEnter(object sender, DragEventArgs e) {
+      e.Effect = DragDropEffects.Copy | DragDropEffects.Move;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptProblemInjectorView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSequentialSubOperatorProcessor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSequentialSubOperatorProcessor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSequentialSubOperatorProcessor.cs	(revision 1270)
@@ -0,0 +1,82 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptSequentialSubOperatorProcessor : OperatorBase {
+    public override string Description {
+      get {
+        return @"This operator encapsulates the functionality of processing the parameters of a simulation parameter vector. It works as follows:
+1. The parameters are extracted [SimOptParameterExtractor]
+2. The parameters are processed [SequentialSubScopeProcessor which applies the SubOperators of this operator on each parameter]
+3. The parameters are updated again [SimOptParameterPacker]
+
+Should the packing fail due to constraint violations, the operator will retry as often as specified in the variable MaximumTries.";
+      }
+    }
+
+    public SimOptSequentialSubOperatorProcessor()
+      : base() {
+      AddVariableInfo(new VariableInfo("Items", "The parameter vector", typeof(ConstrainedItemList), VariableKind.New | VariableKind.In | VariableKind.Out));
+      AddVariable(new Variable("ItemsBackup", new NullData()));
+      AddVariableInfo(new VariableInfo("MaximumTries", "", typeof(IntData), VariableKind.In));
+      GetVariableInfo("MaximumTries").Local = true;
+      AddVariable(new Variable("MaximumTries", new IntData(100)));
+      AddVariable(new Variable("Tries", new IntData(1)));
+    }
+
+    public override IOperation Apply(IScope scope) {
+
+      int tries = (GetVariable("Tries").Value as IntData).Data;
+      int maxTries = GetVariableValue<IntData>("MaximumTries", scope, true).Data;
+
+      IVariableInfo itemsInfo = GetVariableInfo("Items");
+      SimOptParameterExtractor extractor = new SimOptParameterExtractor();
+      extractor.GetVariableInfo("Items").ActualName = itemsInfo.ActualName;
+
+      SequentialSubScopesProcessor sssp = new SequentialSubScopesProcessor();
+      foreach (IOperator op in SubOperators)
+        sssp.AddSubOperator(op);
+
+      SimOptParameterPacker packer = new SimOptParameterPacker();
+      packer.GetVariableInfo("Items").ActualName = itemsInfo.ActualName;
+      if (tries < maxTries) {
+        SimOptSequentialSubOperatorProcessor sssop = (SimOptSequentialSubOperatorProcessor)this.Clone();
+        (sssop.GetVariable("Tries").Value as IntData).Data = tries + 1;
+        packer.AddSubOperator(this);
+      }
+
+      CompositeOperation operation = new CompositeOperation();
+      operation.AddOperation(new AtomicOperation(extractor, scope));
+      operation.AddOperation(new AtomicOperation(sssp, scope));
+      operation.AddOperation(new AtomicOperation(packer, scope));
+
+      return operation;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSinglePointCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSinglePointCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSinglePointCrossover.cs	(revision 1270)
@@ -0,0 +1,65 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Evolutionary;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptSinglePointCrossover : CrossoverBase {
+
+    public override string Description {
+      get { return @"This operator applies a single point crossover on the variables defined"; }
+    }
+
+    public SimOptSinglePointCrossover()
+      : base() {
+      AddVariableInfo(new VariableInfo("Item", "The item list to be crossed", typeof(ConstrainedItemList), VariableKind.In));
+    }
+
+    protected override void Cross(IScope scope, IRandom random) {
+      ICollection<IConstraint> violated;
+      ConstrainedItemList p1 = scope.SubScopes[0].GetVariableValue<ConstrainedItemList>("Item", false);
+      ConstrainedItemList p2 = scope.SubScopes[1].GetVariableValue<ConstrainedItemList>("Item", false);
+
+      if (p1.Count != p2.Count) throw new InvalidOperationException("ERROR: the lists do not contain the same number of items");
+
+      ConstrainedItemList childList = (ConstrainedItemList)p1.Clone();
+      if (childList.Count > 1) {
+        int iter = 0;
+        do {
+          childList.BeginCombinedOperation();
+          int crossPoint = random.Next(1, childList.Count);
+          for (int i = crossPoint; i < childList.Count; i++) {
+            childList.TrySetAt(i, (IItem)p2[i].Clone(), out violated);
+          }
+        } while (!childList.EndCombinedOperation(out violated) && ++iter < 100);
+        if (violated.Count == 0) {
+          scope.AddVariable(new Variable(scope.SubScopes[0].TranslateName("Item"), childList));
+        }
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSquentialSubOperatorCrossover.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSquentialSubOperatorCrossover.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.SimOpt/SimOptSquentialSubOperatorCrossover.cs	(revision 1270)
@@ -0,0 +1,120 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Selection;
+
+namespace HeuristicLab.SimOpt {
+  public class SimOptSquentialSubOperatorCrossover : OperatorBase {
+    private UniformSequentialSubScopesProcessor usssp, usssp2, usssp3, usssp4;
+    private SequentialSubScopesProcessor sssp;
+    private SimOptParameterExtractor extractor;
+    private SimOptParameterPacker packer;
+    private SimOptCrossoverPreparator preparator;
+    private MergingReducer merger;
+    private bool uptodate;
+
+    public override string Description {
+      get {
+        return @"This operator encapsulates the functionality of crossing the parameters of a simulation parameter vector. It works as follows:
+1. The parameters of all parents are extracted [UniformSequentialSubScopeProcessor which applies a SimOptParameterExtractor]
+2. The parents are prepared for crossing by grouping the respective parameters [SimOptCrossoverPreparator]
+3. The parameters are crossed [UniformSequentialSubScopeProcessor which applies SequentialSubScopeProcessor which applies the SubOperators of this operator on each parameter group (except for the last one)]
+4. Assigning the crossed parameters to the respective children [MergingReducer]
+5. Update the parameters [UniformSequentialSubScopeProcessor which applies SimOptParameterPacker]
+
+Should the packing fail due to constraint violations, the operator will execute the last of its suboperators.";
+      }
+    }
+
+    public SimOptSquentialSubOperatorCrossover()
+      : base() {
+      AddVariableInfo(new VariableInfo("Items", "The parameter vector", typeof(ConstrainedItemList), VariableKind.In | VariableKind.New));
+      AddVariableInfo(new VariableInfo("Parents", "The number of parents per child", typeof(IntData), VariableKind.In));
+      uptodate = false;
+    }
+
+    public override IOperation Apply(IScope scope) {
+      string itemsActualName = GetVariableInfo("Items").ActualName;
+      string parentsActualName = GetVariableInfo("Parents").ActualName;
+      int parameters = SubOperators.Count - 1;
+
+      if (!uptodate) {
+        usssp = new UniformSequentialSubScopesProcessor();
+        extractor = new SimOptParameterExtractor();
+        usssp.AddSubOperator(extractor);
+
+        preparator = new SimOptCrossoverPreparator();
+
+        usssp2 = new UniformSequentialSubScopesProcessor();
+        sssp = new SequentialSubScopesProcessor();
+        for (int i = 0; i < parameters; i++) {
+          sssp.AddSubOperator(SubOperators[i]);
+        }
+        usssp2.AddSubOperator(sssp);
+
+        usssp3 = new UniformSequentialSubScopesProcessor();
+        merger = new MergingReducer();
+        usssp3.AddSubOperator(merger);
+
+        usssp4 = new UniformSequentialSubScopesProcessor();
+        packer = new SimOptParameterPacker();
+        packer.AddSubOperator(SubOperators[SubOperators.Count - 1]);
+        usssp4.AddSubOperator(packer);
+        uptodate = true;
+      }
+      // Setting the actual names is necessary as the operator does not know if they've changed
+      extractor.GetVariableInfo("Items").ActualName = itemsActualName;
+      preparator.GetVariableInfo("Parents").ActualName = parentsActualName;
+      packer.GetVariableInfo("Items").ActualName = itemsActualName;
+
+      CompositeOperation co = new CompositeOperation();
+      co.AddOperation(new AtomicOperation(usssp, scope));
+      co.AddOperation(new AtomicOperation(preparator, scope));
+      co.AddOperation(new AtomicOperation(usssp2, scope));
+      co.AddOperation(new AtomicOperation(usssp3, scope));
+      co.AddOperation(new AtomicOperation(usssp4, scope));
+      return co;
+    }
+
+    protected override void OnSubOperatorAdded(IOperator subOperator, int index) {
+      base.OnSubOperatorAdded(subOperator, index);
+      uptodate = false;
+    }
+
+    protected override void OnSubOperatorRemoved(IOperator subOperator, int index) {
+      base.OnSubOperatorRemoved(subOperator, index);
+      uptodate = false;
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      uptodate = false;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/AckleyEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/AckleyEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/AckleyEvaluator.cs	(revision 1270)
@@ -0,0 +1,81 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Ackley Function<br/>
+  /// Domain:  [-32.768 , 32.768]^n <br/>
+  /// Optimum: 0.0 at (0, 0, ..., 0)
+  /// </summary>
+  public class AckleyEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Ackley Function
+
+Domain:  [-32.768 , 32.768]^n
+Optimum: 0.0 at (0, 0, ..., 0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Ackley function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 20 + Math.E;
+      double val;
+
+      val = 0;
+      for (int i = 0; i < point.Length; i++)
+        val += point[i] * point[i];
+      val *= 1.0 / point.Length;
+      val = Math.Sqrt(val);
+      val *= -0.2;
+      result -= 20 * Math.Exp(val);
+
+      val = 0;
+      for (int i = 0; i < point.Length; i++)
+        val += Math.Cos(2 * Math.PI * point[i]);
+      val *= 1.0 / point.Length;
+      result -= Math.Exp(val);
+      return (result);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Ackley function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/BealeEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/BealeEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/BealeEvaluator.cs	(revision 1270)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.TestFunctions { 
+  /// <summary>
+  /// Beale Function<br/>
+  /// Domain:  [-4.5 , 4.5]^2<br/>
+  /// Optimum: 0.0 at (3.0, 0.5)
+  /// </summary>
+  public class BealeEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Beale Function
+
+Domain:  [-4.5 , 4.5]^2
+Optimum: 0.0 at (3.0, 0.5)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Beale function at the given point.</returns>
+    public static double Apply(double[] point) {
+      return Math.Pow(1.5 - point[0] * (1 - point[1]), 2) + Math.Pow(2.25 - point[0] * (1 - (point[1] * point[1])), 2) + Math.Pow((2.625 - point[0] * (1 - (point[1] * point[1] * point[1]))), 2);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Beale function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/BoothEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/BoothEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/BoothEvaluator.cs	(revision 1270)
@@ -0,0 +1,63 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Booth Function<br/>
+  /// Domain:  [-10.0 , 10.0]^2<br/>
+  /// Optimum: 0.0 at (1.0, 3.0)
+  /// </summary>
+  public class BoothEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return
+          @"Booth Function
+
+Domain:  [-10.0 , 10.0]^2
+Optimum: 0.0 at (1.0, 3.0)";
+      }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Booth function at the given point.</returns>
+    public static double Apply(double[] point) {
+      return Math.Pow(point[0] + 2 * point[1] - 7, 2) + Math.Pow(2 * point[0] + point[1] - 5, 2);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Booth function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/GriewangkEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/GriewangkEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/GriewangkEvaluator.cs	(revision 1270)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Griewangk Function<br/>
+  /// Domain:  [-600.0 , 600.0]^n<br/>
+  /// Optimum: 0.0 at (0, 0, ..., 0)
+  /// </summary>
+  public class GriewangkEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Griewangk Function
+
+Domain:  [-600.0 , 600.0]^n
+Optimum: 0.0 at (0, 0, ..., 0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Griewangk function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 0;
+      double val = 0;
+
+      for (int i = 0; i < point.Length; i++)
+        result += point[i] * point[i];
+      result = result / 4000;
+
+      val = Math.Cos(point[0]);
+      for (int i = 1; i < point.Length; i++)
+        val *= Math.Cos(point[i] / Math.Sqrt(i + 1));
+
+      result = result - val + 1;
+      return (result);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Griewangk function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/HeuristicLab.TestFunctions.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/HeuristicLab.TestFunctions.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/HeuristicLab.TestFunctions.csproj	(revision 1270)
@@ -0,0 +1,128 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.TestFunctions</RootNamespace>
+    <AssemblyName>HeuristicLab.TestFunctions-3.2</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.TestFunctions-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.TestFunctions-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AckleyEvaluator.cs" />
+    <Compile Include="BealeEvaluator.cs" />
+    <Compile Include="BoothEvaluator.cs" />
+    <Compile Include="GriewangkEvaluator.cs" />
+    <Compile Include="LevyEvaluator.cs" />
+    <Compile Include="MatyasEvaluator.cs" />
+    <Compile Include="SchwefelEvaluator.cs" />
+    <Compile Include="RosenbrockEvaluator.cs" />
+    <Compile Include="RastriginEvaluator.cs" />
+    <Compile Include="SphereEvaluator.cs" />
+    <Compile Include="HeuristicLabTestFunctionsPlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SumSquaresEvaluator.cs" />
+    <Compile Include="TestFunctionEvaluatorBase.cs" />
+    <Compile Include="TestFunctionInjector.cs" />
+    <Compile Include="TestFunctionInjectorView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="TestFunctionInjectorView.Designer.cs">
+      <DependentUpon>TestFunctionInjectorView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ZakharovEvaluator.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Operators\HeuristicLab.Operators.csproj">
+      <Project>{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}</Project>
+      <Name>HeuristicLab.Operators</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="TestFunctionInjectorView.resx">
+      <DependentUpon>TestFunctionInjectorView.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/HeuristicLabTestFunctionsPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/HeuristicLabTestFunctionsPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/HeuristicLabTestFunctionsPlugin.cs	(revision 1270)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Plugin class for HeuristicLab.TestFunctions plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.TestFunctions-3.2")]
+  [PluginFile(Filename = "HeuristicLab.TestFunctions-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Data-3.2")]
+  [Dependency(Dependency = "HeuristicLab.Operators-3.2")]
+  public class HeuristicLabTestFunctionsPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/LevyEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/LevyEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/LevyEvaluator.cs	(revision 1270)
@@ -0,0 +1,76 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Levy Function<br/>
+  /// Domain:  [-10.0 , 10.0]^n<br/>
+  /// Optimum: 0.0 at (1.0, 1.0, ..., 1.0)
+  /// </summary>
+  public class LevyEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Levy Function
+
+Domain:  [-10.0 , 10.0]^n
+Optimum: 0.0 at (1.0, 1.0, ..., 1.0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Levy function at the given point.</returns>
+    public static double Apply(double[] point) {
+      int length = point.Length;
+      double[] z = new double[length];
+      double s;
+
+      for (int i = 0; i < length; i++) {
+        z[i] = 1 + (point[i] - 1) / 4;
+      }
+
+      s = Math.Pow(Math.Sin(Math.PI * z[1]), 2);
+
+      for (int i = 0; i < length - 1; i++) {
+        s += Math.Pow(z[i] - 1, 2) * (1 + 10 * Math.Pow(Math.Sin(Math.PI * z[i] + 1), 2));
+      }
+
+      return s + Math.Pow(z[length - 1] - 1, 2) * (1 + Math.Pow(Math.Sin(2 * Math.PI * z[length - 1]), 2));
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Levy function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/MatyasEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/MatyasEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/MatyasEvaluator.cs	(revision 1270)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Matyas Function<br/>
+  /// Domain:  [-10.0 , 10.0]^2<br/>
+  /// Optimum: 0.0 at (0.0, 0.0)
+  /// </summary>
+  public class MatyasEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Matyas Function
+
+Domain:  [-10.0 , 10.0]^2
+Optimum: 0.0 at (0.0, 0.0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Matyas function at the given point.</returns>
+    public static double Apply(double[] point) {
+      return 0.26 * (point[0] * point[0] + point[1] * point[1]) - 0.48 * point[0] * point[1];
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Matyas function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.TestFunctions")]
+[assembly: AssemblyDescription("HeuristicLab n-dimensional test function classes")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("f7c10f77-1067-4b4c-876a-92fe49b4f228")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/RastriginEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/RastriginEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/RastriginEvaluator.cs	(revision 1270)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Rastrigin Function<br/>
+  /// Domain:  [-5.12 , 5.12]^n<br/>
+  /// Optimum: 0.0 at (0, 0, ..., 0)
+  /// </summary>
+  public class RastriginEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Rastrigin Function
+
+Domain:  [-5.12 , 5.12]^n
+Optimum: 0.0 at (0, 0, ..., 0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Rastrigin function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 10 * point.Length;
+      for (int i = 0; i < point.Length; i++) {
+        result += point[i] * point[i];
+        result -= 10 * Math.Cos(2 * Math.PI * point[i]);
+      }
+      return (result);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Rastrigin function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/RosenbrockEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/RosenbrockEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/RosenbrockEvaluator.cs	(revision 1270)
@@ -0,0 +1,70 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Rosenbrock Function<br/>
+  /// Domain:  [-2.048 , 2.048]^n<br/>
+  /// Optimum: 0.0 at (1, 1, ..., 1)
+  /// </summary>
+  public class RosenbrockEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Rosenbrock Function
+
+Domain:  [-2.048 , 2.048]^n
+Optimum: 0.0 at (1, 1, ..., 1)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Rosenbrock function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 0;
+      for (int i = 0; i < point.Length - 1; i++) {
+        result += 100 * (point[i + 1] - point[i] * point[i]) * (point[i + 1] - point[i] * point[i]);
+        result += (1 - point[i]) * (1 - point[i]);
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Rosenbrock function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SchwefelEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SchwefelEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SchwefelEvaluator.cs	(revision 1270)
@@ -0,0 +1,68 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Schwefel Function (Sine Root)<br/>
+  /// Domain:  [-500.0 , 500.0]^n<br/>
+  /// Optimum: 0.0 at (420.968746453712, 420.968746453712, ..., 420.968746453712)
+  /// </summary>
+  public class SchwefelEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Schwefel Function (Sine Root)
+
+Domain:  [-500.0 , 500.0]^n
+Optimum: 0.0 at (420.968746453712, 420.968746453712, ..., 420.968746453712)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Schwefel function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 418.982887272433 * point.Length;
+      for (int i = 0; i < point.Length; i++)
+        result -= point[i] * Math.Sin(Math.Sqrt(Math.Abs(point[i])));
+      return (result);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Schwefel function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SphereEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SphereEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SphereEvaluator.cs	(revision 1270)
@@ -0,0 +1,68 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Sphere Function<br/>
+  /// Domain:  [-5.12 , 5.12]^n<br/>
+  /// Optimum: 0.0 at (0, 0, ..., 0)
+  /// </summary>
+  public class SphereEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Sphere Function
+
+Domain:  [-5.12 , 5.12]^n
+Optimum: 0.0 at (0, 0, ..., 0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Sphere function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 0;
+      for (int i = 0; i < point.Length; i++)
+        result += point[i] * point[i];
+      return result;
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Sphere function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SumSquaresEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SumSquaresEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/SumSquaresEvaluator.cs	(revision 1270)
@@ -0,0 +1,66 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Sum Squares Function<br/>
+  /// Domain:  [-10.0 , 10.0]^n<br/>
+  /// Optimum: 0.0 at (0.0, 0.0, ..., 0.0)
+  /// </summary>
+  public class SumSquaresEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Sum Squares Function
+
+Domain:  [-10.0 , 10.0]^n
+Optimum: 0.0 at (0.0, 0.0, ..., 0.0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Sum Squares function at the given point.</returns>
+    public static double Apply(double[] point) {
+      double result = 0;
+      for (int i = 0; i < point.Length; i++) {
+        result += i * point[i] * point[i];
+      }
+      return result;
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Sum Squares function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionEvaluatorBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionEvaluatorBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionEvaluatorBase.cs	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Base class for a test function evaluator.
+  /// </summary>
+  public abstract class TestFunctionEvaluatorBase : SingleObjectiveEvaluatorBase {
+    /// <summary>
+    /// Initializes a new instance of <see cref="TestFunctionEvaluatorBase"/> with one variable info
+    /// (<c>Point</c>).
+    /// </summary>
+    public TestFunctionEvaluatorBase() {
+      AddVariableInfo(new VariableInfo("Point", "n-dimensional point for which the test function should be evaluated", typeof(DoubleArrayData), VariableKind.In));
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific point.
+    /// </summary>
+    /// <remarks>Calls <see cref="EvaluateFunction(double[])"/>.</remarks>
+    /// <param name="scope">The current scope with the point for which to evaluate.</param>
+    /// <returns>The result value of the function at the given point.</returns>
+    protected sealed override double Evaluate(IScope scope) {
+      return EvaluateFunction(GetVariableValue<DoubleArrayData>("Point", scope, false).Data);
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the function at the given point.</returns>
+    protected abstract double EvaluateFunction(double[] point);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjector.cs	(revision 1270)
@@ -0,0 +1,106 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Injects the necessary variables for optimizing a test function
+  /// </summary>
+  public class TestFunctionInjector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get {
+        return @"Injects the necessary variables for optimizing a test function";
+      }
+    }
+
+    /// <summary>
+    /// Gets or sets the boolean flag whether it is an optimization problem or not.
+    /// </summary>
+    public bool Maximization {
+      get { return GetVariable("Maximization").GetValue<BoolData>().Data; }
+      set { GetVariable("Maximization").Value = new BoolData(value); }
+    }
+
+    /// <summary>
+    /// Gets or sets the lower bound.
+    /// </summary>
+    public double LowerBound {
+      get { return GetVariable("LowerBound").GetValue<DoubleData>().Data; }
+      set { GetVariable("LowerBound").Value = new DoubleData(value); }
+    }
+
+    /// <summary>
+    /// Gets or sets the upper bound.
+    /// </summary>
+    public double UpperBound {
+      get { return GetVariable("UpperBound").GetValue<DoubleData>().Data; }
+      set { GetVariable("UpperBound").Value = new DoubleData(value); }
+    }
+
+    /// <summary>
+    /// Gets or sets the dimension.
+    /// </summary>
+    public int Dimension {
+      get { return GetVariable("Dimension").GetValue<IntData>().Data; }
+      set { GetVariable("Dimension").Value = new IntData(value); }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TestFunctionInjector"/> with four variable infos
+    /// (<c>Maximization</c>, <c>LowerBound</c>, <c>UpperBound</c> and <c>Dimension</c>).
+    /// </summary>
+    public TestFunctionInjector()
+      : base() {
+      AddVariable(new Variable("Maximization", new BoolData(false)));
+      AddVariable(new Variable("LowerBound", new DoubleData(-32.76)));
+      AddVariable(new Variable("UpperBound", new DoubleData(32.76)));
+      AddVariable(new Variable("Dimension", new IntData(2)));
+    }
+
+    /// <summary>
+    /// Injects the necessary variables for optimizing a test function.
+    /// </summary>
+    /// <param name="scope">The scope where to inject the variables.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      scope.AddVariable((IVariable)GetVariable("Maximization").Clone());
+      scope.AddVariable((IVariable)GetVariable("LowerBound").Clone());
+      scope.AddVariable((IVariable)GetVariable("UpperBound").Clone());
+      scope.AddVariable((IVariable)GetVariable("Dimension").Clone());
+      return null;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="TestFunctionInjectorView"/> to represent the current 
+    /// instance visually.
+    /// </summary>
+    /// <returns>The newly created view as <see cref="TestFunctionInjectorView"/>.</returns>
+    public override IView CreateView() {
+      return new TestFunctionInjectorView(this);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.Designer.cs	(revision 1270)
@@ -0,0 +1,128 @@
+﻿namespace HeuristicLab.TestFunctions {
+  partial class TestFunctionInjectorView {
+    /// <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.DimensionLabel = new System.Windows.Forms.Label();
+      this.MinimumLabel = new System.Windows.Forms.Label();
+      this.maximumLabel = new System.Windows.Forms.Label();
+      this.maximizationCheckBox = new System.Windows.Forms.CheckBox();
+      this.dimensionTextBox = new System.Windows.Forms.TextBox();
+      this.lowerBoundTextBox = new System.Windows.Forms.TextBox();
+      this.upperBoundTextBox = new System.Windows.Forms.TextBox();
+      this.SuspendLayout();
+      // 
+      // DimensionLabel
+      // 
+      this.DimensionLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.DimensionLabel.AutoSize = true;
+      this.DimensionLabel.Location = new System.Drawing.Point(3, 29);
+      this.DimensionLabel.Name = "DimensionLabel";
+      this.DimensionLabel.Size = new System.Drawing.Size(59, 13);
+      this.DimensionLabel.TabIndex = 1;
+      this.DimensionLabel.Text = "Dimension:";
+      // 
+      // MinimumLabel
+      // 
+      this.MinimumLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.MinimumLabel.AutoSize = true;
+      this.MinimumLabel.Location = new System.Drawing.Point(3, 55);
+      this.MinimumLabel.Name = "MinimumLabel";
+      this.MinimumLabel.Size = new System.Drawing.Size(73, 13);
+      this.MinimumLabel.TabIndex = 3;
+      this.MinimumLabel.Text = "Lower Bound:";
+      // 
+      // maximumLabel
+      // 
+      this.maximumLabel.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximumLabel.AutoSize = true;
+      this.maximumLabel.Location = new System.Drawing.Point(3, 81);
+      this.maximumLabel.Name = "maximumLabel";
+      this.maximumLabel.Size = new System.Drawing.Size(73, 13);
+      this.maximumLabel.TabIndex = 5;
+      this.maximumLabel.Text = "Upper Bound:";
+      // 
+      // maximizationCheckBox
+      // 
+      this.maximizationCheckBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.maximizationCheckBox.AutoSize = true;
+      this.maximizationCheckBox.Location = new System.Drawing.Point(83, 3);
+      this.maximizationCheckBox.Name = "maximizationCheckBox";
+      this.maximizationCheckBox.Size = new System.Drawing.Size(86, 17);
+      this.maximizationCheckBox.TabIndex = 0;
+      this.maximizationCheckBox.Text = "Maximization";
+      this.maximizationCheckBox.UseVisualStyleBackColor = true;
+      // 
+      // dimensionTextBox
+      // 
+      this.dimensionTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.dimensionTextBox.Location = new System.Drawing.Point(82, 26);
+      this.dimensionTextBox.Name = "dimensionTextBox";
+      this.dimensionTextBox.Size = new System.Drawing.Size(100, 20);
+      this.dimensionTextBox.TabIndex = 2;
+      // 
+      // lowerBoundTextBox
+      // 
+      this.lowerBoundTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.lowerBoundTextBox.Location = new System.Drawing.Point(82, 52);
+      this.lowerBoundTextBox.Name = "lowerBoundTextBox";
+      this.lowerBoundTextBox.Size = new System.Drawing.Size(100, 20);
+      this.lowerBoundTextBox.TabIndex = 4;
+      // 
+      // upperBoundTextBox
+      // 
+      this.upperBoundTextBox.Anchor = System.Windows.Forms.AnchorStyles.None;
+      this.upperBoundTextBox.Location = new System.Drawing.Point(82, 78);
+      this.upperBoundTextBox.Name = "upperBoundTextBox";
+      this.upperBoundTextBox.Size = new System.Drawing.Size(100, 20);
+      this.upperBoundTextBox.TabIndex = 6;
+      // 
+      // TestFunctionInjectorView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.upperBoundTextBox);
+      this.Controls.Add(this.lowerBoundTextBox);
+      this.Controls.Add(this.dimensionTextBox);
+      this.Controls.Add(this.maximizationCheckBox);
+      this.Controls.Add(this.maximumLabel);
+      this.Controls.Add(this.MinimumLabel);
+      this.Controls.Add(this.DimensionLabel);
+      this.Name = "TestFunctionInjectorView";
+      this.Size = new System.Drawing.Size(186, 101);
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Label DimensionLabel;
+    private System.Windows.Forms.Label MinimumLabel;
+    private System.Windows.Forms.Label maximumLabel;
+    private System.Windows.Forms.CheckBox maximizationCheckBox;
+    private System.Windows.Forms.TextBox dimensionTextBox;
+    private System.Windows.Forms.TextBox lowerBoundTextBox;
+    private System.Windows.Forms.TextBox upperBoundTextBox;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.cs	(revision 1270)
@@ -0,0 +1,114 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Visual representation of a <see cref="TestFunctionInjector"/>.
+  /// </summary>
+  public partial class TestFunctionInjectorView : ViewBase {
+    /// <summary>
+    /// Gets or sets the TestFunctionInjector to represent visually.
+    /// </summary>
+    /// <remarks>Uses property <see cref="ViewBase.Item"/> of base class <see cref="ViewBase"/>.
+    /// No own data storage present.</remarks>
+    public TestFunctionInjector TestFunctionInjector {
+      get { return (TestFunctionInjector)base.Item; }
+      set { base.Item = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TestFunctionInjectorView"/>.
+    /// </summary>
+    public TestFunctionInjectorView() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="TestFunctionInjectorView"/> with the given
+    /// <paramref name="testFunctionInjector"/> to display.
+    /// </summary>
+    /// <param name="testFunctionInjector">The injector to represent visually.</param>
+    public TestFunctionInjectorView(TestFunctionInjector testFunctionInjector)
+      : this() {
+      TestFunctionInjector = testFunctionInjector;
+    }
+
+    /// <summary>
+    /// Removes the eventhandler from the underlying controls.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.RemoveItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      maximizationCheckBox.DataBindings.Clear();
+      dimensionTextBox.DataBindings.Clear();
+      lowerBoundTextBox.DataBindings.Clear();
+      upperBoundTextBox.DataBindings.Clear();
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying controls.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.AddItemEvents"/> of base class <see cref="ViewBase"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      maximizationCheckBox.DataBindings.Add("Checked", TestFunctionInjector, "Maximization");
+      dimensionTextBox.DataBindings.Add("Text", TestFunctionInjector, "Dimension");
+      lowerBoundTextBox.DataBindings.Add("Text", TestFunctionInjector, "LowerBound");
+      upperBoundTextBox.DataBindings.Add("Text", TestFunctionInjector, "UpperBound");
+    }
+
+    /// <summary>
+    /// Updates all controls with the latest values.
+    /// </summary>
+    /// <remarks>Calls <see cref="ViewBase.UpdateControls"/> of base class <see cref="ViewBase"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (TestFunctionInjector == null) {
+        maximizationCheckBox.Enabled = false;
+        maximizationCheckBox.Checked = false;
+        dimensionTextBox.Enabled = false;
+        dimensionTextBox.Text = "-";
+        lowerBoundTextBox.Enabled = false;
+        lowerBoundTextBox.Text = "-";
+        upperBoundTextBox.Enabled = false;
+        upperBoundTextBox.Text = "-";
+      } else {
+        maximizationCheckBox.Enabled = true;
+        dimensionTextBox.Enabled = true;
+        lowerBoundTextBox.Enabled = true;
+        upperBoundTextBox.Enabled = true;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/TestFunctionInjectorView.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/ZakharovEvaluator.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/ZakharovEvaluator.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.TestFunctions/ZakharovEvaluator.cs	(revision 1270)
@@ -0,0 +1,70 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HeuristicLab.TestFunctions {
+  /// <summary>
+  /// Zakharov Function<br/>
+  /// Domain:  [-5.0 , 10.0]^n<br/>
+  /// Optimum: 0.0 at (0.0, 0.0, ..., 0.0)
+  /// </summary>
+  public class ZakharovEvaluator : TestFunctionEvaluatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return
+@"Zakharov Function
+
+Domain:  [-5.0 , 10.0]^n
+Optimum: 0.0 at (0.0, 0.0, ..., 0.0)";
+          }
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Zakharov function at the given point.</returns>
+    public static double Apply(double[] point) {
+      int length = point.Length;
+      double s1 = 0;
+      double s2 = 0;
+
+      for (int i = 0; i < length; i++) {
+        s1 = s1 + point[i] * point[i];
+        s2 = s2 + 0.5 * i * point[i];
+      }
+      return s1 + s2 * s2 + s2 * s2 * s2 * s2;
+    }
+
+    /// <summary>
+    /// Evaluates the test function for a specific <paramref name="point"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="Apply"/>.</remarks>
+    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
+    /// <returns>The result value of the Zakharov function at the given point.</returns>
+    protected override double EvaluateFunction(double[] point) {
+      return Apply(point);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/HeuristicLab.ThreadParallelEngine.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/HeuristicLab.ThreadParallelEngine.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/HeuristicLab.ThreadParallelEngine.csproj	(revision 1270)
@@ -0,0 +1,104 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{6E757D0E-20F9-4E89-AF06-D7DA256870DB}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.ThreadParallelEngine</RootNamespace>
+    <AssemblyName>HeuristicLab.ThreadParallelEngine-3.2</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+    <DocumentationFile>bin\Release\HeuristicLab.ThreadParallelEngine-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.ThreadParallelEngine-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabThreadParallelEnginePlugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ThreadParallelEngine.cs" />
+    <Compile Include="ThreadParallelEngineEditor.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="ThreadParallelEngineEditor.Designer.cs">
+      <DependentUpon>ThreadParallelEngineEditor.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/HeuristicLabThreadParallelEnginePlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/HeuristicLabThreadParallelEnginePlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/HeuristicLabThreadParallelEnginePlugin.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.ThreadParallelEngine {
+  /// <summary>
+  /// Plugin class for HeuristicLab.ThreadParallelEngine plugin.
+  /// </summary>
+  [ClassInfo(Name = "HeuristicLab.ThreadParallelEngine-3.2")]
+  [PluginFile(Filename = "HeuristicLab.ThreadParallelEngine-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabThreadParallelEnginePlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,58 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.ThreadParallelEngine")]
+[assembly: AssemblyDescription("HeuristicLab engine for parallel processing using multiple threads")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("015adceb-e1e1-405f-a0d1-be1a977772d9")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngine.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngine.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngine.cs	(revision 1270)
@@ -0,0 +1,246 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Xml;
+using System.Threading;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.ThreadParallelEngine {
+  /// <summary>
+  /// Implementation of an engine being able to run in parallel with threads.
+  /// </summary>
+  public class ThreadParallelEngine : EngineBase, IEditable {
+    #region Inner Class Task
+    private class TaskList {
+      public Stack<IOperation>[] tasks;
+      public int next;
+      public Semaphore semaphore;
+    }
+    #endregion
+
+    // currently executed operators
+    private IOperator[] currentOperators;
+    private int operatorIndex;
+
+    private int myWorkers;
+    /// <summary>
+    /// Gets or sets the number of worker threads of the current engine.
+    /// </summary>
+    /// <remarks>Calls <see cref="OnWorkersChanged"/> in the setter.</remarks>
+    public int Workers {
+      get { return myWorkers; }
+      set {
+        if (value != myWorkers) {
+          myWorkers = value;
+          OnWorkersChanged();
+        }
+      }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ThreadParallelEngine"/> with the number of processors
+    /// as number of worker threads.
+    /// </summary>
+    public ThreadParallelEngine() {
+      myWorkers = Environment.ProcessorCount;
+      currentOperators = new IOperator[1000];
+    }
+
+
+    /// <inheritdoc/>
+    /// <returns>The cloned object as <see cref="ThreadParallelEngine"/>.</returns>
+    public override object Clone(IDictionary<Guid, object> clonedObjects) {
+      ThreadParallelEngine clone = (ThreadParallelEngine)base.Clone(clonedObjects);
+      clone.myWorkers = Workers;
+      return clone;
+    }
+
+    /// <summary>
+    /// Creates a new instance of <see cref="ThreadParallelEngineEditor"/> to display the current 
+    /// instance.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ThreadParallelEngineEditor"/>.</returns>
+    public override IView CreateView() {
+      return new ThreadParallelEngineEditor(this);
+    }
+    /// <summary>
+    /// Creates a new instance of <see cref="ThreadParallelEngineEditor"/>.
+    /// </summary>
+    /// <returns>The created instance as <see cref="ThreadParallelEngineEditor"/>.</returns>
+    public virtual IEditor CreateEditor() {
+      return new ThreadParallelEngineEditor(this);
+    }
+
+    /// <summary>
+    /// This execution method is not supported by ThreadParallelEngines.
+    /// </summary>
+    /// <exception cref="InvalidOperationException">Thrown because the current instance of an engine
+    /// does not support stepwise execution.</exception>
+    /// <param name="steps">The number of steps to execute.</param>
+    public override void ExecuteSteps(int steps) {
+      throw new InvalidOperationException("ThreadParallelEngine doesn't support stepwise execution");
+    }
+
+    /// <inheritdoc/>
+    public override void Abort() {
+      base.Abort();
+      for (int i = 0; i < currentOperators.Length; i++) {
+        if (currentOperators[i] != null)
+          currentOperators[i].Abort();
+      }
+    }
+    /// <summary>
+    /// Processes the next operation (if it is a compositeOperation and it can be executed in parallel it is 
+    /// done).
+    /// </summary>
+    protected override void ProcessNextOperation() {
+      operatorIndex = 1;
+      ProcessNextOperation(myExecutionStack, 0);
+    }
+    private void ProcessNextOperation(Stack<IOperation> stack, int currentOperatorIndex) {
+      IOperation operation = stack.Pop();
+      if (operation is AtomicOperation) {
+        AtomicOperation atomicOperation = (AtomicOperation)operation;
+        IOperation next = null;
+        try {
+          currentOperators[currentOperatorIndex] = atomicOperation.Operator;
+          next = atomicOperation.Operator.Execute(atomicOperation.Scope);
+        }
+        catch (Exception ex) {
+          // push operation on stack again
+          stack.Push(atomicOperation);
+          Abort();
+          ThreadPool.QueueUserWorkItem(delegate(object state) { OnExceptionOccurred(ex); });
+        }
+        if (next != null)
+          stack.Push(next);
+        OnOperationExecuted(atomicOperation);
+        if (atomicOperation.Operator.Breakpoint) Abort();
+      } else if (operation is CompositeOperation) {
+        CompositeOperation compositeOperation = (CompositeOperation)operation;
+        if (compositeOperation.ExecuteInParallel) {
+          TaskList list = new TaskList();
+          list.tasks = new Stack<IOperation>[compositeOperation.Operations.Count];
+          for (int i = 0; i < list.tasks.Length; i++) {
+            list.tasks[i] = new Stack<IOperation>();
+            list.tasks[i].Push(compositeOperation.Operations[i]);
+          }
+          list.next = 0;
+          list.semaphore = new Semaphore(0, Workers);
+
+          for (int i = 0; i < Workers; i++)
+            ThreadPool.QueueUserWorkItem(new WaitCallback(ProcessParallelOperation), list);
+          for (int i = 0; i < Workers; i++)
+            list.semaphore.WaitOne();
+          list.semaphore.Close();
+
+          if (Canceled) {
+            // write back not finished tasks
+            CompositeOperation remaining = new CompositeOperation();
+            remaining.ExecuteInParallel = true;
+            for (int i = 0; i < list.tasks.Length; i++) {
+              if (list.tasks[i].Count > 0) {
+                CompositeOperation task = new CompositeOperation();
+                while (list.tasks[i].Count > 0)
+                  task.AddOperation(list.tasks[i].Pop());
+                remaining.AddOperation(task);
+              }
+            }
+            if (remaining.Operations.Count > 0)
+              stack.Push(remaining);
+          }
+        } else {
+          for (int i = compositeOperation.Operations.Count - 1; i >= 0; i--)
+            stack.Push(compositeOperation.Operations[i]);
+        }
+      }
+    }
+    private void ProcessParallelOperation(object state) {
+      TaskList list = (TaskList)state;
+      int currentOperatorIndex, next;
+
+      do {
+        lock (currentOperators) {
+          currentOperatorIndex = operatorIndex;
+          operatorIndex++;
+        }
+        lock (list) {
+          next = list.next;
+          list.next++;
+        }
+
+        if (next < list.tasks.Length) {
+          Stack<IOperation> stack = list.tasks[next];
+          while ((!Canceled) && (stack.Count > 0))
+            ProcessNextOperation(stack, currentOperatorIndex);
+        }
+      } while ((!Canceled) && (next < list.tasks.Length));
+      list.semaphore.Release();
+    }
+
+    /// <summary>
+    /// Occurs when the number of workers has been changed.
+    /// </summary>
+    public event EventHandler WorkersChanged;
+    /// <summary>
+    /// Fires a new <c>WorkersChanged</c> event.
+    /// </summary>
+    protected virtual void OnWorkersChanged() {
+      if (WorkersChanged != null)
+        WorkersChanged(this, new EventArgs());
+    }
+
+    #region Persistence Methods
+    /// <summary>
+    /// Saves the current instance as <see cref="XmlNode"/> in the specified <paramref name="document"/>.
+    /// </summary>
+    /// <remarks>The number of workers is saved as <see cref="XmlAttribute"/> with attribute name 
+    /// <c>Workers</c>.</remarks>
+    /// <param name="name">The (tag)name of the <see cref="XmlNode"/>.</param>
+    /// <param name="document">The <see cref="XmlDocument"/> where the data is saved.</param>
+    /// <param name="persistedObjects">The dictionary of all already persisted objects. 
+    /// (Needed to avoid cycles.)</param>
+    /// <returns>The saved <see cref="XmlNode"/>.</returns>
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+      XmlAttribute workersAttribute = document.CreateAttribute("Workers");
+      workersAttribute.Value = Workers.ToString();
+      node.Attributes.Append(workersAttribute);
+      return node;
+    }
+    /// <summary>
+    /// Loads the persisted engine from the specified <paramref name="node"/>.
+    /// </summary>
+    /// <remarks>The number of workers must be saved in a specific way, see <see cref="GetXmlNode"/>
+    /// for further information.</remarks>
+    /// <param name="node">The <see cref="XmlNode"/> where the instance is saved.</param>
+    /// <param name="restoredObjects">The dictionary of all already restored objects. 
+    /// (Needed to avoid cycles.)</param>
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+      myWorkers = int.Parse(node.Attributes["Workers"].Value);
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngineEditor.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngineEditor.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngineEditor.Designer.cs	(revision 1270)
@@ -0,0 +1,134 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.ThreadParallelEngine {
+  partial class ThreadParallelEngineEditor {
+    /// <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.workersNumericUpDown = new System.Windows.Forms.NumericUpDown();
+      this.workersLabel = new System.Windows.Forms.Label();
+      this.splitContainer1.Panel1.SuspendLayout();
+      this.splitContainer1.Panel2.SuspendLayout();
+      this.splitContainer1.SuspendLayout();
+      this.operatorGraphGroupBox.SuspendLayout();
+      this.globalScopeGroupBox.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.workersNumericUpDown)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // executionTimeTextBox
+      // 
+      this.executionTimeTextBox.TabIndex = 7;
+      // 
+      // executionTimeLabel
+      // 
+      this.executionTimeLabel.TabIndex = 6;
+      // 
+      // splitContainer1
+      // 
+      // 
+      // workersNumericUpDown
+      // 
+      this.workersNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.workersNumericUpDown.Location = new System.Drawing.Point(406, 460);
+      this.workersNumericUpDown.Maximum = new decimal(new int[] {
+            10000,
+            0,
+            0,
+            0});
+      this.workersNumericUpDown.Minimum = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
+      this.workersNumericUpDown.Name = "workersNumericUpDown";
+      this.workersNumericUpDown.Size = new System.Drawing.Size(87, 20);
+      this.workersNumericUpDown.TabIndex = 5;
+      this.workersNumericUpDown.Value = new decimal(new int[] {
+            1,
+            0,
+            0,
+            0});
+      this.workersNumericUpDown.ValueChanged += new System.EventHandler(this.workersNumericUpDown_ValueChanged);
+      // 
+      // workersLabel
+      // 
+      this.workersLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.workersLabel.AutoSize = true;
+      this.workersLabel.Location = new System.Drawing.Point(403, 444);
+      this.workersLabel.Name = "workersLabel";
+      this.workersLabel.Size = new System.Drawing.Size(87, 13);
+      this.workersLabel.TabIndex = 4;
+      this.workersLabel.Text = "&Worker Threads:";
+      // 
+      // ThreadParallelEngineEditor
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.workersNumericUpDown);
+      this.Controls.Add(this.workersLabel);
+      this.Name = "ThreadParallelEngineEditor";
+      this.Controls.SetChildIndex(this.workersLabel, 0);
+      this.Controls.SetChildIndex(this.workersNumericUpDown, 0);
+      this.Controls.SetChildIndex(this.executionTimeLabel, 0);
+      this.Controls.SetChildIndex(this.executeButton, 0);
+      this.Controls.SetChildIndex(this.abortButton, 0);
+      this.Controls.SetChildIndex(this.resetButton, 0);
+      this.Controls.SetChildIndex(this.splitContainer1, 0);
+      this.Controls.SetChildIndex(this.executionTimeTextBox, 0);
+      this.splitContainer1.Panel1.ResumeLayout(false);
+      this.splitContainer1.Panel2.ResumeLayout(false);
+      this.splitContainer1.ResumeLayout(false);
+      this.operatorGraphGroupBox.ResumeLayout(false);
+      this.globalScopeGroupBox.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.workersNumericUpDown)).EndInit();
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.NumericUpDown workersNumericUpDown;
+    private System.Windows.Forms.Label workersLabel;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngineEditor.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngineEditor.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.ThreadParallelEngine/ThreadParallelEngineEditor.cs	(revision 1270)
@@ -0,0 +1,112 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.ThreadParallelEngine {
+  /// <summary>
+  /// Visual representation of a <see cref="ThreadParallelEngine"/>.
+  /// </summary>
+  public partial class ThreadParallelEngineEditor : EngineBaseEditor {
+    /// <summary>
+    /// Gets or sets the ThreadParallelEngine to display.
+    /// </summary>
+    /// <remarks>Uses property <see cref="EngineBaseEditor.Engine"/> of base class 
+    /// <see cref="EngineBaseEditor"/>. No own data storage present.</remarks>
+    public ThreadParallelEngine ThreadParallelEngine {
+      get { return (ThreadParallelEngine)Engine; }
+      set { base.Engine = value; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ThreadParallelEngineEditor"/>.
+    /// </summary>
+    public ThreadParallelEngineEditor() {
+      InitializeComponent();
+    }
+    /// <summary>
+    /// Initializes a new instance of <see cref="ThreadParallelEngineEditor"/> with the given
+    /// <paramref name="threadParallelEngine"/> to display.
+    /// </summary>
+    /// <param name="threadParallelEngine">The engine to represent visually.</param>
+    public ThreadParallelEngineEditor(ThreadParallelEngine threadParallelEngine)
+      : this() {
+      ThreadParallelEngine = threadParallelEngine;
+    }
+
+    /// <summary>
+    /// Removes the eventhandlers from the underlying <see cref="ThreadParallelEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="EngineBaseEditor.RemoveItemEvents"/> of base class 
+    /// <see cref="EngineBaseEditor"/>.
+    /// </remarks>
+    protected override void RemoveItemEvents() {
+      ThreadParallelEngine.WorkersChanged -= new EventHandler(ThreadParallelEngine_WorkersChanged);
+      base.RemoveItemEvents();
+    }
+
+    /// <summary>
+    /// Adds eventhandlers to the underlying <see cref="ThreadParallelEngine"/>.
+    /// </summary>
+    /// <remarks>Calls <see cref="EngineBaseEditor.AddItemEvents"/> of base class 
+    /// <see cref="EngineBaseEditor"/>.
+    /// </remarks>
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+      ThreadParallelEngine.WorkersChanged += new EventHandler(ThreadParallelEngine_WorkersChanged);
+    }
+
+    /// <summary>
+    /// Updates the controls with the latest data.
+    /// </summary>
+    /// <remarks>Calls <see cref="EngineBaseEditor.UpdateControls"/> of base class 
+    /// <see cref="EngineBaseEditor"/>.</remarks>
+    protected override void UpdateControls() {
+      base.UpdateControls();
+      if (ThreadParallelEngine == null) {
+        workersNumericUpDown.Value = 1;
+        workersNumericUpDown.Enabled = false;
+      } else {
+        workersNumericUpDown.Value = ThreadParallelEngine.Workers;
+        workersNumericUpDown.Enabled = true;
+      }
+    }
+
+    #region ThreadParallelEngine Events
+    private void ThreadParallelEngine_WorkersChanged(object sender, EventArgs e) {
+      workersNumericUpDown.Value = ThreadParallelEngine.Workers;
+    }
+    #endregion
+
+    #region NumericUpDown Events
+    private void workersNumericUpDown_ValueChanged(object sender, EventArgs e) {
+      ThreadParallelEngine.Workers = (int)workersNumericUpDown.Value;
+    }
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLab.Visualization.Test.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLab.Visualization.Test.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLab.Visualization.Test.csproj	(revision 1270)
@@ -0,0 +1,143 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{23117533-8A91-474E-BBF6-C39485D0810A}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Visualization.Test</RootNamespace>
+    <AssemblyName>HeuristicLab.Visualization.Test-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Visualization.Test-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Visualization.Test-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>NUnit-2.4.8-bin\nunit.framework.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="HeuristicLabVisualizationTestApplication.cs" />
+    <Compile Include="HeuristicLabVisualizationTestPlugin.cs" />
+    <Compile Include="LegendForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="LegendForm.Designer.cs">
+      <DependentUpon>LegendForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LineChartTestForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="LineChartTestForm.Designer.cs">
+      <DependentUpon>LineChartTestForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LineChartTests.cs" />
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Visualization\HeuristicLab.Visualization.csproj">
+      <Project>{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}</Project>
+      <Name>HeuristicLab.Visualization</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="LineChartTestForm.resx">
+      <DependentUpon>LineChartTestForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="LegendForm.resx">
+      <DependentUpon>LegendForm.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLabVisualizationTestApplication.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLabVisualizationTestApplication.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLabVisualizationTestApplication.cs	(revision 1270)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Visualization.Test {
+  [ClassInfo(Name = "HeuristicLab Data Visualization", Description="Test application for the HeuristicLab data visualization framework.")]
+  class HeuristicLabVisualizationTestApplication : ApplicationBase {
+    public override void Run() {
+      Form mainForm = new MainForm();
+      Application.Run(mainForm);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLabVisualizationTestPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLabVisualizationTestPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/HeuristicLabVisualizationTestPlugin.cs	(revision 1270)
@@ -0,0 +1,33 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Visualization.Test {
+  [ClassInfo(Name = "HeuristicLab.Visualization.Test-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Visualization.Test-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Visualization-3.2")]
+  public class HeuristicLabVisualizationTestPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.Designer.cs	(revision 1270)
@@ -0,0 +1,53 @@
+﻿namespace HeuristicLab.Visualization.Test {
+  partial class LegendForm {
+    /// <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.canvasUI = new HeuristicLab.Visualization.CanvasUI();
+      this.SuspendLayout();
+      // 
+      // canvasUI
+      // 
+      this.canvasUI.Location = new System.Drawing.Point(12, 12);
+      this.canvasUI.Name = "canvasUI";
+      this.canvasUI.Size = new System.Drawing.Size(260, 240);
+      this.canvasUI.TabIndex = 0;
+      this.canvasUI.Text = "canvasUI";
+      // 
+      // LegendForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(284, 264);
+      this.Controls.Add(this.canvasUI);
+      this.Name = "LegendForm";
+      this.Text = "LegendForm";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private CanvasUI canvasUI;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.cs	(revision 1270)
@@ -0,0 +1,21 @@
+﻿using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Visualization.Legend;
+
+namespace HeuristicLab.Visualization.Test {
+  public partial class LegendForm : Form {
+    public LegendForm() {
+      InitializeComponent();
+
+      CreateLegendShape();
+    }
+
+    private void CreateLegendShape() {
+      LegendShape ls = new LegendShape();
+      ls.AddLegendItem(new LegendItem("test", Color.Black, 5));
+      ls.AddLegendItem(new LegendItem("test2", Color.Red, 5));
+
+      canvasUI.Canvas.AddShape(ls);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LegendForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.Designer.cs	(revision 1270)
@@ -0,0 +1,86 @@
+﻿namespace HeuristicLab.Visualization.Test {
+  partial class LineChartTestForm {
+    /// <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.lineChartGroupBox = new System.Windows.Forms.GroupBox();
+      this.btnResetView = new System.Windows.Forms.Button();
+      this.btnAddRandomValue = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // lineChartGroupBox
+      // 
+      this.lineChartGroupBox.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.lineChartGroupBox.Location = new System.Drawing.Point(12, 12);
+      this.lineChartGroupBox.Name = "lineChartGroupBox";
+      this.lineChartGroupBox.Size = new System.Drawing.Size(673, 376);
+      this.lineChartGroupBox.TabIndex = 0;
+      this.lineChartGroupBox.TabStop = false;
+      this.lineChartGroupBox.Text = "Line Chart";
+      // 
+      // btnResetView
+      // 
+      this.btnResetView.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnResetView.Location = new System.Drawing.Point(610, 404);
+      this.btnResetView.Name = "btnResetView";
+      this.btnResetView.Size = new System.Drawing.Size(75, 23);
+      this.btnResetView.TabIndex = 1;
+      this.btnResetView.Text = "Reset View";
+      this.btnResetView.UseVisualStyleBackColor = true;
+      this.btnResetView.Click += new System.EventHandler(this.btnResetView_Click);
+      // 
+      // btnAddRandomValue
+      // 
+      this.btnAddRandomValue.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.btnAddRandomValue.Location = new System.Drawing.Point(529, 404);
+      this.btnAddRandomValue.Name = "btnAddRandomValue";
+      this.btnAddRandomValue.Size = new System.Drawing.Size(75, 23);
+      this.btnAddRandomValue.TabIndex = 2;
+      this.btnAddRandomValue.Text = "Add Value";
+      this.btnAddRandomValue.UseVisualStyleBackColor = true;
+      this.btnAddRandomValue.Click += new System.EventHandler(this.btnAddRandomValue_Click);
+      // 
+      // LineChartTestForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(697, 453);
+      this.Controls.Add(this.btnAddRandomValue);
+      this.Controls.Add(this.lineChartGroupBox);
+      this.Controls.Add(this.btnResetView);
+      this.Name = "LineChartTestForm";
+      this.Text = "LineChartTestForm";
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.GroupBox lineChartGroupBox;
+    private System.Windows.Forms.Button btnResetView;
+    private System.Windows.Forms.Button btnAddRandomValue;
+
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.cs	(revision 1270)
@@ -0,0 +1,38 @@
+﻿using System;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Visualization.Test {
+  public partial class LineChartTestForm : Form {
+    private readonly IView view;
+    private ChartDataRowsModel model;
+
+    public LineChartTestForm() {
+      InitializeComponent();
+    }
+
+    public LineChartTestForm(ChartDataRowsModel model) : this() {
+      this.model = model;
+      view = model.CreateView();
+
+      Control viewControl = (Control)view;
+      viewControl.Dock = DockStyle.Fill;
+
+      lineChartGroupBox.Controls.Add(viewControl);
+    }
+
+    private void btnResetView_Click(object sender, EventArgs e) {
+      if (view != null) {
+        LineChart lineChart = (LineChart)view;
+        lineChart.ZoomToFullView();
+      }
+    }
+
+    private void btnAddRandomValue_Click(object sender, EventArgs e) {
+      Random rand = new Random();
+
+      foreach (IDataRow row in model.Rows)
+        row.AddValue(rand.NextDouble()*100);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTestForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTests.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTests.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/LineChartTests.cs	(revision 1270)
@@ -0,0 +1,173 @@
+using System;
+using System.Drawing;
+using NUnit.Framework;
+
+namespace HeuristicLab.Visualization.Test {
+  [TestFixture]
+  public class LineChartTests {
+    private ChartDataRowsModel model;
+
+    [SetUp]
+    public void SetUp() {
+      model = new ChartDataRowsModel();
+    }
+
+    [Test]
+    public void TestLineChart() {
+      LineChartTestForm f = new LineChartTestForm(model);
+
+      IDataRow row1 = new DataRow();
+      IDataRow row2 = new DataRow();
+      IDataRow row3 = new DataRow();
+
+      row1.Color = Color.Red;
+      row2.Color = Color.Green;
+      row3.Color = Color.Blue;
+
+      row1.Thickness = 3;
+      row2.Thickness = 4;
+      row3.Thickness = 5;
+
+      row1.Label = "Simon";
+      row2.Label = "Gertschi";
+      row3.Label = "Maxi";
+
+      row1.Style = DrawingStyle.Solid;
+      row2.Style = DrawingStyle.Solid;
+      row3.Style = DrawingStyle.Dashed;
+      
+
+      model.AddDataRow(row1);
+      model.AddDataRow(row2);
+      model.AddDataRow(row3);
+
+      row1.AddValue(10);
+      row1.AddValue(5);
+      row1.AddValue(7);
+      row1.AddValue(3);
+      row1.AddValue(10);
+      row1.AddValue(2);
+
+      row2.AddValue(5);
+      row2.AddValue(6);
+      row2.AddValue(5);
+
+      row3.AddValue(2);
+      row3.AddValue(2);
+      row3.AddValue(2);
+      row3.AddValue(2);
+      row3.AddValue(2);
+
+      Random rand = new Random();
+
+      for (int i = 0; i < 10000; i++) {
+        row1.AddValue(rand.NextDouble()*10);
+        row2.AddValue(rand.NextDouble()*10);
+        row3.AddValue(rand.NextDouble()*10);
+      }
+
+      f.ShowDialog();
+    }
+
+    [Test]
+    public void TestAxes() {
+      LineChartTestForm f = new LineChartTestForm(model);
+
+      IDataRow row1 = new DataRow();
+
+      row1.Color = Color.Red;
+      row1.Thickness = 3;
+      row1.Style = DrawingStyle.Solid;
+
+      model.AddDataRow(row1);
+
+      row1.AddValue(10);
+      row1.AddValue(5);
+      row1.AddValue(7);
+      row1.AddValue(3);
+      row1.AddValue(10);
+      row1.AddValue(2);
+
+      f.ShowDialog();
+    }
+
+    [Test]
+    public void TestAutoZoomInConstructor() {
+      IDataRow row1 = new DataRow();
+
+      row1.Color = Color.Red;
+      row1.Thickness = 3;
+      row1.Style = DrawingStyle.Solid;
+
+      model.AddDataRow(row1);
+
+      row1.AddValue(10);
+      row1.AddValue(5);
+      row1.AddValue(7);
+      row1.AddValue(3);
+      row1.AddValue(10);
+      row1.AddValue(2);
+
+      LineChartTestForm f = new LineChartTestForm(model);
+      f.ShowDialog();
+    }
+
+
+    [Test]
+    public void TestSingleValueDataRows() {
+      LineChartTestForm f = new LineChartTestForm(model);
+
+      IDataRow row1 = new DataRow();
+      IDataRow row2 = new DataRow();
+      IDataRow row3 = new DataRow();
+
+      row1.Color = Color.Red;
+      row2.Color = Color.Green;
+      row3.Color = Color.Blue;
+
+      row1.Thickness = 3;
+      row2.Thickness = 4;
+      row3.Thickness = 5;
+
+      row1.Label = "SingleValue";
+      row2.Label = "Gertschi";
+      row3.Label = "Maxi";
+
+      row1.Style = DrawingStyle.Solid;
+      row2.Style = DrawingStyle.Solid;
+      row3.Style = DrawingStyle.Dashed;
+
+      row1.LineType = DataRowType.SingleValue;
+      row2.LineType = DataRowType.SingleValue;
+      row1.AddValue(12);
+
+      model.AddDataRow(row1);
+      model.AddDataRow(row2);
+      model.AddDataRow(row3);
+
+      
+     
+      row2.AddValue(5);
+     
+
+      row3.AddValue(2);
+      row3.AddValue(5);
+      row3.AddValue(9);
+      row3.AddValue(1);
+      row3.AddValue(3);
+
+
+    
+
+      f.ShowDialog();
+    }
+
+
+
+    [Test]
+    public void TestMainForm() {
+      MainForm f = new MainForm();
+      f.ShowDialog();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.Designer.cs	(revision 1270)
@@ -0,0 +1,80 @@
+﻿namespace HeuristicLab.Visualization.Test {
+  partial class MainForm {
+    /// <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.canvasUI = new HeuristicLab.Visualization.CanvasUI();
+      this.label2 = new System.Windows.Forms.Label();
+      this.legendButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // canvasUI
+      // 
+      this.canvasUI.Location = new System.Drawing.Point(12, 29);
+      this.canvasUI.Name = "canvasUI";
+      this.canvasUI.Size = new System.Drawing.Size(800, 571);
+      this.canvasUI.TabIndex = 3;
+      this.canvasUI.Text = "canvasUI";
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(9, 13);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(43, 13);
+      this.label2.TabIndex = 4;
+      this.label2.Text = "Canvas";
+      // 
+      // legendButton
+      // 
+      this.legendButton.Location = new System.Drawing.Point(12, 606);
+      this.legendButton.Name = "legendButton";
+      this.legendButton.Size = new System.Drawing.Size(75, 23);
+      this.legendButton.TabIndex = 5;
+      this.legendButton.Text = "Legend";
+      this.legendButton.UseVisualStyleBackColor = true;
+      this.legendButton.Click += new System.EventHandler(this.legendButton_Click);
+      // 
+      // MainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(822, 637);
+      this.Controls.Add(this.legendButton);
+      this.Controls.Add(this.label2);
+      this.Controls.Add(this.canvasUI);
+      this.Name = "MainForm";
+      this.Text = "Form1";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Visualization.CanvasUI canvasUI;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.Button legendButton;
+  }
+}
+
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.cs	(revision 1270)
@@ -0,0 +1,92 @@
+﻿using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization.Test {
+  public partial class MainForm : Form {
+    private readonly Canvas canvas;
+
+    public MainForm() {
+      InitializeComponent();
+
+      canvas = canvasUI.Canvas;
+
+      CreateLeftWorldShape();
+      CreateMiddleCompositeShape();
+      CreateRightWorldShape();
+      CreateSimpleRectangleShape();
+
+      canvasUI.Invalidate();
+    }
+
+    private void CreateSimpleRectangleShape() {
+      // simple rectangle shape
+      RectangleShape rect7 = new RectangleShape(5, 5, 50, 50, Color.Black);
+      canvas.AddShape(rect7);
+    }
+
+    private void CreateRightWorldShape() {
+      // right world shape
+      WorldShape rightWorld = new WorldShape();
+      rightWorld.ClippingArea = new RectangleD(-1, -1, 1, 1);
+      rightWorld.BoundingBox = new RectangleD(600, 10, 780, 600);
+
+      double x1 = -3;
+      double y1 = -3;
+
+      for (int i = 0; i < 10000; i++) {
+        RectangleShape rect = new RectangleShape(x1, y1, x1 + 0.3, y1 + 0.3, Color.Maroon);
+        x1 += 0.4;
+        y1 += 0.4;
+        rightWorld.AddShape(rect);
+      }
+
+      canvas.AddShape(rightWorld);
+    }
+
+    private void CreateMiddleCompositeShape() {
+      // middle composite shape
+      CompositeShape middleComp = new CompositeShape();
+
+      RectangleShape rect5 = new RectangleShape(400, 10, 500, 300, Color.Navy);
+      RectangleShape rect6 = new RectangleShape(510, 310, 580, 590, Color.Magenta);
+
+      middleComp.AddShape(rect5);
+      middleComp.AddShape(rect6);
+
+      canvas.AddShape(middleComp);
+    }
+
+    private void CreateLeftWorldShape() {
+      // left world shape
+      WorldShape leftWorld = new WorldShape();
+      leftWorld.ClippingArea = new RectangleD(0, 0, 1000, 1000);
+      leftWorld.BoundingBox = new RectangleD(10, 10, 380, 590);
+
+      RectangleShape fillRect = new RectangleShape(0, 0, 1000, 1000, Color.LightBlue);
+
+      RectangleShape rect1 = new RectangleShape(100, 100, 500, 500, Color.Red);
+      RectangleShape rect2 = new RectangleShape(800, -200, 1200, 500, Color.Green);
+
+      CompositeShape comp1 = new CompositeShape();
+
+      RectangleShape rect3 = new RectangleShape(510, 580, 590, 700, Color.Blue);
+      RectangleShape rect4 = new RectangleShape(600, 710, 800, 900, Color.Orange);
+
+      comp1.AddShape(rect3);
+      comp1.AddShape(rect4);
+
+      leftWorld.AddShape(fillRect);
+      leftWorld.AddShape(rect1);
+      leftWorld.AddShape(rect2);
+      leftWorld.AddShape(comp1);
+
+      canvas.AddShape(leftWorld);
+    }
+
+    private void legendButton_Click(object sender, EventArgs e) {
+      LegendForm form = new LegendForm();
+      form.Show();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/MainForm.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization.Test/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Visualization.Test")]
+[assembly: AssemblyDescription("HeuristicLab data visualization framework test application")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("f7c10f77-1067-4b4c-876a-92fe49b4f228")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/AxisTicks.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/AxisTicks.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/AxisTicks.cs	(revision 1270)
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Visualization {
+  public static class AxisTicks {
+    public static IEnumerable<double> GetTicks(int pixelsPerInterval, int screenSize, double worldSize, double worldStart) {
+      int intervals = screenSize/pixelsPerInterval;
+
+      if (intervals > 0) {
+        double step = worldSize/intervals;
+        step = Math.Pow(10, Math.Floor(Math.Log10(step)));
+        if (worldSize/(step*5) > intervals)
+          step = step*5;
+        else if (worldSize/(step*2) > intervals)
+          step = step*2;
+
+        for (double x = Math.Floor(worldStart/step)*step;
+             x <= worldStart + worldSize;
+             x += step)
+          yield return x;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Canvas.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Canvas.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Canvas.cs	(revision 1270)
@@ -0,0 +1,66 @@
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace HeuristicLab.Visualization {
+  public class Canvas : IShape {
+    private readonly WorldShape worldShape;
+
+    private Rectangle viewport;
+
+    public Canvas() {
+      worldShape = new WorldShape();
+      worldShape.Parent = this;
+    }
+
+    public void AddShape(IShape shape) {
+      worldShape.AddShape(shape);
+    }
+
+    public void RemoveShape(IShape shape) {
+      worldShape.RemoveShape(shape);
+    }
+
+    public void ClearShapes() {
+      worldShape.ClearShapes();
+    }
+
+    public Rectangle Viewport {
+      get { return viewport; }
+      set {
+        viewport = value;
+        worldShape.ClippingArea = new RectangleD(0, 0, viewport.Width, viewport.Height);
+        worldShape.BoundingBox = worldShape.ClippingArea;
+      }
+    }
+
+    public RectangleD ClippingArea {
+      get { return worldShape.ClippingArea; }
+    }
+
+    public RectangleD BoundingBox {
+      get { throw new InvalidOperationException(); }
+    }
+
+    public IShape Parent {
+      get { throw new InvalidOperationException(); }
+      set { throw new InvalidOperationException(); }
+    }
+
+    public void Draw(Graphics graphics) {
+      Stopwatch sw = new Stopwatch();
+      sw.Start();
+
+      graphics.SmoothingMode = SmoothingMode.AntiAlias;
+      graphics.FillRectangle(Brushes.White, Viewport);
+
+      worldShape.Draw(graphics);
+
+      graphics.DrawRectangle(Pens.Black, 0, 0, Viewport.Width - 1, Viewport.Height - 1);
+
+      sw.Stop();
+      Trace.WriteLine(string.Format("Drawing time: {0:0.0}ms", sw.Elapsed.TotalMilliseconds));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CanvasUI.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CanvasUI.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CanvasUI.Designer.cs	(revision 1270)
@@ -0,0 +1,41 @@
+﻿namespace HeuristicLab.Visualization
+{
+    partial class CanvasUI
+    {
+        /// <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.SuspendLayout();
+          // 
+          // CanvasUI
+          // 
+          this.ResumeLayout(false);
+
+        }
+
+        #endregion
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CanvasUI.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CanvasUI.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CanvasUI.cs	(revision 1270)
@@ -0,0 +1,41 @@
+﻿using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization {
+  public partial class CanvasUI : Control {
+    private readonly Canvas canvas = new Canvas();
+
+    public CanvasUI() {
+      InitializeComponent();
+
+      DoubleBuffered = true;
+    }
+
+    public Canvas Canvas {
+      get { return canvas; }
+    }
+
+    protected override void OnPaint(PaintEventArgs pe) {
+      try {
+        Graphics g = pe.Graphics;
+
+        canvas.Viewport = ClientRectangle;
+        canvas.Draw(g);
+
+        base.OnPaint(pe);
+      } catch (Exception e) {
+       Trace.WriteLine(e);
+      }
+    }
+
+    protected override void OnResize(EventArgs e) {
+      Invalidate();
+
+      canvas.Viewport = ClientRectangle;
+
+      base.OnResize(e);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChangeType.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChangeType.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChangeType.cs	(revision 1270)
@@ -0,0 +1,7 @@
+namespace HeuristicLab.Visualization {
+  public enum ChangeType {
+    Add,
+    Modify,
+    Remove
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataModelBase.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataModelBase.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataModelBase.cs	(revision 1270)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Visualization {
+  public abstract class ChartDataModelBase : ItemBase, IChartDataModel{
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModel.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModel.cs	(revision 1270)
@@ -0,0 +1,198 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Xml;
+using HeuristicLab.Core;
+using System.Text;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization{
+  public delegate void DataRowAddedHandler(IDataRow row);
+  public delegate void DataRowRemovedHandler(IDataRow row);
+  public delegate void ModelChangedHandler();
+
+  public class ChartDataRowsModel : ChartDataModelBase, IChartDataRowsModel{
+    private string title = "Title";
+    //private string xAxisLabel;
+    private ILabelProvider labelProvider = new ContinuousLabelProvider("0.##");
+
+    public ILabelProvider XAxisLabelProvider {
+      get { return labelProvider; }
+      set{
+        this.labelProvider = value;
+        OnModelChanged();
+      }
+    }
+
+
+    private readonly List<IDataRow> rows = new List<IDataRow>();
+    //private readonly List<string> xLabels = new List<string>();
+
+    //public List<string> XLabels{
+    //  get { return xLabels; }
+    //}
+
+    public List<IDataRow> Rows{
+      get { return rows; }
+    }
+
+    public string Title {
+      get { return title; }
+      set {
+        title = value;
+        OnModelChanged();
+      }
+    }
+    //public string XAxisLabel {
+    //  get { return xAxisLabel; }
+    //  set {
+    //    xAxisLabel = value;
+    //    OnModelChanged();
+    //  }
+    //}
+
+    public override IView CreateView() {
+      return new LineChart(this);
+    }
+
+    //public void AddLabel(string label) {
+    //  xLabels.Add(label);
+    //  OnModelChanged();
+    //}
+
+    //public void AddLabel(string label, int index) {
+    //  xLabels[index] = label;
+    //  OnModelChanged();
+    //}
+
+    //public void AddLabels(string[] labels) {
+    //  foreach (var s in labels){
+    //    AddLabel(s);
+    //  }
+    //  //OnModelChanged();
+    //}
+
+    //public void AddLabels(string[] labels, int index) {
+    //  int i = 0;
+    //  foreach (var s in labels){
+    //    AddLabel(s, index + i);
+    //    i++;
+    //  }
+    //  //OnModelChanged();
+    //}
+
+    //public void ModifyLabel(string label, int index) {
+    //  xLabels[index] = label;
+    //  OnModelChanged();
+    //}
+
+    //public void ModifyLabels(string[] labels, int index) {
+    //  int i = 0;
+    //  foreach (var s in labels){
+    //    ModifyLabel(s, index + i);
+    //    i++;
+    //  }
+    //  //OnModelChanged();
+    //}
+
+    //public void RemoveLabel(int index) {
+    //  xLabels.RemoveAt(index);
+    //  OnModelChanged();
+    //}
+
+    //public void RemoveLabels(int index, int count) {
+    //  for (int i = index; i < index + count; i++ ){
+    //    RemoveLabel(i);
+    //  }
+    //  //OnModelChanged();
+    //}
+
+    public void AddDataRow(IDataRow row) {
+      rows.Add(row);
+      OnDataRowAdded(row);
+    }
+
+    public void RemoveDataRow(IDataRow row) {
+      rows.Remove(row);
+      OnDataRowRemoved(row);
+    }
+
+    public event ModelChangedHandler ModelChanged;
+
+    protected void OnModelChanged() {
+      if (ModelChanged != null) {
+        ModelChanged();
+      }
+    }
+
+    public event DataRowAddedHandler DataRowAdded;
+
+    protected void OnDataRowAdded(IDataRow row) {
+      if (DataRowAdded != null) {
+        DataRowAdded(row);
+      }
+    }
+
+    public event DataRowRemovedHandler DataRowRemoved;
+
+    protected void OnDataRowRemoved(IDataRow row) {
+      if (DataRowRemoved != null) {
+        DataRowRemoved(row);
+      }
+    }
+
+    public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {
+      XmlNode node = base.GetXmlNode(name, document, persistedObjects);
+
+      foreach (IDataRow row in rows) {
+        XmlNode columnElement = document.CreateNode(XmlNodeType.Element, "row", null);
+
+        XmlAttribute idAttr = document.CreateAttribute("label");
+        idAttr.Value = row.Label;
+        columnElement.Attributes.Append(idAttr);
+
+        StringBuilder builder = new StringBuilder();
+
+        for (int i = 0; i < row.Count; i++) {
+          if (i == 0) {
+            builder.Append(row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
+            //columnElement.InnerText += row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
+          } else {
+            builder.Append(";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat));
+            //columnElement.InnerText += ";" + row[i].ToString(CultureInfo.InvariantCulture.NumberFormat);
+          }
+        }
+        columnElement.InnerText += builder.ToString();
+        node.AppendChild(columnElement);
+      }
+      return node;    
+    }
+
+    public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {
+      base.Populate(node, restoredObjects);
+
+      foreach (XmlNode dataRow in node.ChildNodes) {
+        XmlAttributeCollection attrs = dataRow.Attributes;
+        XmlAttribute rowIdAttr = (XmlAttribute)attrs.GetNamedItem("label");
+        string rowLabel = rowIdAttr.Value;
+        DataRow row = new DataRow();
+        row.Label = rowLabel;
+
+        string[] tokens = dataRow.InnerText.Split(';');
+        double[] data = new double[tokens.Length];
+        for (int i = 0; i < data.Length; i++) {
+          if (tokens[i].Length != 0) {
+            if (
+              double.TryParse(tokens[i], NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, out data[i]) ==
+              false) {
+              throw new FormatException("Can't parse " + tokens[i] + " as double value.");
+            }
+          }
+        }
+        row.AddValues(data);
+
+        AddDataRow(row);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModelDataCollector.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModelDataCollector.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModelDataCollector.cs	(revision 1270)
@@ -0,0 +1,83 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Drawing;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Visualization {
+  /// <summary>
+  /// Collects values of specific variable names in a given scope and feeds them into a ChartDataRowsModel.
+  /// </summary>
+  public class ChartDataRowsModelDataCollector : OperatorBase {
+    /// <inheritdoc select="summary"/>
+    public override string Description {
+      get { return @"Collects values of specific variable names in a given scope and feeds them into a ChartDataRowsModel."; }
+    }
+
+    /// <summary>
+    /// Initializes a new instance of <see cref="ChartDataRowsModelDataCollector"/> with two variable infos 
+    /// (<c>VariableNames</c> and <c>Values</c>).
+    /// </summary>
+    public ChartDataRowsModelDataCollector() {
+      IVariableInfo variableNamesVariableInfo = new VariableInfo("VariableNames", "Names of variables whose values should be collected", typeof(ItemList<StringData>), VariableKind.In);
+      variableNamesVariableInfo.Local = true;
+      AddVariableInfo(variableNamesVariableInfo);
+      ItemList<StringData> variableNames = new ItemList<StringData>();
+      AddVariable(new Variable("VariableNames", variableNames));
+      AddVariableInfo(new VariableInfo("Model", "Data model in which the collected values should be fed.", typeof(IChartDataRowsModel), VariableKind.New | VariableKind.In | VariableKind.Out));
+    }
+
+    /// <summary>
+    /// Collects the values of a specified list of variable names in the given <paramref name="scope"/>.
+    /// </summary>
+    /// <param name="scope">The scope where to collect the values from.</param>
+    /// <returns><c>null</c>.</returns>
+    public override IOperation Apply(IScope scope) {
+      ItemList<StringData> names = GetVariableValue<ItemList<StringData>>("VariableNames", scope, false);
+      IChartDataRowsModel model = GetVariableValue<IChartDataRowsModel>("Model", scope, true, false);
+
+      // if necessary, add a new model
+      if (model == null) {
+        model = new ChartDataRowsModel();
+        for (int i = 0; i < names.Count; i++)
+          model.AddDataRow(new DataRow(names[i].Data));  // create new data row for each variable name to collect
+
+        IVariableInfo info = GetVariableInfo("Model");
+        if (info.Local)
+          AddVariable(new Variable(info.ActualName, model));
+        else
+          scope.AddVariable(new Variable(scope.TranslateName(info.FormalName), model));
+      }
+
+      // collect data values and feed them into the model
+      for (int i = 0; i < names.Count; i++) {
+        DoubleData data = scope.GetVariableValue(names[i].Data, true) as DoubleData;
+        if (data != null)
+          model.Rows[i].AddValue(data.Data);
+      }
+      return null;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModelDummy.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModelDummy.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ChartDataRowsModelDummy.cs	(revision 1270)
@@ -0,0 +1,42 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+
+namespace HeuristicLab.Visualization{
+  public class ChartDataRowsModelDummy : ChartDataRowsModel  {
+    
+    public ChartDataRowsModelDummy(){
+      Random rand = new Random();
+
+      // test rows
+
+      // TODO change to call new DataRow("Datarow 1");
+      DataRow row1 = new DataRow();
+      row1.Label = "Datarow 1";
+      row1.Color = Color.Red;
+      DataRow row2 = new DataRow();
+      row2.Label = "Datarow 2";
+      row2.Color = Color.Blue;
+      DataRow row3 = new DataRow();
+      row3.Label = "Datarow 3";
+      row3.Color = Color.DeepPink;
+
+      AddDataRow(row1);
+      AddDataRow(row2);
+      AddDataRow(row3);
+      
+      for (int i = 0; i < 10; i++){
+
+        // TODO Test AddDataRow mit bereits befüllter Row
+
+        row1.AddValue(rand.NextDouble() * 100);
+        row2.AddValues(new double[] { rand.NextDouble() * 100,  
+          rand.NextDouble() * 100 });
+        row3.AddValue(11.0);
+        // TODO after implemention of modifyValue: row1.ModifyValue(row1.getval[i]+100, i);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CompositeShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CompositeShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/CompositeShape.cs	(revision 1270)
@@ -0,0 +1,60 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public class CompositeShape : IShape {
+    private IShape parent;
+
+    protected readonly List<IShape> shapes = new List<IShape>();
+    protected RectangleD boundingBox = RectangleD.Empty;
+
+    public virtual void Draw(Graphics graphics) {
+      foreach (IShape shape in shapes) {
+        shape.Draw(graphics);
+      }
+    }
+
+    public RectangleD BoundingBox {
+      get {
+        if (shapes.Count == 0) {
+          throw new InvalidOperationException("No shapes, no bounding box.");
+        }
+
+        return boundingBox;
+      }
+    }
+
+    public RectangleD ClippingArea {
+      get { return Parent.ClippingArea; }
+    }
+
+    public Rectangle Viewport {
+      get { return Parent.Viewport; }
+    }
+
+    public IShape Parent {
+      get { return parent; }
+      set { parent = value; }
+    }
+
+    public void ClearShapes() {
+      shapes.Clear();
+      boundingBox = RectangleD.Empty;
+    }
+
+    public void AddShape(IShape shape) {
+      shape.Parent = this;
+
+      if (shapes.Count == 0) {
+        boundingBox = shape.BoundingBox;
+      } else {
+        boundingBox = new RectangleD(Math.Min(boundingBox.X1, shape.BoundingBox.X1),
+                                     Math.Min(boundingBox.Y1, shape.BoundingBox.Y1),
+                                     Math.Max(boundingBox.X2, shape.BoundingBox.X2),
+                                     Math.Max(boundingBox.Y2, shape.BoundingBox.Y2));
+      }
+      shapes.Add(shape);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/DataRow.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/DataRow.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/DataRow.cs	(revision 1270)
@@ -0,0 +1,226 @@
+using System;
+using System.Drawing;
+using System.Collections.Generic;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization {
+  public enum Action {
+    Added,
+    Modified,
+    Deleted
+  }
+
+  public delegate void DataRowChangedHandler(IDataRow row);
+  public delegate void ValuesChangedHandler(IDataRow row, double[] values, int index, Action action);
+  public delegate void ValueChangedHandler(IDataRow row, double value, int index, Action action);
+
+  public class DataRow : IDataRow {
+    private string label = "";
+    private Color color = Color.Black;
+    private int thickness = 2;
+    private DrawingStyle style = DrawingStyle.Solid;
+    private DataRowType lineType = DataRowType.Normal;
+    private readonly List<double> dataRow = new List<double>();
+
+    private ILabelProvider labelProvider = new ContinuousLabelProvider("0.##");
+
+    public DataRowType LineType{
+      get { return lineType; }
+      set { 
+        lineType = value;
+        OnDataRowChanged(this);
+      }
+    }
+
+    public ILabelProvider YAxisLabelProvider {
+      get { return labelProvider; }
+      set {
+        this.labelProvider = value;
+        OnDataRowChanged(this);
+      }
+    }
+
+    public DataRow() {
+    }
+    
+    public DataRow(string label) {
+      this.Label = label;
+    }
+
+    public DataRow(string label, Color color, int thickness, DrawingStyle style, List<double> dataRow) {
+     this.Label = label;
+      this.Color = color;
+      this.Thickness = thickness;
+      this.Style = style;
+      this.dataRow = dataRow;
+    }
+
+    public event DataRowChangedHandler DataRowChanged;
+
+    protected void OnDataRowChanged(IDataRow row) {
+      if (DataRowChanged != null) {
+        DataRowChanged(this);
+      }
+    }
+
+    public event ValuesChangedHandler ValuesChanged;
+
+    protected void OnValuesChanged(double[] values, int index, Action action) {
+      if (ValuesChanged != null) {
+        ValuesChanged(this, values, index, action);
+      }
+    }
+
+    public event ValueChangedHandler ValueChanged;
+
+    protected void OnValueChanged(double value, int index, Action action) {
+      if (ValueChanged != null) {
+        ValueChanged(this, value, index, action);
+      }
+    }
+
+  
+    public string Label {
+      get { return label; }
+      set {
+        label = value;
+        OnDataRowChanged(this);
+      }
+    }
+   
+
+    public Color Color {
+      get { return color; }
+      set {
+        color = value;
+        OnDataRowChanged(this);
+      }
+    }
+
+    public int Thickness {
+      get { return thickness; }
+      set {
+        thickness = value;
+        OnDataRowChanged(this);
+      }
+    }
+
+    public DrawingStyle Style {
+      get { return style; }
+      set {
+        style = value;
+        OnDataRowChanged(this);
+      }
+    }
+
+    public void AddValue(double value) {
+      dataRow.Add(value);
+      OnValueChanged(value, dataRow.Count - 1, Action.Added);
+    }
+
+    public void AddValue(double value, int index) {
+      //check if index is valid
+      if (index >= 0 && index < dataRow.Count) {
+        dataRow.Insert(index, value);
+        OnValueChanged(value, index, Action.Added);
+      } else {
+        throw new IndexOutOfRangeException();
+      }   
+    }
+
+    public void AddValues(double[] values) {
+      int startInd = dataRow.Count;
+
+      foreach (double d in values) {
+        dataRow.Add(d);
+      }
+      OnValuesChanged(values, startInd, Action.Added); 
+    }
+
+    public void AddValues(double[] values, int index) {
+      int j = index;
+
+      //check if index to start changes is valid
+      if (index >=0 && (index + values.Length) < dataRow.Count) {
+        foreach (double d in values) {
+          dataRow.Insert(j, d);
+          j++;
+        }
+        OnValuesChanged(values, index, Action.Added);
+      } else {
+        throw new IndexOutOfRangeException();
+      }
+    }
+
+    public void ModifyValue(double value, int index) {
+      //check if index is valid
+      if (index >= 0 && index < dataRow.Count) {
+        dataRow[index] = value;
+        OnValueChanged(value, index, Action.Modified);
+      } else {
+        throw new IndexOutOfRangeException();
+      }
+    }
+
+    public void ModifyValues(double[] values, int index) {
+      int startInd = index;
+      int modInd = index;
+
+      //check if index to start modification is valid
+      if (startInd >=0 && startInd + values.Length < dataRow.Count) {
+        foreach (double d in values) {
+          dataRow[modInd] = d;
+          modInd++;
+        }
+        OnValuesChanged(values, startInd, Action.Modified);
+      } else {
+        throw new IndexOutOfRangeException();
+      }
+    }
+
+    public void RemoveValue(int index) {
+      double remVal = dataRow[index];
+      //check if index is valid
+      if (index >= 0 && index < dataRow.Count) {
+        dataRow.RemoveAt(index);
+        OnValueChanged(remVal, index, Action.Deleted);
+      } else {
+        throw new IndexOutOfRangeException();
+      }
+    }
+
+    public void RemoveValues(int index, int count) {
+      double[] remValues = new double[count]; //removed values
+      int j = 0;
+
+      //check if count is valid
+      if (count > 0) {
+        //check if index is valid
+        if ((index >= 0) && (index + count <= dataRow.Count)) {
+          for (int i = index; i < (index + count); i++) {
+            remValues.SetValue(i, j);
+            dataRow.RemoveAt(i);
+            j++;
+          }
+          OnValuesChanged(remValues, index, Action.Deleted);
+        } else {
+          throw new IndexOutOfRangeException();
+        }
+      } else {
+        throw new Exception("parameter count must be > 0!");
+      }
+    }
+
+    public int Count {
+      get { return dataRow.Count; }
+    }
+
+    public double this[int index] {
+      get { return dataRow[index]; }
+      set {
+        dataRow[index] = value;
+        OnValueChanged(value, index, Action.Modified);
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/DrawingStyle.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/DrawingStyle.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/DrawingStyle.cs	(revision 1270)
@@ -0,0 +1,5 @@
+namespace HeuristicLab.Visualization {
+  public enum DrawingStyle {
+    Solid, Dashed
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Grid.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Grid.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Grid.cs	(revision 1270)
@@ -0,0 +1,46 @@
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public class Grid : WorldShape {
+    public override void Draw(Graphics graphics) {
+      ClearShapes();
+
+      foreach (double y in AxisTicks.GetTicks(YAxis.PixelsPerInterval,
+                                              Parent.Viewport.Height,
+                                              ClippingArea.Height,
+                                              ClippingArea.Y1)) {
+        LineShape line = new LineShape(ClippingArea.X1, y,
+                                       ClippingArea.X2, y,
+                                       Color.LightBlue, 1,
+                                       DrawingStyle.Dashed);
+        AddShape(line);
+      }
+
+      foreach (double x in AxisTicks.GetTicks(XAxis.PixelsPerInterval,
+                                              Parent.Viewport.Width,
+                                              ClippingArea.Width,
+                                              ClippingArea.X1)) {
+        LineShape line = new LineShape(x, ClippingArea.Y1,
+                                       x, ClippingArea.Y2,
+                                       Color.LightBlue, 1,
+                                       DrawingStyle.Dashed);
+        AddShape(line);
+      }
+
+      LineShape lineZeroX = new LineShape(0, ClippingArea.Y1,
+                                          0, ClippingArea.Y2,
+                                          Color.LightBlue, 3,
+                                          DrawingStyle.Dashed);
+
+      LineShape lineZeroY = new LineShape(ClippingArea.X1, 0,
+                                          ClippingArea.X2, 0,
+                                          Color.LightBlue, 3,
+                                          DrawingStyle.Dashed);
+
+      AddShape(lineZeroX);
+      AddShape(lineZeroY);
+
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HeuristicLab.Visualization.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HeuristicLab.Visualization.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HeuristicLab.Visualization.csproj	(revision 1270)
@@ -0,0 +1,171 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Visualization</RootNamespace>
+    <AssemblyName>HeuristicLab.Visualization-3.2</AssemblyName>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>bin\Release\HeuristicLab.Visualization-3.2.XML</DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <DocumentationFile>bin\Release\HeuristicLab.Visualization-3.2.XML</DocumentationFile>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data.DataSetExtensions">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AxisTicks.cs" />
+    <Compile Include="Canvas.cs" />
+    <Compile Include="CanvasUI.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="CanvasUI.Designer.cs">
+      <DependentUpon>CanvasUI.cs</DependentUpon>
+    </Compile>
+    <Compile Include="ChangeType.cs" />
+    <Compile Include="ChartDataModelBase.cs" />
+    <Compile Include="ChartDataRowsModel.cs" />
+    <Compile Include="ChartDataRowsModelDummy.cs" />
+    <Compile Include="CompositeShape.cs" />
+    <Compile Include="ChartDataRowsModelDataCollector.cs" />
+    <Compile Include="LabelProvider\ContinuousLabelProvider.cs" />
+    <Compile Include="LabelProvider\DiscreteLabelProvider.cs" />
+    <Compile Include="Grid.cs" />
+    <Compile Include="HorizontalLineShape.cs" />
+    <Compile Include="LabelProvider\ILabelProvider.cs" />
+    <Compile Include="IMouseEventListener.cs" />
+    <Compile Include="Legend\LegendItem.cs" />
+    <Compile Include="Options\OptionsDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Options\OptionsDialog.Designer.cs">
+      <DependentUpon>OptionsDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="PanListener.cs" />
+    <Compile Include="LabelProvider\StringLabelProvider.cs" />
+    <Compile Include="TextShape.cs" />
+    <Compile Include="Legend\LegendShape.cs" />
+    <Compile Include="DataRow.cs" />
+    <Compile Include="DrawingStyle.cs" />
+    <Compile Include="HeuristicLabVisualizationPlugin.cs" />
+    <Compile Include="IChartDataModel.cs" />
+    <Compile Include="IChartDataRowsModel.cs" />
+    <Compile Include="IDataRow.cs" />
+    <Compile Include="IShape.cs" />
+    <Compile Include="LineChart.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="LineChart.Designer.cs">
+      <DependentUpon>LineChart.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LineShape.cs" />
+    <Compile Include="Offset.cs" />
+    <Compile Include="PointD.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="RectangleD.cs" />
+    <Compile Include="RectangleShape.cs" />
+    <Compile Include="SizeD.cs" />
+    <Compile Include="Transform.cs" />
+    <Compile Include="Translate.cs" />
+    <Compile Include="WorldShape.cs" />
+    <Compile Include="XAxis.cs" />
+    <Compile Include="YAxis.cs" />
+    <Compile Include="ZoomListener.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\AssemblyInfo.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.Core\HeuristicLab.Core.csproj">
+      <Project>{F43B59AB-2B8C-4570-BC1E-15592086517C}</Project>
+      <Name>HeuristicLab.Core</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.Data\HeuristicLab.Data.csproj">
+      <Project>{F473D9AF-3F09-4296-9F28-3C65118DAFFA}</Project>
+      <Name>HeuristicLab.Data</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="LineChart.resx">
+      <DependentUpon>LineChart.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Options\OptionsDialog.resx">
+      <DependentUpon>OptionsDialog.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HeuristicLabVisualizationPlugin.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HeuristicLabVisualizationPlugin.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HeuristicLabVisualizationPlugin.cs	(revision 1270)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Visualization {
+  [ClassInfo(Name = "HeuristicLab.Visualization-3.2")]
+  [PluginFile(Filename = "HeuristicLab.Visualization-3.2.dll", Filetype = PluginFileType.Assembly)]
+  [Dependency(Dependency = "HeuristicLab.Core-3.2")]
+  public class HeuristicLabVisualizationPlugin : PluginBase {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HorizontalLineShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HorizontalLineShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/HorizontalLineShape.cs	(revision 1270)
@@ -0,0 +1,25 @@
+﻿using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public class HorizontalLineShape : LineShape {
+    /// <summary>
+    /// Initializes the LineShape.
+    /// </summary>
+    /// <param name="x1">x coordinate of left lineEndPoind</param>
+    /// <param name="y1">y coordinate of left lineEndPoind</param>
+    /// <param name="x2">x coordinate of right lineEndPoind</param>
+    /// <param name="y2">y coordinate of right lineEndPoind</param>
+    /// <param name="color">color for the LineShape</param>
+    /// <param name="thickness">tickness of the line in pixels</param>
+    /// <param name="drawingStyle">drawing style of the line (solid, dashed, dotted,...)</param>
+    public HorizontalLineShape(double x1, double y1, double x2, double y2, Color color, int thickness,
+                               DrawingStyle drawingStyle) : base(x1, y1, x2, y2, color, thickness, drawingStyle) {}
+
+    public override void Draw(Graphics graphics) {
+      X1 = Parent.ClippingArea.X1;
+      X2 = Parent.ClippingArea.X2;
+      Y2 = Y1;
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IChartDataModel.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IChartDataModel.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IChartDataModel.cs	(revision 1270)
@@ -0,0 +1,10 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Visualization {
+  interface IChartDataModel : IItem {
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IChartDataRowsModel.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IChartDataRowsModel.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IChartDataRowsModel.cs	(revision 1270)
@@ -0,0 +1,29 @@
+﻿using System.Collections.Generic;
+using HeuristicLab.Core;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization {
+  public interface IChartDataRowsModel : IItem {
+    string Title { get; set; }
+    //string XAxisLabel { get; set; }
+    //List<string> XLabels { get; }
+    List<IDataRow> Rows { get; }
+    ILabelProvider XAxisLabelProvider { get; set; }
+
+    void AddDataRow(IDataRow row);
+    void RemoveDataRow(IDataRow row);
+
+    //void AddLabel(string label);
+    //void AddLabel(string label, int index);
+    //void AddLabels(string[] labels);
+    //void AddLabels(string[] labels, int index);
+    //void ModifyLabel(string label, int index);
+    //void ModifyLabels(string[] labels, int index);
+    //void RemoveLabel(int index);
+    //void RemoveLabels(int index, int count);
+
+    event ModelChangedHandler ModelChanged;
+    event DataRowAddedHandler DataRowAdded;
+    event DataRowRemovedHandler DataRowRemoved;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IDataRow.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IDataRow.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IDataRow.cs	(revision 1270)
@@ -0,0 +1,40 @@
+using System.Drawing;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization {
+
+  public enum DataRowType {
+    Normal, SingleValue
+  }
+  
+  public interface IDataRow {
+    string Label { get; set; }
+    Color Color { get; set; }
+    int Thickness { get; set; }
+    DrawingStyle Style { get; set; }
+    DataRowType LineType { get; set; }
+    ILabelProvider YAxisLabelProvider { get; set; }
+
+    /// <summary>
+    /// Raised when data row data changed. Should cause redraw in the view.
+    /// </summary>
+    event DataRowChangedHandler DataRowChanged;
+
+    void AddValue(double value);
+    void AddValue(double value, int index);
+    void AddValues(double[] values);
+    void AddValues(double[] values, int index);
+
+    void ModifyValue(double value, int index);
+    void ModifyValues(double[] values, int index);
+
+    void RemoveValue(int index);
+    void RemoveValues(int index, int count);
+
+    int Count { get; }
+    double this[int index] { get; set; }
+
+    event ValuesChangedHandler ValuesChanged;
+    event ValueChangedHandler ValueChanged;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IMouseEventListener.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IMouseEventListener.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IMouseEventListener.cs	(revision 1270)
@@ -0,0 +1,12 @@
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization {
+  public interface IMouseEventListener {
+    void MouseMove(object sender, MouseEventArgs e);
+    void MouseUp(object sender, MouseEventArgs e);
+  }
+
+  public delegate void MoveHandler(Point startPoint, Point endPoint);
+  public delegate void RectangleHandler(Rectangle rectangle);
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/IShape.cs	(revision 1270)
@@ -0,0 +1,39 @@
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  /// <summary>
+  /// This is the base interface that has to be implemented by all shapes.
+  /// 
+  /// View port
+  ///   The view port is the available drawing area on the screen.
+  ///   It is specified in the GDI coordinate system.
+  /// 
+  /// Clipping area
+  ///   The clipping area is the range of values visible on the view port.
+  ///   Values outside this area will not be visible (they "get clipped").
+  ///   It can either be inherited from the parent, or it can be overriden
+  ///   to create distorted realities (see world shapes).
+  ///   It is specified in a world coordinate system.
+  /// 
+  /// Bounding box
+  ///   The bounding box is the location and the size of a shape on its parent.
+  ///   It is specified in the parent's world coordinate system.
+  /// </summary>
+  public interface IShape {
+    /// <summary>
+    /// Draws the shape
+    /// </summary>
+    /// <param name="graphics">The Graphics object used to draw the shape</param>
+    void Draw(Graphics graphics);
+
+    /// <summary>
+    /// The shape's bounding box
+    /// </summary>
+    RectangleD BoundingBox { get; }
+
+    RectangleD ClippingArea { get; }
+    Rectangle Viewport { get; }
+
+    IShape Parent { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/ContinuousLabelProvider.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/ContinuousLabelProvider.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/ContinuousLabelProvider.cs	(revision 1270)
@@ -0,0 +1,17 @@
+using System.Globalization;
+
+namespace HeuristicLab.Visualization.LabelProvider {
+  public class ContinuousLabelProvider : ILabelProvider {
+    private readonly string format;
+
+    public ContinuousLabelProvider() {}
+
+    public ContinuousLabelProvider(string format) {
+      this.format = format;
+    }
+
+    public string GetLabel(double value) {
+      return value.ToString(format, CultureInfo.InvariantCulture);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/DiscreteLabelProvider.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/DiscreteLabelProvider.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/DiscreteLabelProvider.cs	(revision 1270)
@@ -0,0 +1,15 @@
+using System;
+
+namespace HeuristicLab.Visualization.LabelProvider {
+  public class DiscreteLabelProvider : ILabelProvider {
+    public string GetLabel(double value) {
+      int index = (int)Math.Round(value);
+      double delta = Math.Abs(index - value);
+
+      if (delta < 1e-10)
+        return index.ToString();
+      else
+        return string.Empty;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/ILabelProvider.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/ILabelProvider.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/ILabelProvider.cs	(revision 1270)
@@ -0,0 +1,5 @@
+namespace HeuristicLab.Visualization.LabelProvider {
+  public interface ILabelProvider {
+    string GetLabel(double value);
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/StringLabelProvider.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/StringLabelProvider.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LabelProvider/StringLabelProvider.cs	(revision 1270)
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization.LabelProvider {
+  public class StringLabelProvider : ILabelProvider {
+    private readonly Dictionary<int, string> labels = new Dictionary<int, string>();
+
+    public void ClearLabels() {
+      labels.Clear();
+    }
+
+    public void SetLabel(int index, string label) {
+      labels[index] = label;
+    }
+
+    public string GetLabel(double value) {
+      int index = (int)Math.Round(value);
+      double delta = Math.Abs(index - value);
+
+      string label;
+
+      if (delta < 1e-10 && labels.TryGetValue(index, out label))
+        return label;
+      else
+        return string.Empty;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Legend/LegendItem.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Legend/LegendItem.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Legend/LegendItem.cs	(revision 1270)
@@ -0,0 +1,15 @@
+using System.Drawing;
+
+namespace HeuristicLab.Visualization.Legend {
+  public class LegendItem {
+    public LegendItem(string label, Color color, int thickness) {
+      Label = label;
+      Color = color;
+      Thickness = thickness;
+    }
+
+    public string Label { get; set; }
+    public Color Color { get; set; }
+    public int Thickness { get; set; }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Legend/LegendShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Legend/LegendShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Legend/LegendShape.cs	(revision 1270)
@@ -0,0 +1,34 @@
+using System.Collections.Generic;
+using HeuristicLab.Visualization.Legend;
+
+namespace HeuristicLab.Visualization.Legend {
+  public class LegendShape : WorldShape {
+    private readonly IList<LegendItem> legendItems = new List<LegendItem>();
+    
+    public LegendShape() {
+      CreateLegend();
+    }
+
+    public void CreateLegend() {
+      ClearShapes();
+      double y = ClippingArea.Y2;
+      foreach (LegendItem item in legendItems) {
+        AddShape(new LineShape(10, y - 10, 30, y - 10, item.Color, item.Thickness, DrawingStyle.Solid));
+        AddShape(new TextShape(35, y, item.Label));
+        y -= 15;
+      }
+    }
+
+    public void AddLegendItem(LegendItem item) {
+      legendItems.Add(item);
+    }
+
+    public void RemoveLegendItem(LegendItem item) {
+      legendItems.Remove(item);
+    }
+
+    public void ClearLegendItems() {
+      legendItems.Clear();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.Designer.cs	(revision 1270)
@@ -0,0 +1,87 @@
+﻿using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization
+{
+    partial class LineChart
+    {
+        /// <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.canvasUI = new HeuristicLab.Visualization.CanvasUI();
+          this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
+          this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+          this.contextMenuStrip1.SuspendLayout();
+          this.SuspendLayout();
+          // 
+          // canvasUI
+          // 
+          this.canvasUI.Dock = System.Windows.Forms.DockStyle.Fill;
+          this.canvasUI.Location = new System.Drawing.Point(0, 0);
+          this.canvasUI.Name = "canvasUI";
+          this.canvasUI.Size = new System.Drawing.Size(551, 373);
+          this.canvasUI.TabIndex = 0;
+          this.canvasUI.Text = "canvas";
+          this.canvasUI.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.canvasUI1_MouseWheel);
+          this.canvasUI.MouseMove += new System.Windows.Forms.MouseEventHandler(this.canvasUI_MouseMove);
+          this.canvasUI.ContextMenuStripChanged += new System.EventHandler(this.optionsToolStripMenuItem_Click);
+          this.canvasUI.MouseDown += new System.Windows.Forms.MouseEventHandler(this.canvasUI1_MouseDown);
+          this.canvasUI.MouseUp += new System.Windows.Forms.MouseEventHandler(this.canvasUI_MouseUp);
+          this.canvasUI.KeyDown += new System.Windows.Forms.KeyEventHandler(this.canvasUI1_KeyDown);
+          // 
+          // contextMenuStrip1
+          // 
+          this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.optionsToolStripMenuItem});
+          this.contextMenuStrip1.Name = "contextMenuStrip1";
+          this.contextMenuStrip1.Size = new System.Drawing.Size(123, 26);
+          // 
+          // optionsToolStripMenuItem
+          // 
+          this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
+          this.optionsToolStripMenuItem.Size = new System.Drawing.Size(122, 22);
+          this.optionsToolStripMenuItem.Text = "Options";
+          this.optionsToolStripMenuItem.Click += new System.EventHandler(this.optionsToolStripMenuItem_Click);
+          // 
+          // LineChart
+          // 
+          this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+          this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+          this.Controls.Add(this.canvasUI);
+          this.Name = "LineChart";
+          this.Size = new System.Drawing.Size(551, 373);
+          this.contextMenuStrip1.ResumeLayout(false);
+          this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private CanvasUI canvasUI;
+        private ContextMenuStrip contextMenuStrip1;
+        private ToolStripMenuItem optionsToolStripMenuItem;
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.cs	(revision 1270)
@@ -0,0 +1,460 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Windows.Forms;
+using HeuristicLab.Core;
+using HeuristicLab.Visualization.Legend;
+using HeuristicLab.Visualization.Options;
+
+namespace HeuristicLab.Visualization {
+  public partial class LineChart : ViewBase {
+    private readonly IChartDataRowsModel model;
+    private readonly Canvas canvas;
+
+    private int maxDataRowCount;
+    private double minDataValue;
+    private double maxDataValue;
+
+    private readonly TextShape titleShape;
+    private readonly LinesShape linesShape;
+    private readonly LegendShape legendShape;
+
+    private readonly XAxis xAxis;
+    private readonly YAxis yAxis;
+    private readonly Grid grid;
+
+    private readonly Stack<RectangleD> clippingAreaHistory = new Stack<RectangleD>();
+    private readonly WorldShape userInteractionShape;
+    private readonly RectangleShape rectangleShape;
+    private IMouseEventListener mouseEventListener;
+    private bool zoomToFullView;
+
+    /// <summary>
+    /// This constructor shouldn't be called. Only required for the designer.
+    /// </summary>
+    public LineChart() {
+      InitializeComponent();
+    }
+
+    /// <summary>
+    /// Initializes the chart.
+    /// </summary>
+    /// <param name="model">Referenz to the model, for data</param>
+    public LineChart(IChartDataRowsModel model) : this() {
+      if (model == null) {
+        throw new NullReferenceException("Model cannot be null.");
+      }
+
+      canvas = canvasUI.Canvas;
+
+      grid = new Grid();
+      canvas.AddShape(grid);
+
+      linesShape = new LinesShape();
+      canvas.AddShape(linesShape);
+
+      xAxis = new XAxis();
+      canvas.AddShape(xAxis);
+
+      yAxis = new YAxis();
+      canvas.AddShape(yAxis);
+
+      titleShape = new TextShape(0, 0, model.Title, 15);
+      canvas.AddShape(titleShape);
+
+      //  horizontalLineShape = new HorizontalLineShape(this.maxDataValue, Color.Yellow, 4, DrawingStyle.Solid);
+      //  root.AddShape(horizontalLineShape);
+
+      legendShape = new LegendShape();
+      canvas.AddShape(legendShape);
+
+      userInteractionShape = new WorldShape();
+      canvas.AddShape(userInteractionShape);
+
+      rectangleShape = new RectangleShape(0, 0, 0, 0, Color.Blue);
+      rectangleShape.Opacity = 50;
+
+      maxDataRowCount = 0;
+      this.model = model;
+      Item = model;
+
+      UpdateLayout();
+      canvasUI.Resize += delegate { UpdateLayout(); };
+
+      //The whole data rows are shown per default
+      ZoomToFullView();
+    }
+
+    /// <summary>
+    /// Layout management - arranges the inner shapes.
+    /// </summary>
+    private void UpdateLayout() {
+      titleShape.X = 10;
+      titleShape.Y = canvasUI.Height - 10;
+
+      const int yAxisWidth = 100;
+      const int xAxisHeight = 20;
+
+      linesShape.BoundingBox = new RectangleD(yAxisWidth,
+                                              xAxisHeight,
+                                              canvasUI.Width,
+                                              canvasUI.Height);
+
+      userInteractionShape.BoundingBox = linesShape.BoundingBox;
+      userInteractionShape.ClippingArea = new RectangleD(0, 0, userInteractionShape.BoundingBox.Width, userInteractionShape.BoundingBox.Height);
+
+      grid.BoundingBox = linesShape.BoundingBox;
+
+
+      yAxis.BoundingBox = new RectangleD(0,
+                                         linesShape.BoundingBox.Y1,
+                                         linesShape.BoundingBox.X1,
+                                         linesShape.BoundingBox.Y2);
+
+      xAxis.BoundingBox = new RectangleD(linesShape.BoundingBox.X1,
+                                         0,
+                                         linesShape.BoundingBox.X2,
+                                         linesShape.BoundingBox.Y1);
+
+      legendShape.BoundingBox = new RectangleD(10, 10, 110, canvasUI.Height - 50);
+      legendShape.ClippingArea = new RectangleD(0, 0, legendShape.BoundingBox.Width,
+                                                legendShape.BoundingBox.Height);
+    }
+
+    private void optionsToolStripMenuItem_Click(object sender, EventArgs e) {
+      var optionsdlg = new OptionsDialog(this.model);
+      optionsdlg.ShowDialog(this);
+    }
+
+    public void OnDataRowChanged(IDataRow row) {
+      foreach (LineShape ls in rowToLineShapes[row]) {
+        ls.LSColor = row.Color;
+        ls.LSThickness = row.Thickness;
+        ls.LSDrawingStyle = row.Style;
+      }
+      canvasUI.Invalidate();
+    }
+
+    #region Add-/RemoveItemEvents
+
+    private readonly IDictionary<IDataRow, List<LineShape>> rowToLineShapes =
+      new Dictionary<IDataRow, List<LineShape>>();
+
+    protected override void AddItemEvents() {
+      base.AddItemEvents();
+
+      model.DataRowAdded += OnDataRowAdded;
+      model.DataRowRemoved += OnDataRowRemoved;
+      model.ModelChanged += OnModelChanged;
+
+      foreach (IDataRow row in model.Rows) {
+        OnDataRowAdded(row);
+      }
+    }
+
+    protected override void RemoveItemEvents() {
+      base.RemoveItemEvents();
+
+      model.DataRowAdded -= OnDataRowAdded;
+      model.DataRowRemoved -= OnDataRowRemoved;
+      model.ModelChanged -= OnModelChanged;
+    }
+
+    private void OnDataRowAdded(IDataRow row) {
+      row.ValueChanged += OnRowValueChanged;
+      row.ValuesChanged += OnRowValuesChanged;
+      row.DataRowChanged += OnDataRowChanged;
+
+      if (row.Count > maxDataRowCount) {
+        maxDataRowCount = row.Count;
+        //   UpdateSingleValueRows();
+      }
+
+      legendShape.AddLegendItem(new LegendItem(row.Label, row.Color, row.Thickness));
+      legendShape.CreateLegend();
+      InitLineShapes(row);
+    }
+
+    private void OnDataRowRemoved(IDataRow row) {
+      row.ValueChanged -= OnRowValueChanged;
+      row.ValuesChanged -= OnRowValuesChanged;
+      row.DataRowChanged -= OnDataRowChanged;
+    }
+
+    #endregion
+
+    public void ZoomToFullView() {
+      RectangleD newClippingArea = new RectangleD(-0.1,
+                                                  minDataValue - ((maxDataValue - minDataValue)*0.05),
+                                                  maxDataRowCount - 0.9,
+                                                  maxDataValue + ((maxDataValue - minDataValue)*0.05));
+
+      SetLineClippingArea(newClippingArea, true);
+
+      zoomToFullView = true;
+    }
+
+    /// <summary>
+    /// Sets the clipping area of the data to display.
+    /// </summary>
+    /// <param name="clippingArea"></param>
+    /// <param name="pushToHistoryStack"></param>
+    private void SetLineClippingArea(RectangleD clippingArea, bool pushToHistoryStack) {
+      zoomToFullView = false;
+
+      if (pushToHistoryStack) {
+        int count = clippingAreaHistory.Count;
+
+        if (count > 40) {
+          RectangleD[] clippingAreas = clippingAreaHistory.ToArray();
+          clippingAreaHistory.Clear();
+
+          for (int i = count - 20; i < count; i++) {
+            clippingAreaHistory.Push(clippingAreas[i]);
+          }
+        }
+
+        clippingAreaHistory.Push(clippingArea);
+      }
+
+      linesShape.ClippingArea = clippingArea;
+
+      grid.ClippingArea = linesShape.ClippingArea;
+
+      // horizontalLineShape.ClippingArea = linesShape.ClippingArea;
+
+
+      xAxis.ClippingArea = new RectangleD(linesShape.ClippingArea.X1,
+                                          xAxis.BoundingBox.Y1,
+                                          linesShape.ClippingArea.X2,
+                                          xAxis.BoundingBox.Y2);
+
+      yAxis.ClippingArea = new RectangleD(yAxis.BoundingBox.X1,
+                                          linesShape.ClippingArea.Y1,
+                                          yAxis.BoundingBox.X2,
+                                          linesShape.ClippingArea.Y2);
+
+      canvasUI.Invalidate();
+    }
+
+    private void InitLineShapes(IDataRow row) {
+      var lineShapes = new List<LineShape>();
+      if (rowToLineShapes.Count == 0) {
+        minDataValue = Double.PositiveInfinity;
+        maxDataValue = Double.NegativeInfinity;
+      }
+      if ((row.Count > 0)) {
+        maxDataValue = Math.Max(row[0], maxDataValue);
+        minDataValue = Math.Min(row[0], minDataValue);
+      }
+      if ((row.LineType == DataRowType.SingleValue)) {
+        if (row.Count > 0) {
+          LineShape lineShape = new HorizontalLineShape(0, row[0], double.MaxValue, row[0], row.Color, row.Thickness,
+                                                        row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+        }
+      } else {
+        for (int i = 1; i < row.Count; i++) {
+          var lineShape = new LineShape(i - 1, row[i - 1], i, row[i], row.Color, row.Thickness, row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+          maxDataValue = Math.Max(row[i], maxDataValue);
+          minDataValue = Math.Min(row[i], minDataValue);
+        }
+      }
+      //horizontalLineShape.YVal = maxDataValue;
+      rowToLineShapes[row] = lineShapes;
+
+      ZoomToFullView();
+    }
+
+    // TODO use action parameter
+    private void OnRowValueChanged(IDataRow row, double value, int index, Action action) {
+      List<LineShape> lineShapes = rowToLineShapes[row];
+      maxDataValue = Math.Max(value, maxDataValue);
+      minDataValue = Math.Min(value, minDataValue);
+      if (row.LineType == DataRowType.SingleValue) {
+        if (action == Action.Added) {
+          LineShape lineShape = new HorizontalLineShape(0, row[0], double.MaxValue, row[0], row.Color, row.Thickness,
+                                                        row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+        } else {
+          // lineShapes[0].X2 = maxDataRowCount;
+          lineShapes[0].Y1 = value;
+          lineShapes[0].Y2 = value;
+        }
+      } else {
+        //  horizontalLineShape.YVal = maxDataValue;
+        if (index > lineShapes.Count + 1) {
+          throw new NotImplementedException();
+        }
+
+        // new value was added
+        if (index > 0 && index == lineShapes.Count + 1) {
+          if (maxDataRowCount < row.Count) {
+            maxDataRowCount = row.Count;
+            //  UpdateSingleValueRows();
+          }
+          var lineShape = new LineShape(index - 1, row[index - 1], index, row[index], row.Color, row.Thickness,
+                                        row.Style);
+          lineShapes.Add(lineShape);
+          // TODO each DataRow needs its own WorldShape so Y Axes can be zoomed independently.
+          linesShape.AddShape(lineShape);
+        }
+
+        // not the first value
+        if (index > 0) {
+          lineShapes[index - 1].Y2 = value;
+        }
+
+        // not the last value
+        if (index > 0 && index < row.Count - 1) {
+          lineShapes[index].Y1 = value;
+        }
+      }
+
+      ZoomToFullView();
+    }
+
+    // TODO remove (see ticket #501)
+    public IList<IDataRow> GetRows() {
+      return model.Rows;
+    }
+
+
+    // TODO use action parameter
+    private void OnRowValuesChanged(IDataRow row, double[] values, int index, Action action) {
+      foreach (double value in values) {
+        OnRowValueChanged(row, value, index++, action);
+      }
+    }
+
+    private void OnModelChanged() {
+      titleShape.Text = model.Title;
+
+      canvasUI.Invalidate();
+    }
+
+    #region Begin-/EndUpdate
+
+    private int beginUpdateCount;
+
+    public void BeginUpdate() {
+      beginUpdateCount++;
+    }
+
+    public void EndUpdate() {
+      if (beginUpdateCount == 0) {
+        throw new InvalidOperationException("Too many EndUpdates.");
+      }
+
+      beginUpdateCount--;
+
+      if (beginUpdateCount == 0) {
+        canvasUI.Invalidate();
+      }
+    }
+
+    #endregion
+
+    #region Zooming / Panning
+
+    private void Pan(Point startPoint, Point endPoint) {
+      RectangleD clippingArea = CalcPanClippingArea(startPoint, endPoint);
+      SetLineClippingArea(clippingArea, false);
+    }
+
+    private void PanEnd(Point startPoint, Point endPoint) {
+      RectangleD clippingArea = CalcPanClippingArea(startPoint, endPoint);
+      SetLineClippingArea(clippingArea, true);
+    }
+
+    private RectangleD CalcPanClippingArea(Point startPoint, Point endPoint) {
+      return Translate.ClippingArea(startPoint, endPoint, linesShape.ClippingArea, linesShape.Viewport);
+    }
+
+    private void SetClippingArea(Rectangle rectangle) {
+      RectangleD clippingArea = Transform.ToWorld(rectangle, linesShape.Viewport, linesShape.ClippingArea);
+
+      SetLineClippingArea(clippingArea, true);
+      userInteractionShape.RemoveShape(rectangleShape);
+    }
+
+    private void DrawRectangle(Rectangle rectangle) {
+      rectangleShape.Rectangle = Transform.ToWorld(rectangle, userInteractionShape.Viewport, userInteractionShape.ClippingArea);
+      canvasUI.Invalidate();
+    }
+
+    private void canvasUI1_KeyDown(object sender, KeyEventArgs e) {
+      if (e.KeyCode == Keys.Back && clippingAreaHistory.Count > 1) {
+        clippingAreaHistory.Pop();
+
+        RectangleD clippingArea = clippingAreaHistory.Peek();
+
+        SetLineClippingArea(clippingArea, false);
+      }
+    }
+
+    private void canvasUI1_MouseDown(object sender, MouseEventArgs e) {
+      Focus();
+
+      if (e.Button == MouseButtons.Right) {
+        contextMenuStrip1.Show(PointToScreen(e.Location));
+      } else if (e.Button == MouseButtons.Left) {
+        if (ModifierKeys == Keys.None) {
+          PanListener panListener = new PanListener(e.Location);
+          panListener.Pan += Pan;
+          panListener.PanEnd += PanEnd;
+
+          mouseEventListener = panListener;
+        } else if (ModifierKeys == Keys.Control) {
+          ZoomListener zoomListener = new ZoomListener(e.Location);
+          zoomListener.DrawRectangle += DrawRectangle;
+          zoomListener.SetClippingArea += SetClippingArea;
+
+          rectangleShape.Rectangle = RectangleD.Empty;
+          userInteractionShape.AddShape(rectangleShape);
+
+          mouseEventListener = zoomListener;
+        }
+      }
+    }
+
+    private void canvasUI_MouseMove(object sender, MouseEventArgs e) {
+      if (mouseEventListener != null) {
+        mouseEventListener.MouseMove(sender, e);
+      }
+    }
+
+    private void canvasUI_MouseUp(object sender, MouseEventArgs e) {
+      if (mouseEventListener != null) {
+        mouseEventListener.MouseUp(sender, e);
+      }
+
+      mouseEventListener = null;
+    }
+
+    private void canvasUI1_MouseWheel(object sender, MouseEventArgs e) {
+      if (ModifierKeys == Keys.Control) {
+        double zoomFactor = (e.Delta > 0) ? 0.9 : 1.1;
+
+        RectangleD clippingArea = ZoomListener.ZoomClippingArea(linesShape.ClippingArea, zoomFactor);
+
+        SetLineClippingArea(clippingArea, true);
+      }
+    }
+
+    #endregion
+
+    #region Nested type: LinesShape
+
+    internal class LinesShape : WorldShape {}
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineChart.resx	(revision 1270)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/LineShape.cs	(revision 1270)
@@ -0,0 +1,128 @@
+﻿using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace HeuristicLab.Visualization {
+  public class LineShape : IShape {
+    private IShape parent;
+    private RectangleD boundingBox;
+
+    private Color color;
+    private int thickness;
+    private DrawingStyle drawingStyle;
+
+    private Pen pen;
+
+    /// <summary>
+    /// Initializes the LineShape.
+    /// </summary>
+    /// <param name="x1">x coordinate of left lineEndPoind</param>
+    /// <param name="y1">y coordinate of left lineEndPoind</param>
+    /// <param name="x2">x coordinate of right lineEndPoind</param>
+    /// <param name="y2">y coordinate of right lineEndPoind</param>
+    /// <param name="color">color for the LineShape</param>
+    /// <param name="thickness">tickness of the line in pixels</param>
+    /// <param name="drawingStyle">drawing style of the line (solid, dashed, dotted,...)</param>
+    public LineShape(double x1, double y1, double x2, double y2, Color color, int thickness, DrawingStyle drawingStyle) {
+      this.boundingBox = new RectangleD(x1, y1, x2, y2);
+      this.LSColor = color;
+      this.LSThickness = thickness;
+      this.LSDrawingStyle = drawingStyle;
+    }
+
+    public RectangleD BoundingBox {
+      get { return boundingBox; }
+      set { boundingBox = value; }
+    }
+
+    public RectangleD ClippingArea {
+      get { return Parent.ClippingArea; }
+    }
+
+    public Rectangle Viewport {
+      get { return Parent.Viewport; }
+    }
+
+    public IShape Parent {
+      get { return parent; }
+      set { parent = value; }
+    }
+
+    public double Y1 {
+      get { return boundingBox.Y1; }
+      set { boundingBox.Y1 = value; }
+    }
+
+    public double Y2 {
+      get { return boundingBox.Y2; }
+      set { boundingBox.Y2 = value; }
+    }
+
+    public double X1 {
+      get { return boundingBox.X1; }
+      set { boundingBox.X1 = value; }
+    }
+
+    public double X2 {
+      get { return boundingBox.X2; }
+      set { boundingBox.X2 = value; }
+    }
+
+    /// <summary>
+    /// Draws the LineShape.
+    /// </summary>
+    /// <param name="graphics">graphics handle to draw to</param>
+    public virtual void Draw(Graphics graphics) {
+      Rectangle screenRect = Transform.ToScreen(boundingBox, Parent.Viewport, Parent.ClippingArea);
+
+      graphics.DrawLine(GetPen(), screenRect.Left, screenRect.Bottom, screenRect.Right, screenRect.Top);
+    }
+
+    private Pen GetPen() {
+      if (pen == null) {
+        pen = new Pen(LSColor, LSThickness);
+
+        switch (LSDrawingStyle) {
+          case DrawingStyle.Dashed:
+            pen.DashStyle = DashStyle.Dash;
+            break;
+          default:
+            pen.DashStyle = DashStyle.Solid;
+            break;
+        }
+      }
+
+      return pen;
+    }
+
+    private void DisposePen() {
+      if (pen != null) {
+        pen.Dispose();
+        pen = null;
+      }
+    }
+
+    public Color LSColor {
+      get { return color; }
+      set {
+        color = value;
+        DisposePen();
+      }
+    }
+
+    public int LSThickness {
+      get { return thickness; }
+      set {
+        thickness = value;
+        DisposePen();
+      }
+    }
+
+    public DrawingStyle LSDrawingStyle {
+      get { return drawingStyle; }
+      set {
+        drawingStyle = value;
+        DisposePen();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Offset.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Offset.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Offset.cs	(revision 1270)
@@ -0,0 +1,115 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+using System;
+
+namespace HeuristicLab.Visualization {
+  public struct Offset {
+    public static readonly Offset Empty = new Offset();
+
+    private double myDX;
+
+    public double DX {
+      get { return myDX; }
+      set { myDX = value; }
+    }
+
+    private double myDY;
+
+    public double DY {
+      get { return myDY; }
+      set { myDY = value; }
+    }
+
+    public bool IsEmpty {
+      get { return this == Empty; }
+    }
+
+    public double Length {
+      get { return Math.Sqrt(DX*DX + DY*DY); }
+    }
+
+    public Offset(double dx, double dy) {
+      myDX = dx;
+      myDY = dy;
+    }
+
+    public Offset(PointD point) {
+      myDX = point.X;
+      myDY = point.Y;
+    }
+
+    public Offset(SizeD size) {
+      myDX = size.Width;
+      myDY = size.Height;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj is Offset) {
+        return ((Offset)obj) == this;
+      } else {
+        return base.Equals(obj);
+      }
+    }
+
+    public override int GetHashCode() {
+      return (int)Math.Pow(DX, DY);
+    }
+
+    public override string ToString() {
+      return string.Format("({0};{1})", DX, DY);
+    }
+
+    public static Offset operator +(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX + offset2.DX, offset1.DY + offset2.DY);
+    }
+
+    public static Offset operator -(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX - offset2.DX, offset1.DY - offset2.DY);
+    }
+
+    public static bool operator ==(Offset offset1, Offset offset2) {
+      return (offset1.DX == offset2.DX) && (offset1.DY == offset2.DY);
+    }
+
+    public static bool operator !=(Offset offset1, Offset offset2) {
+      return (offset1.DX != offset2.DX) && (offset1.DY != offset2.DY);
+    }
+
+    public static explicit operator PointD(Offset offset) {
+      return new PointD(offset.DX, offset.DY);
+    }
+
+    public static explicit operator SizeD(Offset offset) {
+      return new SizeD(offset.DX, offset.DY);
+    }
+
+    public static Offset Add(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX + offset2.DX, offset1.DY + offset2.DY);
+    }
+
+    public static Offset Subtract(Offset offset1, Offset offset2) {
+      return new Offset(offset1.DX - offset2.DX, offset1.DY - offset2.DY);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.Designer.cs	(revision 1270)
@@ -0,0 +1,282 @@
+﻿namespace HeuristicLab.Visualization.Options {
+  partial class OptionsDialog {
+    /// <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.Optionstabs = new System.Windows.Forms.TabControl();
+      this.tabPage1 = new System.Windows.Forms.TabPage();
+      this.OptionsDialogSelectColorBt = new System.Windows.Forms.Button();
+      this.ColorPreviewTB = new System.Windows.Forms.TextBox();
+      this.label2 = new System.Windows.Forms.Label();
+      this.LinestyleCB = new System.Windows.Forms.ComboBox();
+      this.label1 = new System.Windows.Forms.Label();
+      this.LineSelectCB = new System.Windows.Forms.ComboBox();
+      this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.label4 = new System.Windows.Forms.Label();
+      this.LineThicknessCB = new System.Windows.Forms.ComboBox();
+      this.label3 = new System.Windows.Forms.Label();
+      this.tabPage2 = new System.Windows.Forms.TabPage();
+      this.labelposition = new System.Windows.Forms.Label();
+      this.cbLabelPosition = new System.Windows.Forms.ComboBox();
+      this.OptionsDialogCancelButton = new System.Windows.Forms.Button();
+      this.OptionsDialogOkButton = new System.Windows.Forms.Button();
+      this.OptionsDialogApplyBtn = new System.Windows.Forms.Button();
+      this.Optionstabs.SuspendLayout();
+      this.tabPage1.SuspendLayout();
+      this.groupBox1.SuspendLayout();
+      this.tabPage2.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // Optionstabs
+      // 
+      this.Optionstabs.Controls.Add(this.tabPage1);
+      this.Optionstabs.Controls.Add(this.tabPage2);
+      this.Optionstabs.Location = new System.Drawing.Point(0, 1);
+      this.Optionstabs.Name = "Optionstabs";
+      this.Optionstabs.SelectedIndex = 0;
+      this.Optionstabs.Size = new System.Drawing.Size(292, 225);
+      this.Optionstabs.TabIndex = 0;
+      // 
+      // tabPage1
+      // 
+      this.tabPage1.Controls.Add(this.OptionsDialogSelectColorBt);
+      this.tabPage1.Controls.Add(this.ColorPreviewTB);
+      this.tabPage1.Controls.Add(this.label2);
+      this.tabPage1.Controls.Add(this.LinestyleCB);
+      this.tabPage1.Controls.Add(this.label1);
+      this.tabPage1.Controls.Add(this.LineSelectCB);
+      this.tabPage1.Controls.Add(this.groupBox1);
+      this.tabPage1.Location = new System.Drawing.Point(4, 22);
+      this.tabPage1.Name = "tabPage1";
+      this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage1.Size = new System.Drawing.Size(284, 199);
+      this.tabPage1.TabIndex = 0;
+      this.tabPage1.Text = "Linestyle";
+      this.tabPage1.UseVisualStyleBackColor = true;
+      // 
+      // OptionsDialogSelectColorBt
+      // 
+      this.OptionsDialogSelectColorBt.Location = new System.Drawing.Point(217, 126);
+      this.OptionsDialogSelectColorBt.Name = "OptionsDialogSelectColorBt";
+      this.OptionsDialogSelectColorBt.Size = new System.Drawing.Size(50, 23);
+      this.OptionsDialogSelectColorBt.TabIndex = 7;
+      this.OptionsDialogSelectColorBt.Text = "Select";
+      this.OptionsDialogSelectColorBt.UseVisualStyleBackColor = true;
+      this.OptionsDialogSelectColorBt.Click += new System.EventHandler(this.OptionsDialogSelectColorBtn_Click);
+      // 
+      // ColorPreviewTB
+      // 
+      this.ColorPreviewTB.Location = new System.Drawing.Point(146, 127);
+      this.ColorPreviewTB.Name = "ColorPreviewTB";
+      this.ColorPreviewTB.ReadOnly = true;
+      this.ColorPreviewTB.Size = new System.Drawing.Size(64, 20);
+      this.ColorPreviewTB.TabIndex = 6;
+      // 
+      // label2
+      // 
+      this.label2.AutoSize = true;
+      this.label2.Location = new System.Drawing.Point(36, 80);
+      this.label2.Name = "label2";
+      this.label2.Size = new System.Drawing.Size(30, 13);
+      this.label2.TabIndex = 3;
+      this.label2.Text = "Style";
+      // 
+      // LinestyleCB
+      // 
+      this.LinestyleCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.LinestyleCB.FormattingEnabled = true;
+      this.LinestyleCB.Location = new System.Drawing.Point(146, 73);
+      this.LinestyleCB.Name = "LinestyleCB";
+      this.LinestyleCB.Size = new System.Drawing.Size(121, 21);
+      this.LinestyleCB.TabIndex = 2;
+      // 
+      // label1
+      // 
+      this.label1.AutoSize = true;
+      this.label1.Location = new System.Drawing.Point(7, 37);
+      this.label1.Name = "label1";
+      this.label1.Size = new System.Drawing.Size(72, 13);
+      this.label1.TabIndex = 1;
+      this.label1.Text = "Selected Line";
+      // 
+      // LineSelectCB
+      // 
+      this.LineSelectCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.LineSelectCB.FormattingEnabled = true;
+      this.LineSelectCB.Location = new System.Drawing.Point(146, 30);
+      this.LineSelectCB.Name = "LineSelectCB";
+      this.LineSelectCB.Size = new System.Drawing.Size(121, 21);
+      this.LineSelectCB.TabIndex = 0;
+      this.LineSelectCB.SelectedIndexChanged += new System.EventHandler(this.LineSelectCB_SelectedIndexChanged);
+      // 
+      // groupBox1
+      // 
+      this.groupBox1.Controls.Add(this.label4);
+      this.groupBox1.Controls.Add(this.LineThicknessCB);
+      this.groupBox1.Controls.Add(this.label3);
+      this.groupBox1.Location = new System.Drawing.Point(4, 54);
+      this.groupBox1.Name = "groupBox1";
+      this.groupBox1.Size = new System.Drawing.Size(274, 129);
+      this.groupBox1.TabIndex = 9;
+      this.groupBox1.TabStop = false;
+      this.groupBox1.Text = "Details";
+      // 
+      // label4
+      // 
+      this.label4.AutoSize = true;
+      this.label4.Location = new System.Drawing.Point(33, 77);
+      this.label4.Name = "label4";
+      this.label4.Size = new System.Drawing.Size(31, 13);
+      this.label4.TabIndex = 8;
+      this.label4.Text = "Color";
+      // 
+      // LineThicknessCB
+      // 
+      this.LineThicknessCB.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.LineThicknessCB.FormattingEnabled = true;
+      this.LineThicknessCB.Location = new System.Drawing.Point(142, 46);
+      this.LineThicknessCB.Name = "LineThicknessCB";
+      this.LineThicknessCB.Size = new System.Drawing.Size(121, 21);
+      this.LineThicknessCB.TabIndex = 4;
+      // 
+      // label3
+      // 
+      this.label3.AutoSize = true;
+      this.label3.Location = new System.Drawing.Point(32, 52);
+      this.label3.Name = "label3";
+      this.label3.Size = new System.Drawing.Size(56, 13);
+      this.label3.TabIndex = 5;
+      this.label3.Text = "Thickness";
+      // 
+      // tabPage2
+      // 
+      this.tabPage2.Controls.Add(this.labelposition);
+      this.tabPage2.Controls.Add(this.cbLabelPosition);
+      this.tabPage2.Location = new System.Drawing.Point(4, 22);
+      this.tabPage2.Name = "tabPage2";
+      this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+      this.tabPage2.Size = new System.Drawing.Size(284, 199);
+      this.tabPage2.TabIndex = 1;
+      this.tabPage2.Text = "Legend";
+      this.tabPage2.UseVisualStyleBackColor = true;
+      // 
+      // labelposition
+      // 
+      this.labelposition.AutoSize = true;
+      this.labelposition.Location = new System.Drawing.Point(8, 38);
+      this.labelposition.Name = "labelposition";
+      this.labelposition.Size = new System.Drawing.Size(72, 13);
+      this.labelposition.TabIndex = 1;
+      this.labelposition.Text = "Labelposition:";
+      // 
+      // cbLabelPosition
+      // 
+      this.cbLabelPosition.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+      this.cbLabelPosition.FormattingEnabled = true;
+      this.cbLabelPosition.Items.AddRange(new object[] {
+            "left",
+            "right",
+            "top",
+            "bottom"});
+      this.cbLabelPosition.Location = new System.Drawing.Point(86, 34);
+      this.cbLabelPosition.Name = "cbLabelPosition";
+      this.cbLabelPosition.Size = new System.Drawing.Size(121, 21);
+      this.cbLabelPosition.TabIndex = 0;
+      // 
+      // OptionsDialogCancelButton
+      // 
+      this.OptionsDialogCancelButton.Location = new System.Drawing.Point(213, 232);
+      this.OptionsDialogCancelButton.Name = "OptionsDialogCancelButton";
+      this.OptionsDialogCancelButton.Size = new System.Drawing.Size(75, 23);
+      this.OptionsDialogCancelButton.TabIndex = 1;
+      this.OptionsDialogCancelButton.Text = "Cancel";
+      this.OptionsDialogCancelButton.UseVisualStyleBackColor = true;
+      this.OptionsDialogCancelButton.Click += new System.EventHandler(this.OptionsDialogCancelButton_Click);
+      // 
+      // OptionsDialogOkButton
+      // 
+      this.OptionsDialogOkButton.Location = new System.Drawing.Point(43, 232);
+      this.OptionsDialogOkButton.Name = "OptionsDialogOkButton";
+      this.OptionsDialogOkButton.Size = new System.Drawing.Size(75, 23);
+      this.OptionsDialogOkButton.TabIndex = 2;
+      this.OptionsDialogOkButton.Text = "OK";
+      this.OptionsDialogOkButton.UseVisualStyleBackColor = true;
+      this.OptionsDialogOkButton.Click += new System.EventHandler(this.OptionsDialogOkButton_Click);
+      // 
+      // OptionsDialogApplyBtn
+      // 
+      this.OptionsDialogApplyBtn.Location = new System.Drawing.Point(128, 231);
+      this.OptionsDialogApplyBtn.Name = "OptionsDialogApplyBtn";
+      this.OptionsDialogApplyBtn.Size = new System.Drawing.Size(75, 23);
+      this.OptionsDialogApplyBtn.TabIndex = 3;
+      this.OptionsDialogApplyBtn.Text = "Apply";
+      this.OptionsDialogApplyBtn.UseVisualStyleBackColor = true;
+      this.OptionsDialogApplyBtn.Click += new System.EventHandler(this.OptionsDialogApplyBtn_Click);
+      // 
+      // OptionsDialog
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(292, 266);
+      this.Controls.Add(this.OptionsDialogApplyBtn);
+      this.Controls.Add(this.OptionsDialogOkButton);
+      this.Controls.Add(this.OptionsDialogCancelButton);
+      this.Controls.Add(this.Optionstabs);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+      this.MaximizeBox = false;
+      this.Name = "OptionsDialog";
+      this.Text = "OptionsDialog";
+      this.Load += new System.EventHandler(this.OptionsDialog_Load);
+      this.Optionstabs.ResumeLayout(false);
+      this.tabPage1.ResumeLayout(false);
+      this.tabPage1.PerformLayout();
+      this.groupBox1.ResumeLayout(false);
+      this.groupBox1.PerformLayout();
+      this.tabPage2.ResumeLayout(false);
+      this.tabPage2.PerformLayout();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.TabControl Optionstabs;
+    private System.Windows.Forms.TabPage tabPage1;
+    private System.Windows.Forms.TabPage tabPage2;
+    private System.Windows.Forms.Label label1;
+    private System.Windows.Forms.ComboBox LineSelectCB;
+    private System.Windows.Forms.Button OptionsDialogSelectColorBt;
+    private System.Windows.Forms.TextBox ColorPreviewTB;
+    private System.Windows.Forms.Label label3;
+    private System.Windows.Forms.ComboBox LineThicknessCB;
+    private System.Windows.Forms.Label label2;
+    private System.Windows.Forms.ComboBox LinestyleCB;
+    private System.Windows.Forms.Label label4;
+    private System.Windows.Forms.GroupBox groupBox1;
+    private System.Windows.Forms.Button OptionsDialogCancelButton;
+    private System.Windows.Forms.Button OptionsDialogOkButton;
+    private System.Windows.Forms.ComboBox cbLabelPosition;
+    private System.Windows.Forms.Label labelposition;
+    private System.Windows.Forms.Button OptionsDialogApplyBtn;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.cs	(revision 1270)
@@ -0,0 +1,72 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization.Options {
+  public partial class OptionsDialog : Form {
+    private readonly IChartDataRowsModel model;
+
+    public OptionsDialog(IChartDataRowsModel model) {
+      InitializeComponent();
+      this.model = model;
+    }
+
+    private void OptionsDialogSelectColorBtn_Click(object sender, EventArgs e) {
+      ColorDialog dlg = new ColorDialog();
+      dlg.ShowDialog();
+      ColorPreviewTB.BackColor = dlg.Color;
+    }
+
+    public IList<int> GetThicknesses() {
+      return new List<int> {0, 1, 2, 3, 4, 5, 6, 7, 8};
+    }
+
+    public IList<DrawingStyle> GetStyles() {
+      return new List<DrawingStyle> {DrawingStyle.Solid, DrawingStyle.Dashed};
+    }
+
+    private void OptionsDialog_Load(object sender, EventArgs e) {
+      if (model.Rows.Count != 0) {
+        LineSelectCB.DataSource = model.Rows;
+        LineSelectCB.DisplayMember = "Label";
+
+        LineThicknessCB.DataSource = GetThicknesses();
+        LinestyleCB.DataSource = GetStyles();
+        LineSelectCB.SelectedIndex = 0;
+        LineSelectCB_SelectedIndexChanged(this, null);
+      }
+    }
+
+    private void LineSelectCB_SelectedIndexChanged(object sender, EventArgs e) {
+      if (LineSelectCB.SelectedValue != null) {
+        int index =
+          LineThicknessCB.FindStringExact(((IDataRow) LineSelectCB.SelectedValue).Thickness.ToString());
+        LineThicknessCB.SelectedIndex = index;
+        index = LinestyleCB.FindStringExact(((IDataRow) LineSelectCB.SelectedValue).Style.ToString());
+        LinestyleCB.SelectedIndex = index;
+        ColorPreviewTB.BackColor = ((IDataRow) LineSelectCB.SelectedValue).Color;
+      }
+    }
+
+    private void OptionsDialogCancelButton_Click(object sender, EventArgs e) {
+      Close();
+    }
+
+    private void OptionsDialogOkButton_Click(object sender, EventArgs e) {
+      if (LineSelectCB.SelectedValue != null) {
+        ((IDataRow) LineSelectCB.SelectedValue).Thickness = (int) LineThicknessCB.SelectedItem;
+        ((IDataRow) LineSelectCB.SelectedValue).Color = ColorPreviewTB.BackColor;
+        ((IDataRow) LineSelectCB.SelectedValue).Style = (DrawingStyle) LinestyleCB.SelectedItem;
+      }
+      Close();
+    }
+
+    private void OptionsDialogApplyBtn_Click(object sender, EventArgs e) {
+      if (LineSelectCB.SelectedValue != null) {
+        ((IDataRow) LineSelectCB.SelectedValue).Thickness = (int) LineThicknessCB.SelectedItem;
+        ((IDataRow) LineSelectCB.SelectedValue).Color = ColorPreviewTB.BackColor;
+        ((IDataRow) LineSelectCB.SelectedValue).Style = (DrawingStyle) LinestyleCB.SelectedItem;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Options/OptionsDialog.resx	(revision 1270)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/PanListener.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/PanListener.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/PanListener.cs	(revision 1270)
@@ -0,0 +1,33 @@
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization {
+  public class PanListener : IMouseEventListener {
+    private Point startPoint;
+
+    public event MoveHandler Pan;
+    public event MoveHandler PanEnd;
+
+    public PanListener(Point startPoint) {
+      this.startPoint = startPoint;
+    }
+
+    #region IMouseEventListener Members
+
+    public void MouseMove(object sender, MouseEventArgs e) {
+      if (Pan != null) {
+        Pan(startPoint, e.Location);
+      }
+
+      startPoint = e.Location;  
+    }
+
+    public void MouseUp(object sender, MouseEventArgs e) {
+      if(PanEnd != null) {
+        PanEnd(startPoint, e.Location);
+      }
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/PointD.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/PointD.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/PointD.cs	(revision 1270)
@@ -0,0 +1,128 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+using System;
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public struct PointD {
+    public static readonly PointD Empty = new PointD();
+
+    private double myX;
+
+    public double X {
+      get { return myX; }
+      set { myX = value; }
+    }
+
+    private double myY;
+
+    public double Y {
+      get { return myY; }
+      set { myY = value; }
+    }
+
+    public bool IsEmpty {
+      get { return this == Empty; }
+    }
+
+    public PointD(double x, double y) {
+      myX = x;
+      myY = y;
+    }
+
+    public PointD(SizeD size) {
+      myX = size.Width;
+      myY = size.Height;
+    }
+
+    public PointD(Offset offset) {
+      myX = offset.DX;
+      myY = offset.DY;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj is PointD) {
+        return ((PointD)obj) == this;
+      } else {
+        return base.Equals(obj);
+      }
+    }
+
+    public override int GetHashCode() {
+      return (int)Math.Pow(X, Y);
+    }
+
+    public override string ToString() {
+      return string.Format("({0};{1})", X, Y);
+    }
+
+    public static PointD operator +(PointD point, Offset offset) {
+      return new PointD(point.X + offset.DX, point.Y + offset.DY);
+    }
+
+    public static PointD operator -(PointD point, Offset offset) {
+      return new PointD(point.X - offset.DX, point.Y - offset.DY);
+    }
+
+    public static Offset operator +(PointD point1, PointD point2) {
+      return new Offset(point1.X + point2.X, point1.Y + point2.Y);
+    }
+
+    public static Offset operator -(PointD point1, PointD point2) {
+      return new Offset(point1.X - point2.X, point1.Y - point2.Y);
+    }
+
+    public static bool operator ==(PointD point1, PointD point2) {
+      return (point1.X == point2.X) && (point1.Y == point2.Y);
+    }
+
+    public static bool operator !=(PointD point1, PointD point2) {
+      return (point1.X != point2.X) && (point1.Y != point2.Y);
+    }
+
+    public static explicit operator SizeD(PointD point) {
+      return new SizeD(point.X, point.Y);
+    }
+
+    public static explicit operator Offset(PointD point) {
+      return new Offset(point.X, point.Y);
+    }
+
+    public static implicit operator PointD(Point point) {
+      return new PointD(point.X, point.Y);
+    }
+
+    public static implicit operator PointD(PointF point) {
+      return new PointD(point.X, point.Y);
+    }
+
+    public static PointD Add(PointD point, Offset offset) {
+      return new PointD(point.X + offset.DX, point.Y + offset.DY);
+    }
+
+    public static PointD Subtract(PointD point, Offset offset) {
+      return new PointD(point.X - offset.DX, point.Y - offset.DY);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,59 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Visualization")]
+[assembly: AssemblyDescription("HeuristicLab data visualization framework")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("f7c10f77-1067-4b4c-876a-92fe49b4f228")]
+
+// 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.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyBuildDate("$WCNOW$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/RectangleD.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/RectangleD.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/RectangleD.cs	(revision 1270)
@@ -0,0 +1,95 @@
+namespace HeuristicLab.Visualization {
+  public struct RectangleD {
+    public static readonly RectangleD Empty = new RectangleD();
+
+    private PointD bottomLeft;
+    private PointD topRight;
+
+    private double width;
+    private double height;
+
+    public RectangleD(double x1, double y1, double x2, double y2) {
+      bottomLeft = PointD.Empty;
+      topRight = PointD.Empty;
+
+      bottomLeft.X = x1;
+      bottomLeft.Y = y1;
+
+      topRight.X = x2;
+      topRight.Y = y2;
+
+      width = x2 - x1;
+      height = y2 - y1;
+    }
+
+    public PointD BottomLeft {
+      get { return bottomLeft; }
+      set {
+        bottomLeft = value;
+        width = topRight.X - bottomLeft.X;
+        height = topRight.Y - bottomLeft.Y;
+      }
+    }
+
+    public PointD TopRight {
+      get { return topRight; }
+      set {
+        topRight = value;
+        width = topRight.X - bottomLeft.X;
+        height = topRight.Y - bottomLeft.Y;
+      }
+    }
+
+    public double X1 {
+      get { return bottomLeft.X; }
+      set {
+        bottomLeft.X = value;
+        width = topRight.X - bottomLeft.X;
+      }
+    }
+
+    public double X2 {
+      get { return topRight.X; }
+      set {
+        topRight.X = value;
+        width = topRight.X - bottomLeft.X;
+      }
+    }
+
+    public double Y1 {
+      get { return bottomLeft.Y; }
+      set {
+        bottomLeft.Y = value;
+        height = topRight.Y - bottomLeft.Y;
+      }
+    }
+
+    public double Y2 {
+      get { return topRight.Y; }
+      set {
+        topRight.Y = value;
+        height = topRight.Y - bottomLeft.Y;
+      }
+    }
+
+    public double Width {
+      get { return width; }
+      set {
+        width = value;
+        topRight.X = bottomLeft.X + width;
+      }
+    }
+
+    public double Height {
+      get { return height; }
+      set {
+        height = value;
+        topRight.Y = bottomLeft.Y + height;
+      }
+    }
+
+    public override string ToString() {
+      return (string.Format("{{X1={0},Y1={1},Width={2},Height={3}}}", X1, Y1, Width, Height));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/RectangleShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/RectangleShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/RectangleShape.cs	(revision 1270)
@@ -0,0 +1,88 @@
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public class RectangleShape : IShape {
+    private IShape parent;
+    private RectangleD rectangle;
+
+    private Color color;
+    private int opacity = 255;
+
+    private Pen pen;
+    private Brush brush;
+
+    public RectangleShape(double x1, double y1, double x2, double y2, Color color) {
+      rectangle = new RectangleD(x1, y1, x2, y2);
+      this.color = color;
+    }
+
+    public RectangleD BoundingBox {
+      get { return rectangle; }
+    }
+
+    public RectangleD ClippingArea {
+      get { return Parent.ClippingArea; }
+    }
+
+    public Rectangle Viewport {
+      get { return Parent.Viewport; }
+    }
+
+    public IShape Parent {
+      get { return parent; }
+      set { parent = value; }
+    }
+
+    public RectangleD Rectangle {
+      get { return rectangle; }
+      set { rectangle = value; }
+    }
+
+    public void Draw(Graphics graphics) {
+      Rectangle screenRect = Transform.ToScreen(rectangle, Parent.Viewport, Parent.ClippingArea);
+
+      graphics.DrawRectangle(GetPen(), screenRect);
+      graphics.FillRectangle(GetBrush(), screenRect);
+    }
+
+    private Pen GetPen() {
+      if (pen == null)
+        pen = new Pen(color, 1);
+      return pen;
+    }
+
+    private Brush GetBrush() {
+      if (brush == null)
+        brush = new SolidBrush(Color.FromArgb(opacity, color));
+      return brush;
+    }
+
+    public int Opacity {
+      get { return opacity; }
+      set {
+        opacity = value;
+        DisposeDrawingTools();
+      }
+    }
+
+    public Color Color {
+      get { return color; }
+      set {
+        color = value;
+        DisposeDrawingTools();
+      }
+    }
+
+    private void DisposeDrawingTools() {
+      if (pen != null) {
+        pen.Dispose();
+        pen = null;
+      }
+
+      if (brush != null) {
+        brush.Dispose();
+        brush = null;
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/SizeD.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/SizeD.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/SizeD.cs	(revision 1270)
@@ -0,0 +1,120 @@
+﻿#region License Information
+
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#endregion
+
+using System;
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public struct SizeD {
+    public static readonly SizeD Empty = new SizeD();
+
+    private double myWidth;
+
+    public double Width {
+      get { return myWidth; }
+      set { myWidth = value; }
+    }
+
+    private double myHeight;
+
+    public double Height {
+      get { return myHeight; }
+      set { myHeight = value; }
+    }
+
+    public bool IsEmpty {
+      get { return this == Empty; }
+    }
+
+    public SizeD(double width, double height) {
+      myWidth = width;
+      myHeight = height;
+    }
+
+    public SizeD(PointD point) {
+      myWidth = point.X;
+      myHeight = point.Y;
+    }
+
+    public SizeD(Offset offset) {
+      myWidth = offset.DX;
+      myHeight = offset.DY;
+    }
+
+    public override bool Equals(object obj) {
+      if (obj is SizeD) {
+        return ((SizeD)obj) == this;
+      } else {
+        return base.Equals(obj);
+      }
+    }
+
+    public override int GetHashCode() {
+      return (int)Math.Pow(Width, Height);
+    }
+
+    public override string ToString() {
+      return string.Format("({0};{1})", Width, Height);
+    }
+
+    public static SizeD operator +(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width + size2.Width, size1.Height + size2.Height);
+    }
+
+    public static SizeD operator -(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width - size2.Width, size1.Height - size2.Height);
+    }
+
+    public static bool operator ==(SizeD size1, SizeD size2) {
+      return (size1.Width == size2.Width) && (size1.Height == size2.Height);
+    }
+
+    public static bool operator !=(SizeD size1, SizeD size2) {
+      return (size1.Width != size2.Width) && (size1.Height != size2.Height);
+    }
+
+    public static explicit operator PointD(SizeD size) {
+      return new PointD(size.Width, size.Height);
+    }
+
+    public static explicit operator Offset(SizeD size) {
+      return new Offset(size.Width, size.Height);
+    }
+
+    public static implicit operator SizeD(Size size) {
+      return new SizeD(size.Width, size.Height);
+    }
+
+    public static implicit operator SizeD(SizeF size) {
+      return new SizeD(size.Width, size.Height);
+    }
+
+    public static SizeD Add(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width + size2.Width, size1.Height + size2.Height);
+    }
+
+    public static SizeD Subtract(SizeD size1, SizeD size2) {
+      return new SizeD(size1.Width - size2.Width, size1.Height - size2.Height);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/TextShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/TextShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/TextShape.cs	(revision 1270)
@@ -0,0 +1,125 @@
+﻿using System;
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public enum AnchorPositionX {
+    Left, Middle, Right
+  }
+
+  public enum AnchorPositionY {
+    Bottom, Middle, Top
+  }
+
+  public class TextShape : IShape {
+    private IShape parent;
+    private Font font;
+    private Brush brush;
+    private Color color;
+    private string text;
+    private double x;
+    private double y;
+
+    private AnchorPositionX anchorPositionX = AnchorPositionX.Left;
+    private AnchorPositionY anchorPositionY = AnchorPositionY.Top;
+
+    public TextShape(double x, double y, string text) : this(x, y, text, 8) {}
+
+    public TextShape(double x, double y, string text, int fontSize) {
+      this.x = x;
+      this.y = y;
+      this.text = text;
+      font = new Font("Arial", fontSize);
+
+      Color = Color.Blue;
+    }
+
+    public string Text {
+      get { return text; }
+      set { text = value; }
+    }
+
+    public double X {
+      get { return x; }
+      set { x = value; }
+    }
+
+    public double Y {
+      get { return y; }
+      set { y = value; }
+    }
+
+    public Color Color {
+      get { return color; }
+      set {
+        color = value;
+        brush = new SolidBrush(color);
+      }
+    }
+
+    public AnchorPositionX AnchorPositionX {
+      get { return anchorPositionX; }
+      set { anchorPositionX = value; }
+    }
+
+    public AnchorPositionY AnchorPositionY {
+      get { return anchorPositionY; }
+      set { anchorPositionY = value; }
+    }
+
+    #region IShape Members
+
+    public void Draw(Graphics graphics) {
+      int screenX = Transform.ToScreenX(x, Parent.Viewport, Parent.ClippingArea);
+      int screenY = Transform.ToScreenY(y, Parent.Viewport, Parent.ClippingArea);
+
+      SizeF size = graphics.MeasureString(text, font);
+
+      switch (AnchorPositionX) {
+        case AnchorPositionX.Left:
+          break;
+        case AnchorPositionX.Middle:
+          screenX -= (int)(size.Width/2);
+          break;
+        case AnchorPositionX.Right:
+          screenX -= (int)size.Width;
+          break;
+        default:
+          throw new NotSupportedException("Unknown anchor position: " + AnchorPositionX);
+      }
+
+      switch (AnchorPositionY) {
+        case AnchorPositionY.Top:
+          break;
+        case AnchorPositionY.Middle:
+          screenY -= (int)(size.Height/2);
+          break;
+        case AnchorPositionY.Bottom:
+          screenY -= (int)size.Height;
+          break;
+        default:
+          throw new NotSupportedException("Unknown anchor position: " + AnchorPositionX);
+      }
+
+      graphics.DrawString(text, font, brush, screenX, screenY);
+    }
+
+    public RectangleD BoundingBox {
+      get { return RectangleD.Empty; }
+    }
+
+    public RectangleD ClippingArea {
+      get { return Parent.ClippingArea; }
+    }
+
+    public Rectangle Viewport {
+      get { return Parent.Viewport; }
+    }
+
+    public IShape Parent {
+      get { return parent; }
+      set { parent = value; }
+    }
+
+    #endregion
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Transform.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Transform.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Transform.cs	(revision 1270)
@@ -0,0 +1,117 @@
+﻿using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  /// <summary>
+  /// GDI (or screen) coordinate system
+  ///   The GDI coordinate system is specified in pixels. X goes from left to right
+  ///   and Y goes from top to bottom.
+  /// 
+  /// World coordinate system
+  ///   A world coordinate system can be freely specified. X goes from left to
+  ///   right and Y goes from bottom to top.
+  /// 
+  /// The transformation between world- and screen-coordinate systems is done using
+  /// a view port and a clipping area.
+  /// </summary>
+  public static class Transform {
+    /// <summary>
+    /// Transforms a rectangle in screen coordinates to world coordinates
+    /// </summary>
+    /// <param name="rect">The rectangle in screen coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The rectangle rect transformed to world coordinates</returns>
+    public static RectangleD ToWorld(Rectangle rect, Rectangle viewport, RectangleD clippingArea) {
+      double x1 = ToWorldX(rect.Left, viewport, clippingArea);
+      double y1 = ToWorldY(rect.Bottom, viewport, clippingArea);
+      double x2 = ToWorldX(rect.Right, viewport, clippingArea);
+      double y2 = ToWorldY(rect.Top, viewport, clippingArea);
+      return new RectangleD(x1, y1, x2, y2);
+    }
+
+    /// <summary>
+    /// Transforms a 2d point in screen coordinates to world coordinates
+    /// </summary>
+    /// <param name="point">The point in screen coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The point transformed to world coordinates</returns>
+    public static PointD ToWorld(Point point, Rectangle viewport, RectangleD clippingArea) {
+      double x = ToWorldX(point.X, viewport, clippingArea);
+      double y = ToWorldY(point.Y, viewport, clippingArea);
+      return new PointD(x, y);
+    }
+
+    /// <summary>
+    /// Transforms a point on the X-axis in screen coordinates to world coordinates
+    /// </summary>
+    /// <param name="x">The point on the X-axis in screen coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The point transformed to world coordinates</returns>
+    public static double ToWorldX(int x, Rectangle viewport, RectangleD clippingArea) {
+      return clippingArea.X1 + clippingArea.Width/viewport.Width*(x - viewport.Left);
+    }
+
+    /// <summary>
+    /// Transforms a point on the Y-axis in screen coordinates to world coordinates
+    /// </summary>
+    /// <param name="y">The point on the Y-axis in screen coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The point transformed to world coordinates</returns>
+    public static double ToWorldY(int y, Rectangle viewport, RectangleD clippingArea) {
+      return clippingArea.Y1 - clippingArea.Height/viewport.Height*(y - viewport.Bottom);
+    }
+
+    /// <summary>
+    /// Transforms a rectangle in world coordinates to screen coordinates
+    /// </summary>
+    /// <param name="rect">The rectangle in world coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The rectangle rect transformed to screen coordinates</returns>
+    public static Rectangle ToScreen(RectangleD rect, Rectangle viewport, RectangleD clippingArea) {
+      int left = ToScreenX(rect.X1, viewport, clippingArea);
+      int bottom = ToScreenY(rect.Y1, viewport, clippingArea);
+      int right = ToScreenX(rect.X2, viewport, clippingArea);
+      int top = ToScreenY(rect.Y2, viewport, clippingArea);
+      return new Rectangle(left, top, right - left , bottom - top );
+    }
+
+    /// <summary>
+    /// Transforms a 2d point in world coordinates to screen coordinates
+    /// </summary>
+    /// <param name="point">The point in world coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The point transformed to screen coordinates</returns>
+    public static Point ToScreen(PointD point, Rectangle viewport, RectangleD clippingArea) {
+      int x = ToScreenX(point.X, viewport, clippingArea);
+      int y = ToScreenY(point.Y, viewport, clippingArea);
+      return new Point(x, y);
+    }
+
+    /// <summary>
+    /// Transforms a point on the X-axis in world coordinates to screen coordinates
+    /// </summary>
+    /// <param name="x">The point on the X-axis in world coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The point transformed to screen coordinates</returns>
+    public static int ToScreenX(double x, Rectangle viewport, RectangleD clippingArea) {
+      return (int)(viewport.Left + viewport.Width/clippingArea.Width*(x - clippingArea.X1));
+    }
+
+    /// <summary>
+    /// Transforms a point on the Y-axis in world coordinates to screen coordinates
+    /// </summary>
+    /// <param name="y">The point on the Y-axis in world coordinates that should be transformed</param>
+    /// <param name="viewport">The target view port</param>
+    /// <param name="clippingArea">The target clipping area</param>
+    /// <returns>The point transformed to screen coordinates</returns>
+    public static int ToScreenY(double y, Rectangle viewport, RectangleD clippingArea) {
+      return (int)(viewport.Bottom - viewport.Height/clippingArea.Height*(y - clippingArea.Y1));
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Translate.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Translate.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/Translate.cs	(revision 1270)
@@ -0,0 +1,26 @@
+using System.Drawing;
+
+namespace HeuristicLab.Visualization {
+  public static class Translate {
+    public static RectangleD ClippingArea(Point startPoint, Point endPoint, RectangleD clippingArea, Rectangle viewPort) {
+      PointD worldStartPoint = Transform.ToWorld(startPoint, viewPort, clippingArea);
+      PointD worldEndPoint = Transform.ToWorld(endPoint, viewPort, clippingArea);
+
+      double xDiff = worldEndPoint.X - worldStartPoint.X;
+      double yDiff = worldEndPoint.Y - worldStartPoint.Y;
+
+      return RectangleD(xDiff, yDiff, clippingArea);
+    }
+
+    public static RectangleD RectangleD(double x, double y, RectangleD rectangle) {
+      RectangleD rect = new RectangleD();
+
+      rect.X1 = rectangle.X1 - x;
+      rect.X2 = rectangle.X2 - x;
+      rect.Y1 = rectangle.Y1 - y;
+      rect.Y2 = rectangle.Y2 - y;
+
+      return rect;
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/WorldShape.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/WorldShape.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/WorldShape.cs	(revision 1270)
@@ -0,0 +1,77 @@
+﻿using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Drawing2D;
+
+namespace HeuristicLab.Visualization {
+  /// <summary>
+  /// World shapes are composite shapes that have their own coordinate system
+  /// which is independent from their parent's coordinate system.
+  /// </summary>
+  public class WorldShape : IShape {
+    private RectangleD clippingArea; // own clipping area
+    private RectangleD boundingBox;
+    private IShape parent;
+
+    private readonly List<IShape> shapes = new List<IShape>();
+
+    public WorldShape() {
+      this.clippingArea = new RectangleD(0, 0, 1, 1);
+      this.boundingBox = new RectangleD(0, 0, 1, 1);
+    }
+
+    public virtual void Draw(Graphics graphics) {
+      GraphicsState gstate = graphics.Save();
+
+      graphics.SetClip(Viewport);
+
+      foreach (IShape shape in shapes) {
+        // draw child shapes using our own clipping area
+        shape.Draw(graphics);
+      }
+
+      graphics.Restore(gstate);
+    }
+
+    public RectangleD BoundingBox {
+      get { return boundingBox; }
+      set { boundingBox = value; }
+    }
+
+    /// <summary>
+    /// The world shape's own clipping area.
+    /// This overrides the clipping area of the parent shape.
+    /// </summary>
+    public RectangleD ClippingArea {
+      get { return clippingArea; }
+      set { clippingArea = value; }
+    }
+
+    public Rectangle Viewport {
+      get {
+        // calculate our drawing area on the screen using our location and
+        // size in the parent (boundingBox), the parent's viewport and the
+        // parent's clipping area
+        Rectangle viewport = Transform.ToScreen(boundingBox, Parent.Viewport, Parent.ClippingArea);
+        return viewport;
+      }
+    }
+
+    public IShape Parent {
+      get { return parent; }
+      set { parent = value; }
+    }
+
+    public void ClearShapes() {
+      shapes.Clear();
+    }
+
+    public void AddShape(IShape shape) {
+      shape.Parent = this;
+      shapes.Add(shape);
+    }
+
+    public bool RemoveShape(IShape shape) {
+      return shapes.Remove(shape);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/XAxis.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/XAxis.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/XAxis.cs	(revision 1270)
@@ -0,0 +1,31 @@
+using System.Drawing;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization {
+  public class XAxis : WorldShape {
+    public const int PixelsPerInterval = 100;
+    
+    private ILabelProvider labelProvider = new ContinuousLabelProvider("0.####");
+
+    public ILabelProvider LabelProvider {
+      get { return labelProvider; }
+      set { labelProvider = value; }
+    }
+
+    public override void Draw(Graphics graphics) {
+      ClearShapes();
+
+      foreach (double x in AxisTicks.GetTicks(PixelsPerInterval, Parent.Viewport.Width,
+                                              ClippingArea.Width,
+                                              ClippingArea.X1)) {
+        TextShape label = new TextShape(x, ClippingArea.Height - 3,
+                                        labelProvider.GetLabel(x));
+        label.AnchorPositionX = AnchorPositionX.Middle;
+        label.AnchorPositionY = AnchorPositionY.Top;
+        AddShape(label);
+      }
+
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/YAxis.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/YAxis.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/YAxis.cs	(revision 1270)
@@ -0,0 +1,31 @@
+using System.Drawing;
+using HeuristicLab.Visualization.LabelProvider;
+
+namespace HeuristicLab.Visualization {
+  public class YAxis : WorldShape {
+    public const int PixelsPerInterval = 75;
+
+    private ILabelProvider labelProvider = new ContinuousLabelProvider("e4");
+
+    public ILabelProvider LabelProvider {
+      get { return labelProvider; }
+      set { labelProvider = value; }
+    }
+
+    public override void Draw(Graphics graphics) {
+      ClearShapes();
+
+      foreach (double y in AxisTicks.GetTicks(PixelsPerInterval, Parent.Viewport.Height,
+                                              ClippingArea.Height,
+                                              ClippingArea.Y1)) {
+        TextShape label = new TextShape(ClippingArea.X2 - 3, y,
+                                        labelProvider.GetLabel(y));
+        label.AnchorPositionX = AnchorPositionX.Right;
+        label.AnchorPositionY = AnchorPositionY.Middle;
+        AddShape(label);
+      }
+
+      base.Draw(graphics);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ZoomListener.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ZoomListener.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.Visualization/ZoomListener.cs	(revision 1270)
@@ -0,0 +1,67 @@
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace HeuristicLab.Visualization {
+  public class ZoomListener : IMouseEventListener {
+    private readonly Point startPoint;
+
+    public event RectangleHandler DrawRectangle;
+    public event RectangleHandler SetClippingArea;
+
+    public ZoomListener(Point startPoint) {
+      this.startPoint = startPoint;
+    }
+
+    #region IMouseEventListener Members
+
+    public void MouseMove(object sender, MouseEventArgs e) {
+      if(DrawRectangle != null) {
+        DrawRectangle(CalcRectangle(e.Location));
+      }
+    }
+
+    public void MouseUp(object sender, MouseEventArgs e) {
+     if(SetClippingArea != null) {
+       SetClippingArea(CalcRectangle(e.Location));
+     }
+    }
+
+    #endregion
+
+    private Rectangle CalcRectangle(Point actualPoint) {
+      Rectangle rectangle = new Rectangle();
+
+      if (startPoint.X < actualPoint.X) {
+        rectangle.X = startPoint.X;
+        rectangle.Width = actualPoint.X - startPoint.X;
+      } else {
+        rectangle.X = actualPoint.X;
+        rectangle.Width = startPoint.X - actualPoint.X;
+      }
+
+      if (startPoint.Y < actualPoint.Y) {
+        rectangle.Y = startPoint.Y;
+        rectangle.Height = actualPoint.Y - startPoint.Y;
+      } else {
+        rectangle.Y = actualPoint.Y;
+        rectangle.Height = startPoint.Y - actualPoint.Y;
+      }
+
+      return rectangle;
+    }
+
+    public static RectangleD ZoomClippingArea(RectangleD clippingArea, double zoomFactor) {
+      double x1, x2, y1, y2, width, height;
+
+      width = clippingArea.Width * zoomFactor;
+      height = clippingArea.Height * zoomFactor;
+
+      x1 = clippingArea.X1 - (width - clippingArea.Width) / 2;
+      y1 = clippingArea.Y1 - (height - clippingArea.Height) / 2;
+      x2 = width + x1;
+      y2 = height + y1;
+
+      return new RectangleD(x1, y1, x2, y2);
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.sln
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.sln	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab.sln	(revision 1270)
@@ -0,0 +1,1058 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{96396439-A764-4022-A8D2-BE021449B8D1}"
+	ProjectSection(SolutionItems) = preProject
+		..\documentation\License\gpl-3.0.txt = ..\documentation\License\gpl-3.0.txt
+		PreBuildEvent.cmd = PreBuildEvent.cmd
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab", "HeuristicLab\HeuristicLab.csproj", "{623FB817-8371-4A9A-A491-4DECC87B2BBB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Core", "HeuristicLab.Core\HeuristicLab.Core.csproj", "{F43B59AB-2B8C-4570-BC1E-15592086517C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Data", "HeuristicLab.Data\HeuristicLab.Data.csproj", "{F473D9AF-3F09-4296-9F28-3C65118DAFFA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Random", "HeuristicLab.Random\HeuristicLab.Random.csproj", "{47019A74-F7F7-482E-83AA-D3F4F777E879}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Routing.TSP", "HeuristicLab.Routing.TSP\HeuristicLab.Routing.TSP.csproj", "{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Operators", "HeuristicLab.Operators\HeuristicLab.Operators.csproj", "{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.PluginInfrastructure", "HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj", "{94186A6A-5176-4402-AE83-886557B53CCA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Logging", "HeuristicLab.Logging\HeuristicLab.Logging.csproj", "{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.SequentialEngine", "HeuristicLab.SequentialEngine\HeuristicLab.SequentialEngine.csproj", "{B4BE8E53-BA06-4237-9A01-24255F880201}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ThreadParallelEngine", "HeuristicLab.ThreadParallelEngine\HeuristicLab.ThreadParallelEngine.csproj", "{6E757D0E-20F9-4E89-AF06-D7DA256870DB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Permutation", "HeuristicLab.Permutation\HeuristicLab.Permutation.csproj", "{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Evolutionary", "HeuristicLab.Evolutionary\HeuristicLab.Evolutionary.csproj", "{F5614C53-153C-4A37-A608-121E1C087F07}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Selection", "HeuristicLab.Selection\HeuristicLab.Selection.csproj", "{F7CF0571-25CB-43D5-8443-0843A1E2861A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Selection.OffspringSelection", "HeuristicLab.Selection.OffspringSelection\HeuristicLab.Selection.OffspringSelection.csproj", "{205898D3-2717-4686-AF17-52409B7EC0C6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.PluginInfrastructure.GUI", "HeuristicLab.PluginInfrastructure.GUI\HeuristicLab.PluginInfrastructure.GUI.csproj", "{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Scheduling.JSSP", "HeuristicLab.Scheduling.JSSP\HeuristicLab.Scheduling.JSSP.csproj", "{4C0EF782-CC94-4A94-BC3E-661D2600559B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Charting", "HeuristicLab.Charting\HeuristicLab.Charting.csproj", "{B462D3CC-8866-42F0-9832-AD0967613B72}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Charting.Data", "HeuristicLab.Charting.Data\HeuristicLab.Charting.Data.csproj", "{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Operators.Programmable", "HeuristicLab.Operators.Programmable\HeuristicLab.Operators.Programmable.csproj", "{E3CCBFC6-900C-41B6-AFB8-6646DB097435}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.SGA", "HeuristicLab.SGA\HeuristicLab.SGA.csproj", "{E39AF78A-9692-472B-B061-E2F1B1AB2C92}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Constraints", "HeuristicLab.Constraints\HeuristicLab.Constraints.csproj", "{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.DataAnalysis", "HeuristicLab.DataAnalysis\HeuristicLab.DataAnalysis.csproj", "{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.BitVector", "HeuristicLab.BitVector\HeuristicLab.BitVector.csproj", "{6D9564BB-956D-4808-8F92-AA7F776F90A5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.RealVector", "HeuristicLab.RealVector\HeuristicLab.RealVector.csproj", "{2D4E4565-3ED9-4BEB-AE75-39D871843D24}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.TestFunctions", "HeuristicLab.TestFunctions\HeuristicLab.TestFunctions.csproj", "{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.OptimizationFrontend", "HeuristicLab.OptimizationFrontend\HeuristicLab.OptimizationFrontend.csproj", "{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.AdvancedOptimizationFrontend", "HeuristicLab.AdvancedOptimizationFrontend\HeuristicLab.AdvancedOptimizationFrontend.csproj", "{74752FCD-9E10-48DB-9AF2-AF5518B62807}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.DistributedEngine", "HeuristicLab.DistributedEngine\HeuristicLab.DistributedEngine.csproj", "{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Grid", "HeuristicLab.Grid\HeuristicLab.Grid.csproj", "{545CE756-98D8-423B-AC2E-6E7D70926E5C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.ES", "HeuristicLab.ES\HeuristicLab.ES.csproj", "{2E6112A7-3A94-406D-A28C-38AC2D324DCA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.SQLite", "HeuristicLab.SQLite\HeuristicLab.SQLite.csproj", "{6960CBCD-E44B-49B0-BA86-671091C42C36}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.DB.Interfaces", "HeuristicLab.CEDMA.DB.Interfaces\HeuristicLab.CEDMA.DB.Interfaces.csproj", "{4F9BB789-D561-436B-B226-2BF44B7D0804}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.DB", "HeuristicLab.CEDMA.DB\HeuristicLab.CEDMA.DB.csproj", "{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.Operators", "HeuristicLab.CEDMA.Operators\HeuristicLab.CEDMA.Operators.csproj", "{6BC692D4-8843-4945-ACE4-5B41ED55476A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.Server", "HeuristicLab.CEDMA.Server\HeuristicLab.CEDMA.Server.csproj", "{F05D261A-4F7D-46C9-AB9C-21FD4566D719}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.Core", "HeuristicLab.CEDMA.Core\HeuristicLab.CEDMA.Core.csproj", "{C27DDF6C-84DF-45EF-B82F-57A28DD51166}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Operators.Stopwatch", "HeuristicLab.Operators.Stopwatch\HeuristicLab.Operators.Stopwatch.csproj", "{39DEF061-8261-43DB-8B3B-C7555251FF77}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Operators.Metaprogramming", "HeuristicLab.Operators.Metaprogramming\HeuristicLab.Operators.Metaprogramming.csproj", "{F18FD554-19B9-460C-9A49-4AA8D7245727}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.CEDMA.Charting", "HeuristicLab.CEDMA.Charting\HeuristicLab.CEDMA.Charting.csproj", "{1BF17271-5350-476A-8F6D-FC74FA3E82CA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Communication.Data", "HeuristicLab.Communication.Data\HeuristicLab.Communication.Data.csproj", "{14E1C3E3-2496-436A-AE00-09F7B81DB15B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Communication.Operators", "HeuristicLab.Communication.Operators\HeuristicLab.Communication.Operators.csproj", "{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.SimOpt", "HeuristicLab.SimOpt\HeuristicLab.SimOpt.csproj", "{32DAA44F-944A-465F-A5C9-1C491EE4976D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Visualization", "HeuristicLab.Visualization\HeuristicLab.Visualization.csproj", "{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Visualization.Test", "HeuristicLab.Visualization.Test\HeuristicLab.Visualization.Test.csproj", "{23117533-8A91-474E-BBF6-C39485D0810A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP.SantaFe", "HeuristicLab.GP.SantaFe\HeuristicLab.GP.SantaFe.csproj", "{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP", "HeuristicLab.GP\HeuristicLab.GP.csproj", "{1F1CF3ED-374C-4288-995B-93F6B872F571}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP.StructureIdentification", "HeuristicLab.GP.StructureIdentification\HeuristicLab.GP.StructureIdentification.csproj", "{74223A32-C726-4978-BE78-37113A18373C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP.StructureIdentification.Classification", "HeuristicLab.GP.StructureIdentification.Classification\HeuristicLab.GP.StructureIdentification.Classification.csproj", "{7C20D100-8BEB-433A-9499-F075E2CB9297}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP.StructureIdentification.TimeSeries", "HeuristicLab.GP.StructureIdentification.TimeSeries\HeuristicLab.GP.StructureIdentification.TimeSeries.csproj", "{6084CFB5-733F-449D-9F92-2E40D13F0514}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server", "HeuristicLab.Hive.Server\HeuristicLab.Hive.Server.csproj", "{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.Core", "HeuristicLab.Hive.Server.Core\HeuristicLab.Hive.Server.Core.csproj", "{898B31CF-81DC-453B-AEB3-BDF83197A7EE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.Scheduler", "HeuristicLab.Hive.Server.Scheduler\HeuristicLab.Hive.Server.Scheduler.csproj", "{679E977A-117B-456E-8594-2A4DEADB658B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.ADODataAccess", "HeuristicLab.Hive.Server.ADODataAccess\HeuristicLab.Hive.Server.ADODataAccess.csproj", "{715A9134-B6E4-4CB9-8A5A-E6601497565A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.Core", "HeuristicLab.Hive.Client.Core\HeuristicLab.Hive.Client.Core.csproj", "{5010BD86-23B7-4F8C-888A-76D21AD5266A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.Common", "HeuristicLab.Hive.Client.Common\HeuristicLab.Hive.Client.Common.csproj", "{89F4BC52-C174-481E-9BD2-3814171020E8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.Console", "HeuristicLab.Hive.Client.Console\HeuristicLab.Hive.Client.Console.csproj", "{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.GP.Boolean", "HeuristicLab.GP.Boolean\HeuristicLab.GP.Boolean.csproj", "{A0821479-801F-43DF-B788-AE92FB410DA9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Contracts", "HeuristicLab.Hive.Contracts\HeuristicLab.Hive.Contracts.csproj", "{134F93D7-E7C8-4ECD-9923-7F63259A60D8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.ExecutionEngine", "HeuristicLab.Hive.Client.ExecutionEngine\HeuristicLab.Hive.Client.ExecutionEngine.csproj", "{1605256A-1CB3-44AB-AAFF-577093EE5789}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Client.Communication", "HeuristicLab.Hive.Client.Communication\HeuristicLab.Hive.Client.Communication.csproj", "{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.Server.Console", "HeuristicLab.Hive.Server.Console\HeuristicLab.Hive.Server.Console.csproj", "{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Hive.JobBase", "HeuristicLab.Hive.JobBase\HeuristicLab.Hive.JobBase.csproj", "{21187322-52DD-4243-80A4-A85F0263E63B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.IntVector", "HeuristicLab.IntVector\HeuristicLab.IntVector.csproj", "{85FA46C6-761E-4098-9EF7-060ECC386396}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Assignment.QAP", "HeuristicLab.Assignment.QAP\HeuristicLab.Assignment.QAP.csproj", "{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		CEDMA Debug|Any CPU = CEDMA Debug|Any CPU
+		CEDMA Debug|x86 = CEDMA Debug|x86
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x86 = Release|x86
+		Visualization Debug|Any CPU = Visualization Debug|Any CPU
+		Visualization Debug|x86 = Visualization Debug|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Debug|x86.ActiveCfg = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Debug|x86.Build.0 = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Release|x86.ActiveCfg = Release|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Release|x86.Build.0 = Release|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{623FB817-8371-4A9A-A491-4DECC87B2BBB}.Visualization Debug|x86.Build.0 = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|x86.ActiveCfg = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Debug|x86.Build.0 = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Release|x86.ActiveCfg = Release|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Release|x86.Build.0 = Release|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{F43B59AB-2B8C-4570-BC1E-15592086517C}.Visualization Debug|x86.Build.0 = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|x86.ActiveCfg = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Debug|x86.Build.0 = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Release|x86.ActiveCfg = Release|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Release|x86.Build.0 = Release|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{F473D9AF-3F09-4296-9F28-3C65118DAFFA}.Visualization Debug|x86.Build.0 = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|x86.ActiveCfg = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Debug|x86.Build.0 = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Release|Any CPU.Build.0 = Release|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Release|x86.ActiveCfg = Release|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Release|x86.Build.0 = Release|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{47019A74-F7F7-482E-83AA-D3F4F777E879}.Visualization Debug|x86.Build.0 = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|x86.ActiveCfg = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Debug|x86.Build.0 = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Release|x86.ActiveCfg = Release|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Release|x86.Build.0 = Release|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{9EF75B49-D507-44E0-BC5D-C200FDA53B9B}.Visualization Debug|x86.Build.0 = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|x86.ActiveCfg = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Debug|x86.Build.0 = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Release|x86.ActiveCfg = Release|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Release|x86.Build.0 = Release|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{A9983BA2-B3B2-475E-8E2C-62050B71D1C5}.Visualization Debug|x86.Build.0 = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|x86.ActiveCfg = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Debug|x86.Build.0 = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Release|x86.ActiveCfg = Release|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Release|x86.Build.0 = Release|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{94186A6A-5176-4402-AE83-886557B53CCA}.Visualization Debug|x86.Build.0 = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|x86.ActiveCfg = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Debug|x86.Build.0 = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Release|x86.ActiveCfg = Release|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Release|x86.Build.0 = Release|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{4095C92C-5A4C-44BC-9963-5F384CF5CC3F}.Visualization Debug|x86.Build.0 = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|x86.ActiveCfg = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Debug|x86.Build.0 = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Release|x86.ActiveCfg = Release|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Release|x86.Build.0 = Release|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{B4BE8E53-BA06-4237-9A01-24255F880201}.Visualization Debug|x86.Build.0 = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|x86.ActiveCfg = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Debug|x86.Build.0 = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Release|x86.ActiveCfg = Release|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Release|x86.Build.0 = Release|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{6E757D0E-20F9-4E89-AF06-D7DA256870DB}.Visualization Debug|x86.Build.0 = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|x86.ActiveCfg = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Debug|x86.Build.0 = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Release|Any CPU.Build.0 = Release|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Release|x86.ActiveCfg = Release|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Release|x86.Build.0 = Release|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{55FDCFB3-3E8C-4FB0-837C-0CF06BEDED39}.Visualization Debug|x86.Build.0 = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|x86.ActiveCfg = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Debug|x86.Build.0 = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Release|x86.ActiveCfg = Release|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Release|x86.Build.0 = Release|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{F5614C53-153C-4A37-A608-121E1C087F07}.Visualization Debug|x86.Build.0 = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|x86.ActiveCfg = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Debug|x86.Build.0 = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Release|x86.ActiveCfg = Release|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Release|x86.Build.0 = Release|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{F7CF0571-25CB-43D5-8443-0843A1E2861A}.Visualization Debug|x86.Build.0 = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|x86.ActiveCfg = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Debug|x86.Build.0 = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Release|x86.ActiveCfg = Release|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Release|x86.Build.0 = Release|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{205898D3-2717-4686-AF17-52409B7EC0C6}.Visualization Debug|x86.Build.0 = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|x86.ActiveCfg = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Debug|x86.Build.0 = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Release|x86.ActiveCfg = Release|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Release|x86.Build.0 = Release|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}.Visualization Debug|x86.Build.0 = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|x86.ActiveCfg = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Debug|x86.Build.0 = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Release|x86.ActiveCfg = Release|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Release|x86.Build.0 = Release|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{4C0EF782-CC94-4A94-BC3E-661D2600559B}.Visualization Debug|x86.Build.0 = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|x86.ActiveCfg = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Debug|x86.Build.0 = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Release|x86.ActiveCfg = Release|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Release|x86.Build.0 = Release|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{B462D3CC-8866-42F0-9832-AD0967613B72}.Visualization Debug|x86.Build.0 = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|x86.ActiveCfg = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Debug|x86.Build.0 = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Release|x86.ActiveCfg = Release|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Release|x86.Build.0 = Release|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{E0740131-AA3E-4A3F-BA03-C9FF8327F4EE}.Visualization Debug|x86.Build.0 = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|x86.ActiveCfg = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Debug|x86.Build.0 = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Release|x86.ActiveCfg = Release|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Release|x86.Build.0 = Release|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{E3CCBFC6-900C-41B6-AFB8-6646DB097435}.Visualization Debug|x86.Build.0 = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|x86.ActiveCfg = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Debug|x86.Build.0 = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Release|x86.ActiveCfg = Release|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Release|x86.Build.0 = Release|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{E39AF78A-9692-472B-B061-E2F1B1AB2C92}.Visualization Debug|x86.Build.0 = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|x86.ActiveCfg = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Debug|x86.Build.0 = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Release|x86.ActiveCfg = Release|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Release|x86.Build.0 = Release|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{FCD62C6F-4793-4593-AE9A-0BDCA256EE99}.Visualization Debug|x86.Build.0 = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|x86.ActiveCfg = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Debug|x86.Build.0 = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Release|x86.ActiveCfg = Release|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Release|x86.Build.0 = Release|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{7DD3A97A-56E9-462F-90E2-A351FE7AF5C2}.Visualization Debug|x86.Build.0 = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|x86.ActiveCfg = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Debug|x86.Build.0 = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Release|x86.ActiveCfg = Release|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Release|x86.Build.0 = Release|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{6D9564BB-956D-4808-8F92-AA7F776F90A5}.Visualization Debug|x86.Build.0 = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|x86.ActiveCfg = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Debug|x86.Build.0 = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Release|x86.ActiveCfg = Release|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Release|x86.Build.0 = Release|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{2D4E4565-3ED9-4BEB-AE75-39D871843D24}.Visualization Debug|x86.Build.0 = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|x86.ActiveCfg = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Debug|x86.Build.0 = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Release|x86.ActiveCfg = Release|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Release|x86.Build.0 = Release|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{9A781B2F-A58D-4270-A28A-3B14BBC11F4A}.Visualization Debug|x86.Build.0 = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|x86.ActiveCfg = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Debug|x86.Build.0 = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Release|x86.ActiveCfg = Release|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Release|x86.Build.0 = Release|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{C2FB432A-07CA-45B5-BAFE-FEC172D1107B}.Visualization Debug|x86.Build.0 = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|x86.ActiveCfg = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Debug|x86.Build.0 = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Release|Any CPU.Build.0 = Release|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Release|x86.ActiveCfg = Release|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Release|x86.Build.0 = Release|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{74752FCD-9E10-48DB-9AF2-AF5518B62807}.Visualization Debug|x86.Build.0 = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|x86.ActiveCfg = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Debug|x86.Build.0 = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Release|x86.ActiveCfg = Release|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Release|x86.Build.0 = Release|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{E66D1EAA-525C-4F6D-BD25-DBCAE3750E25}.Visualization Debug|x86.Build.0 = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|x86.ActiveCfg = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Debug|x86.Build.0 = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Release|x86.ActiveCfg = Release|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Release|x86.Build.0 = Release|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{545CE756-98D8-423B-AC2E-6E7D70926E5C}.Visualization Debug|x86.Build.0 = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|x86.ActiveCfg = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Debug|x86.Build.0 = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Release|x86.ActiveCfg = Release|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Release|x86.Build.0 = Release|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{2E6112A7-3A94-406D-A28C-38AC2D324DCA}.Visualization Debug|x86.Build.0 = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|x86.ActiveCfg = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Debug|x86.Build.0 = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Release|x86.ActiveCfg = Release|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Release|x86.Build.0 = Release|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{6960CBCD-E44B-49B0-BA86-671091C42C36}.Visualization Debug|x86.Build.0 = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Debug|x86.ActiveCfg = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Debug|x86.Build.0 = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Release|x86.ActiveCfg = Release|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Release|x86.Build.0 = Release|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{4F9BB789-D561-436B-B226-2BF44B7D0804}.Visualization Debug|x86.Build.0 = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Debug|x86.ActiveCfg = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Debug|x86.Build.0 = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Release|x86.ActiveCfg = Release|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Release|x86.Build.0 = Release|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{B3D6D8D9-2B1F-47EC-9C73-77FAECF87310}.Visualization Debug|x86.Build.0 = Debug|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|x86.ActiveCfg = Debug|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Debug|x86.Build.0 = Debug|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|x86.ActiveCfg = Release|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Release|x86.Build.0 = Release|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{6BC692D4-8843-4945-ACE4-5B41ED55476A}.Visualization Debug|x86.Build.0 = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Debug|x86.ActiveCfg = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Debug|x86.Build.0 = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Release|x86.ActiveCfg = Release|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Release|x86.Build.0 = Release|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{F05D261A-4F7D-46C9-AB9C-21FD4566D719}.Visualization Debug|x86.Build.0 = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Debug|x86.ActiveCfg = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Debug|x86.Build.0 = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Release|x86.ActiveCfg = Release|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Release|x86.Build.0 = Release|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{C27DDF6C-84DF-45EF-B82F-57A28DD51166}.Visualization Debug|x86.Build.0 = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|x86.ActiveCfg = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Debug|x86.Build.0 = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Release|Any CPU.Build.0 = Release|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Release|x86.ActiveCfg = Release|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Release|x86.Build.0 = Release|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{39DEF061-8261-43DB-8B3B-C7555251FF77}.Visualization Debug|x86.Build.0 = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|x86.ActiveCfg = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Debug|x86.Build.0 = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Release|x86.ActiveCfg = Release|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Release|x86.Build.0 = Release|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{F18FD554-19B9-460C-9A49-4AA8D7245727}.Visualization Debug|x86.Build.0 = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.CEDMA Debug|x86.Build.0 = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Debug|x86.ActiveCfg = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Debug|x86.Build.0 = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Release|x86.ActiveCfg = Release|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Release|x86.Build.0 = Release|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{1BF17271-5350-476A-8F6D-FC74FA3E82CA}.Visualization Debug|x86.Build.0 = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|x86.ActiveCfg = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Debug|x86.Build.0 = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Release|x86.ActiveCfg = Release|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Release|x86.Build.0 = Release|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{14E1C3E3-2496-436A-AE00-09F7B81DB15B}.Visualization Debug|x86.Build.0 = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|x86.ActiveCfg = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Debug|x86.Build.0 = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Release|x86.ActiveCfg = Release|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Release|x86.Build.0 = Release|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{6AEF1284-2428-4B01-B9D2-62C1FA7C2DE1}.Visualization Debug|x86.Build.0 = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|x86.ActiveCfg = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Debug|x86.Build.0 = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Release|x86.ActiveCfg = Release|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Release|x86.Build.0 = Release|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{32DAA44F-944A-465F-A5C9-1C491EE4976D}.Visualization Debug|x86.Build.0 = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|x86.ActiveCfg = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Debug|x86.Build.0 = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Release|x86.ActiveCfg = Release|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Release|x86.Build.0 = Release|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{E392A1E2-DC95-4E33-B82E-8ED690EDA1AB}.Visualization Debug|x86.Build.0 = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|x86.ActiveCfg = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Debug|x86.Build.0 = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Release|x86.ActiveCfg = Release|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Release|x86.Build.0 = Release|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{23117533-8A91-474E-BBF6-C39485D0810A}.Visualization Debug|x86.Build.0 = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|x86.ActiveCfg = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Debug|x86.Build.0 = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Release|x86.ActiveCfg = Release|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Release|x86.Build.0 = Release|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{1F5FA590-1D2D-406C-BDBD-03BAECEA3C80}.Visualization Debug|x86.Build.0 = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|x86.ActiveCfg = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Debug|x86.Build.0 = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Release|x86.ActiveCfg = Release|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Release|x86.Build.0 = Release|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{1F1CF3ED-374C-4288-995B-93F6B872F571}.Visualization Debug|x86.Build.0 = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.Debug|x86.ActiveCfg = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.Debug|x86.Build.0 = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.Release|x86.ActiveCfg = Release|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.Release|x86.Build.0 = Release|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{74223A32-C726-4978-BE78-37113A18373C}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{74223A32-C726-4978-BE78-37113A18373C}.Visualization Debug|x86.Build.0 = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|x86.ActiveCfg = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Debug|x86.Build.0 = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Release|x86.ActiveCfg = Release|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Release|x86.Build.0 = Release|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{7C20D100-8BEB-433A-9499-F075E2CB9297}.Visualization Debug|x86.Build.0 = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|x86.ActiveCfg = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Debug|x86.Build.0 = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Release|x86.ActiveCfg = Release|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Release|x86.Build.0 = Release|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{6084CFB5-733F-449D-9F92-2E40D13F0514}.Visualization Debug|x86.Build.0 = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x86.ActiveCfg = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Debug|x86.Build.0 = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|x86.ActiveCfg = Release|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Release|x86.Build.0 = Release|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{A04AE929-D0E1-466D-A9D3-BF3C4B2C209F}.Visualization Debug|x86.Build.0 = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x86.ActiveCfg = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Debug|x86.Build.0 = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|x86.ActiveCfg = Release|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Release|x86.Build.0 = Release|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{898B31CF-81DC-453B-AEB3-BDF83197A7EE}.Visualization Debug|x86.Build.0 = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|x86.ActiveCfg = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Debug|x86.Build.0 = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Release|x86.ActiveCfg = Release|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Release|x86.Build.0 = Release|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{679E977A-117B-456E-8594-2A4DEADB658B}.Visualization Debug|x86.Build.0 = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|x86.ActiveCfg = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Debug|x86.Build.0 = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Release|x86.ActiveCfg = Release|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Release|x86.Build.0 = Release|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{715A9134-B6E4-4CB9-8A5A-E6601497565A}.Visualization Debug|x86.Build.0 = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x86.ActiveCfg = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Debug|x86.Build.0 = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|x86.ActiveCfg = Release|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Release|x86.Build.0 = Release|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{5010BD86-23B7-4F8C-888A-76D21AD5266A}.Visualization Debug|x86.Build.0 = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x86.ActiveCfg = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Debug|x86.Build.0 = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|x86.ActiveCfg = Release|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Release|x86.Build.0 = Release|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{89F4BC52-C174-481E-9BD2-3814171020E8}.Visualization Debug|x86.Build.0 = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x86.ActiveCfg = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Debug|x86.Build.0 = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|x86.ActiveCfg = Release|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Release|x86.Build.0 = Release|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{8B14A35E-DBDF-43EB-B019-23E9FBC5A35E}.Visualization Debug|x86.Build.0 = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|x86.ActiveCfg = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Debug|x86.Build.0 = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Release|x86.ActiveCfg = Release|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Release|x86.Build.0 = Release|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{A0821479-801F-43DF-B788-AE92FB410DA9}.Visualization Debug|x86.Build.0 = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x86.ActiveCfg = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Debug|x86.Build.0 = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|x86.ActiveCfg = Release|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Release|x86.Build.0 = Release|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{134F93D7-E7C8-4ECD-9923-7F63259A60D8}.Visualization Debug|x86.Build.0 = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x86.ActiveCfg = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Debug|x86.Build.0 = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|x86.ActiveCfg = Release|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Release|x86.Build.0 = Release|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{1605256A-1CB3-44AB-AAFF-577093EE5789}.Visualization Debug|x86.Build.0 = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x86.ActiveCfg = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Debug|x86.Build.0 = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|x86.ActiveCfg = Release|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Release|x86.Build.0 = Release|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{AEB51212-CDBA-4FC6-A2EE-02359AA53ECE}.Visualization Debug|x86.Build.0 = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.CEDMA Debug|x86.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x86.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Debug|x86.Build.0 = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|Any CPU.Build.0 = Release|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|x86.ActiveCfg = Release|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Release|x86.Build.0 = Release|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Visualization Debug|x86.ActiveCfg = Debug|x86
+		{42A1D075-6C12-4DD9-B0C2-C6F5210A8119}.Visualization Debug|x86.Build.0 = Debug|x86
+		{21187322-52DD-4243-80A4-A85F0263E63B}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Release|x86.ActiveCfg = Release|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{21187322-52DD-4243-80A4-A85F0263E63B}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Release|Any CPU.Build.0 = Release|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Release|x86.ActiveCfg = Release|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{85FA46C6-761E-4098-9EF7-060ECC386396}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.CEDMA Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.CEDMA Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.CEDMA Debug|x86.ActiveCfg = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Release|x86.ActiveCfg = Release|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Visualization Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Visualization Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0AFC3DEE-0CA4-4CE6-BDE2-E06DDBB8BD21}.Visualization Debug|x86.ActiveCfg = Debug|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/CopyAssemblies.cmd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/CopyAssemblies.cmd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/CopyAssemblies.cmd	(revision 1270)
@@ -0,0 +1,79 @@
+copy "%SolutionDir%\HeuristicLab.PluginInfrastructure.GUI\ICSharpCode.SharpZipLib License.txt" .\
+
+rmdir plugins /s /q 
+mkdir plugins
+mkdir plugins\cache
+mkdir plugins\temp
+mkdir plugins\backup
+
+copy "%SolutionDir%\HeuristicLab.AdvancedOptimizationFrontend\%Outdir%\HeuristicLab.AdvancedOptimizationFrontend-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.AdvancedOptimizationFrontend\WeifenLuo.WinFormsUI.Docking.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.AdvancedOptimizationFrontend\WeifenLuo.WinFormsUI.Docking License.txt" .\plugins
+copy "%SolutionDir%\HeuristicLab.Assignment.QAP\%Outdir%\HeuristicLab.Assignment.QAP-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.BitVector\%Outdir%\HeuristicLab.BitVector-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.Charting\%Outdir%\HeuristicLab.CEDMA.Charting-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.Core\%Outdir%\HeuristicLab.CEDMA.Core-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.DB\%Outdir%\HeuristicLab.CEDMA.DB-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.DB\%Outdir%\SemWeb.SqliteStore.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.DB\%Outdir%\SemWeb.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.DB.Interfaces\%Outdir%\HeuristicLab.CEDMA.DB.Interfaces-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.Operators\%Outdir%\HeuristicLab.CEDMA.Operators-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.CEDMA.Server\%Outdir%\HeuristicLab.CEDMA.Server-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Charting\%Outdir%\HeuristicLab.Charting-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Charting.Data\%Outdir%\HeuristicLab.Charting.Data-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Communication.Data\%Outdir%\HeuristicLab.Communication.Data-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Communication.Operators\%Outdir%\HeuristicLab.Communication.Operators-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Core\%Outdir%\HeuristicLab.Core-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Constraints\%Outdir%\HeuristicLab.Constraints-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Data\%Outdir%\HeuristicLab.Data-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.DataAnalysis\%Outdir%\HeuristicLab.DataAnalysis-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.DistributedEngine\%Outdir%\HeuristicLab.DistributedEngine-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Evolutionary\%Outdir%\HeuristicLab.Evolutionary-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.GP\%Outdir%\HeuristicLab.GP-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.GP.Boolean\%Outdir%\HeuristicLab.GP.Boolean-1.0.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.GP.SantaFe\%Outdir%\HeuristicLab.GP.SantaFe-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.GP.StructureIdentification\%Outdir%\HeuristicLab.GP.StructureIdentification-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.GP.StructureIdentification.Classification\%Outdir%\HeuristicLab.GP.StructureIdentification.Classification-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.GP.StructureIdentification.TimeSeries\%Outdir%\HeuristicLab.GP.StructureIdentification.TimeSeries-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Grid\%Outdir%\HeuristicLab.Grid-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.IntVector\%Outdir%\HeuristicLab.IntVector-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Logging\%Outdir%\HeuristicLab.Logging-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Operators\%Outdir%\HeuristicLab.Operators-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Operators.Metaprogramming\%Outdir%\HeuristicLab.Operators.Metaprogramming-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Operators.Programmable\%Outdir%\HeuristicLab.Operators.Programmable-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Operators.Stopwatch\%Outdir%\HeuristicLab.Operators.Stopwatch-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.OptimizationFrontend\%Outdir%\HeuristicLab.OptimizationFrontend-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Permutation\%Outdir%\HeuristicLab.Permutation-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Random\%Outdir%\HeuristicLab.Random-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.RealVector\%Outdir%\HeuristicLab.RealVector-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Routing.TSP\%Outdir%\HeuristicLab.Routing.TSP-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Scheduling.JSSP\%Outdir%\HeuristicLab.Scheduling.JSSP-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Selection\%Outdir%\HeuristicLab.Selection-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Selection.OffspringSelection\%Outdir%\HeuristicLab.Selection.OffspringSelection-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.SequentialEngine\%Outdir%\HeuristicLab.SequentialEngine-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.SGA\%Outdir%\HeuristicLab.SGA-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.SimOpt\%Outdir%\HeuristicLab.SimOpt-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.SQLite\%Outdir%\HeuristicLab.SQLite-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.SQLite\System.Data.SQLite.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.SQLite\SQLite License.txt" .\plugins
+copy "%SolutionDir%\HeuristicLab.SQLite\SQLite.NET.chm" .\plugins
+copy "%SolutionDir%\HeuristicLab.TestFunctions\%Outdir%\HeuristicLab.TestFunctions-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.ThreadParallelEngine\%Outdir%\HeuristicLab.ThreadParallelEngine-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.ES\%Outdir%\HeuristicLab.ES-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Visualization\%Outdir%\HeuristicLab.Visualization-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Visualization.Test\%Outdir%\HeuristicLab.Visualization.Test-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.JobBase\%Outdir%\HeuristicLab.Hive.JobBase-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Server\%Outdir%\HeuristicLab.Hive.Server-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Server.ADODataAccess\%Outdir%\HeuristicLab.Hive.Server.ADODataAccess-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Server.Core\%Outdir%\HeuristicLab.Hive.Server.Core-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Server.Core\%Outdir%\HeuristicLab.Hive.Contracts-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Server.Scheduler\%Outdir%\HeuristicLab.Hive.Server.Scheduler-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.Core\%Outdir%\HeuristicLab.Hive.Client.Core-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.Common\%Outdir%\HeuristicLab.Hive.Client.Common-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.Console\%Outdir%\HeuristicLab.Hive.Client.Console-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.Console\%Outdir%\ZedGraph.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.Console\%Outdir%\Calendar.DayView.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.ExecutionEngine\%Outdir%\HeuristicLab.Hive.Client.ExecutionEngine-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.Communication\%Outdir%\HeuristicLab.Hive.Client.Communication-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Client.ExecutionEngine\%Outdir%\HeuristicLab.Hive.Client.ExecutionEngine-3.2.dll" .\plugins
+copy "%SolutionDir%\HeuristicLab.Hive.Server.Console\%Outdir%\HeuristicLab.Hive.Server.Console-3.2.dll" .\plugins
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/HeuristicLab.csproj
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/HeuristicLab.csproj	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/HeuristicLab.csproj	(revision 1270)
@@ -0,0 +1,159 @@
+﻿<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{623FB817-8371-4A9A-A491-4DECC87B2BBB}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab</RootNamespace>
+    <AssemblyName>HeuristicLab</AssemblyName>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <ApplicationIcon>HeuristicLab.ico</ApplicationIcon>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>2.0</OldToolsVersion>
+    <UpgradeBackupLocation>
+    </UpgradeBackupLocation>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release x64|x86' ">
+    <OutputPath>bin\x86\Release x64\</OutputPath>
+    <PlatformTarget>x86</PlatformTarget>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="MainForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="MainForm.Designer.cs">
+      <DependentUpon>MainForm.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="MainForm.resx">
+      <DependentUpon>MainForm.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SplashScreen.resx">
+      <DependentUpon>SplashScreen.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+    <Compile Include="SplashScreen.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="SplashScreen.Designer.cs">
+      <DependentUpon>SplashScreen.cs</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure.GUI\HeuristicLab.PluginInfrastructure.GUI.csproj">
+      <Project>{D3F92C1F-42B4-4EFB-9E73-B64FD3428ADE}</Project>
+      <Name>HeuristicLab.PluginInfrastructure.GUI</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\HeuristicLab.PluginInfrastructure.csproj">
+      <Project>{94186A6A-5176-4402-AE83-886557B53CCA}</Project>
+      <Name>HeuristicLab.PluginInfrastructure</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="HeuristicLab.ico" />
+    <Content Include="Resources\HeuristicLab.ico" />
+    <None Include="app.config" />
+    <None Include="CopyAssemblies.cmd" />
+    <None Include="MergeConfigs.cmd" />
+    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Resources\LargeIcons.gif" />
+    <None Include="Resources\Details.gif" />
+    <None Include="Resources\List.gif" />
+    <None Include="Resources\Logo_white.gif" />
+    <None Include="UpdateLocalInstallation.cmd" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call MergeConfigs.cmd
+call CopyAssemblies.cmd
+call UpdateLocalInstallation.cmd</PostBuildEvent>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.Designer.cs	(revision 1270)
@@ -0,0 +1,198 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab {
+  partial class MainForm {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if(disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+      System.Windows.Forms.ListViewGroup listViewGroup1 = new System.Windows.Forms.ListViewGroup("Plugin Management", System.Windows.Forms.HorizontalAlignment.Left);
+      System.Windows.Forms.ListViewGroup listViewGroup2 = new System.Windows.Forms.ListViewGroup("Applications", System.Windows.Forms.HorizontalAlignment.Left);
+      this.startButton = new System.Windows.Forms.Button();
+      this.largeImageList = new System.Windows.Forms.ImageList(this.components);
+      this.applicationsListView = new System.Windows.Forms.ListView();
+      this.nameColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.versionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.descriptionColumnHeader = new System.Windows.Forms.ColumnHeader();
+      this.smallImageList = new System.Windows.Forms.ImageList(this.components);
+      this.detailsButton = new System.Windows.Forms.Button();
+      this.listButton = new System.Windows.Forms.Button();
+      this.largeIconsButton = new System.Windows.Forms.Button();
+      this.SuspendLayout();
+      // 
+      // startButton
+      // 
+      this.startButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+      this.startButton.Enabled = false;
+      this.startButton.Location = new System.Drawing.Point(579, 511);
+      this.startButton.Name = "startButton";
+      this.startButton.Size = new System.Drawing.Size(75, 23);
+      this.startButton.TabIndex = 1;
+      this.startButton.Text = "Start";
+      this.startButton.UseVisualStyleBackColor = true;
+      this.startButton.Click += new System.EventHandler(this.applicationsListView_ItemActivate);
+      // 
+      // largeImageList
+      // 
+      this.largeImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("largeImageList.ImageStream")));
+      this.largeImageList.TransparentColor = System.Drawing.Color.Transparent;
+      this.largeImageList.Images.SetKeyName(0, "HeuristicLab.ico");
+      // 
+      // applicationsListView
+      // 
+      this.applicationsListView.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.applicationsListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.nameColumnHeader,
+            this.versionColumnHeader,
+            this.descriptionColumnHeader});
+      listViewGroup1.Header = "Plugin Management";
+      listViewGroup1.Name = "Plugin Management";
+      listViewGroup2.Header = "Applications";
+      listViewGroup2.Name = "Applications";
+      this.applicationsListView.Groups.AddRange(new System.Windows.Forms.ListViewGroup[] {
+            listViewGroup1,
+            listViewGroup2});
+      this.applicationsListView.LargeImageList = this.largeImageList;
+      this.applicationsListView.Location = new System.Drawing.Point(12, 12);
+      this.applicationsListView.MultiSelect = false;
+      this.applicationsListView.Name = "applicationsListView";
+      this.applicationsListView.ShowItemToolTips = true;
+      this.applicationsListView.Size = new System.Drawing.Size(642, 493);
+      this.applicationsListView.SmallImageList = this.smallImageList;
+      this.applicationsListView.TabIndex = 2;
+      this.applicationsListView.UseCompatibleStateImageBehavior = false;
+      this.applicationsListView.ItemActivate += new System.EventHandler(this.applicationsListView_ItemActivate);
+      this.applicationsListView.ItemSelectionChanged += new System.Windows.Forms.ListViewItemSelectionChangedEventHandler(this.applicationsListBox_SelectedIndexChanged);
+      // 
+      // nameColumnHeader
+      // 
+      this.nameColumnHeader.Text = "Name";
+      this.nameColumnHeader.Width = 125;
+      // 
+      // versionColumnHeader
+      // 
+      this.versionColumnHeader.Text = "Version";
+      // 
+      // descriptionColumnHeader
+      // 
+      this.descriptionColumnHeader.Text = "Description";
+      this.descriptionColumnHeader.Width = 453;
+      // 
+      // smallImageList
+      // 
+      this.smallImageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("smallImageList.ImageStream")));
+      this.smallImageList.TransparentColor = System.Drawing.Color.Transparent;
+      this.smallImageList.Images.SetKeyName(0, "HeuristicLab.ico");
+      // 
+      // detailsButton
+      // 
+      this.detailsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.detailsButton.AutoSize = true;
+      this.detailsButton.Image = global::HeuristicLab.Properties.Resources.Details;
+      this.detailsButton.Location = new System.Drawing.Point(68, 511);
+      this.detailsButton.Name = "detailsButton";
+      this.detailsButton.Size = new System.Drawing.Size(22, 23);
+      this.detailsButton.TabIndex = 5;
+      this.detailsButton.UseVisualStyleBackColor = true;
+      this.detailsButton.Click += new System.EventHandler(this.detailsButton_Click);
+      // 
+      // listButton
+      // 
+      this.listButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.listButton.AutoSize = true;
+      this.listButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+      this.listButton.Image = global::HeuristicLab.Properties.Resources.List;
+      this.listButton.Location = new System.Drawing.Point(40, 511);
+      this.listButton.Name = "listButton";
+      this.listButton.Size = new System.Drawing.Size(22, 22);
+      this.listButton.TabIndex = 4;
+      this.listButton.UseVisualStyleBackColor = true;
+      this.listButton.Click += new System.EventHandler(this.listButton_Click);
+      // 
+      // largeIconsButton
+      // 
+      this.largeIconsButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.largeIconsButton.AutoSize = true;
+      this.largeIconsButton.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+      this.largeIconsButton.Image = global::HeuristicLab.Properties.Resources.LargeIcons;
+      this.largeIconsButton.Location = new System.Drawing.Point(12, 511);
+      this.largeIconsButton.Name = "largeIconsButton";
+      this.largeIconsButton.Size = new System.Drawing.Size(22, 22);
+      this.largeIconsButton.TabIndex = 3;
+      this.largeIconsButton.UseVisualStyleBackColor = true;
+      this.largeIconsButton.Click += new System.EventHandler(this.largeIconsButton_Click);
+      // 
+      // MainForm
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(666, 546);
+      this.Controls.Add(this.detailsButton);
+      this.Controls.Add(this.listButton);
+      this.Controls.Add(this.largeIconsButton);
+      this.Controls.Add(this.applicationsListView);
+      this.Controls.Add(this.startButton);
+      this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+      this.Name = "MainForm";
+      this.Text = "HeuristicLab Starter";
+      this.ResumeLayout(false);
+      this.PerformLayout();
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Button startButton;
+    private System.Windows.Forms.ImageList largeImageList;
+    private System.Windows.Forms.ListView applicationsListView;
+    private System.Windows.Forms.ColumnHeader nameColumnHeader;
+    private System.Windows.Forms.ColumnHeader versionColumnHeader;
+    private System.Windows.Forms.ColumnHeader descriptionColumnHeader;
+    private System.Windows.Forms.Button largeIconsButton;
+    private System.Windows.Forms.Button listButton;
+    private System.Windows.Forms.Button detailsButton;
+    private System.Windows.Forms.ImageList smallImageList;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.cs	(revision 1270)
@@ -0,0 +1,151 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Diagnostics;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.PluginInfrastructure.GUI;
+using System.Threading;
+
+namespace HeuristicLab {
+  public partial class MainForm : Form {
+
+    private ListViewItem pluginManagerListViewItem;
+
+    public MainForm() {
+      SplashScreen splashScreen = new SplashScreen(1000, "Loading HeuristicLab...");
+      splashScreen.Owner = this;
+      splashScreen.Show();
+
+      Application.DoEvents();
+      this.Enabled = false;
+
+      PluginManager.Manager.Action += new PluginManagerActionEventHandler(splashScreen.Manager_Action);
+      PluginManager.Manager.Initialize();
+
+      InitializeComponent();
+
+      RefreshApplicationsList();
+
+      this.Enabled = true;
+      this.Visible = true;
+    }
+
+    private void RefreshApplicationsList() {
+      applicationsListView.Items.Clear();
+
+      pluginManagerListViewItem = new ListViewItem("Plugin Manager", 0);
+      pluginManagerListViewItem.Group = applicationsListView.Groups["Plugin Management"];
+      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "-"));
+      pluginManagerListViewItem.SubItems.Add(new ListViewItem.ListViewSubItem(pluginManagerListViewItem, "Install, upgrade or delete plugins"));
+      pluginManagerListViewItem.ToolTipText = "Install, upgrade or delete plugins";
+
+      applicationsListView.Items.Add(pluginManagerListViewItem);
+
+      foreach(ApplicationInfo info in PluginManager.Manager.InstalledApplications) {
+        ListViewItem item = new ListViewItem(info.Name, 0);
+        item.Tag = info;
+        item.Group = applicationsListView.Groups["Applications"];
+        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Version.ToString()));
+        item.SubItems.Add(new ListViewItem.ListViewSubItem(item, info.Description));
+        item.ToolTipText = info.Description;
+        applicationsListView.Items.Add(item);
+      }
+    }
+
+    private void applicationsListView_ItemActivate(object sender, EventArgs e) {
+      if(applicationsListView.SelectedItems.Count > 0) {
+        ListViewItem selected = applicationsListView.SelectedItems[0];
+        if(selected == pluginManagerListViewItem) {
+          ManagerForm form = new ManagerForm();
+          this.Visible = false;
+          form.ShowDialog(this);
+          RefreshApplicationsList();
+          this.Visible = true;
+        } else {
+          ApplicationInfo app = (ApplicationInfo)applicationsListView.SelectedItems[0].Tag;
+          SplashScreen splashScreen = new SplashScreen(2000, "Loading " + app.Name);
+          splashScreen.Owner = this;
+          splashScreen.Show();
+          PluginManager.Manager.Action += new PluginManagerActionEventHandler(splashScreen.Manager_Action);
+          Thread t = new Thread(delegate() {
+            bool stopped = false;
+            do {
+              try {
+                PluginManager.Manager.Run(app);
+                stopped = true;
+              } catch(Exception ex) {
+                stopped = false;
+                ThreadPool.QueueUserWorkItem(delegate(object exception) { ShowErrorMessageBox((Exception)exception); }, ex);
+                Thread.Sleep(5000); // sleep 5 seconds before autorestart
+              }
+            } while(!stopped && app.AutoRestart);
+          });
+          t.SetApartmentState(ApartmentState.STA); // needed for the AdvancedOptimizationFrontent
+          t.Start();
+        }
+      }
+    }
+
+    private void applicationsListBox_SelectedIndexChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
+      if(e.IsSelected) {
+        startButton.Enabled = true;
+      } else {
+        startButton.Enabled = false;
+      }
+    }
+
+    private void largeIconsButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.LargeIcon;
+    }
+
+    private void listButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.List;
+    }
+
+    private void detailsButton_Click(object sender, EventArgs e) {
+      applicationsListView.View = View.Details;
+    }
+
+    public void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(BuildErrorMessage(ex),
+                      "Error - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+    private string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while(ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MainForm.resx	(revision 1270)
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="largeImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>20, 15</value>
+  </metadata>
+  <data name="largeImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAU
+        CQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAASABAAEgAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        AYADAAEgAwABAQEAAQgGAAEQGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
+        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
+        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
+        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
+        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
+        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
+        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
+        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
+        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
+        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
+        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
+        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
+        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
+        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
+        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
+        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
+        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
+        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
+        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
+        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
+        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
+        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
+        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
+        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
+        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
+        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
+        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
+        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+CAB7/YgAB8QIHAfMK/wHz
+        DQcB8QH/YgAB7wIAAW0K/wHzDQABEgH/YgAB/wEQAQABDgHzCv8BbQ0AAfFiAAH/AZICAAHsCv8B8Q0A
+        AW1iAAL/AQ4BAAEOC/8BEgIAAQcK/2IAAv8B7AIAAZIK/wEHAgABFAr/YgAC/wHzAQ4BAAEQC/8BFAIA
+        AbwJ/2IAA/8BbQIAAe8K/wGSAgABbQn/YgAD/wHxAgABFAv/ARACAAHxCP9iAAT/AW0CAAEHCv8BkgIA
+        AesI/2IABP8BBwIAAW0K/wHzAQ4BAAEOAfMH/2IABf8BFAIAAfEK/wHsAgAB7Af/YgAF/wHvAgABbQr/
+        AfMCAAEQB/9iAAb/ARABAAEOCxQBDgIAAZIG/2IABv8BkhAAARAG/2IAB/8BDhAAAQcF/2IAB/8B7AIA
+        ARQK7AHrAgABFAX/YgAH/wHzAQ4BAAEQC/8BFAIAAbwE/2IACP8BbQIAAe8K/wGSAgABbQT/YgAI/wHx
+        AgABFAv/ARACAAHxA/9iAAn/AW0CAAEHCv8BkgIAAesD/2IACf8BBwIAAW0L/wEOAQABDgHzAv9iAAr/
+        ARQCAAHxCv8B7AIAAewC/2IACv8B7wIAAW0K/wHzAQ4BAAEQAv9iAAv/ARABAAEOAfMK/wFtAgABkgH/
+        YgAL/wGSAgAB7Ar/AfECAAEQAf9iAAz/AQ4BAAEOAfMK/wFtAgABB2IADP8B7wLsAfEK/wG8AuwB72IA
+        Hv/hAAFCAU0BPgcAAT4DAAEoAwABgAMAASADAAEBAQABAQYAAQIWAAP//wD/AAMACw==
+</value>
+  </data>
+  <metadata name="smallImageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>142, 17</value>
+  </metadata>
+  <data name="smallImageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC0
+        BwAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+        AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
+        AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
+        AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
+        AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
+        AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
+        AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
+        AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
+        AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
+        AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
+        ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
+        AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
+        ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
+        AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
+        AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
+        AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
+        AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
+        AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
+        AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
+        AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
+        ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
+        AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
+        ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
+        ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
+        AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
+        AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
+        AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
+        ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
+        Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8CAA//MgABbQX/BwAB/zEA
+        AZIBAAX/AfEGAAFtMQAB/wEAAZIF/wEAARQF/zEAAf8BbQEABf8BkgEABf8xAAL/AQABBwX/AQAB6wT/
+        MQAC/wEUAQAF/wHsAQAE/zEAA/8BAAYUAQABkgP/MQAD/wEOCAAD/zEAA/8B8wEABv8BAAG8Av8xAAT/
+        AQABFAX/ARABAAL/MQAE/wEHAQAG/wEAAfMB/zEABf8BAAFtBf8BDgEQAf8xAAX/AZIBAAX/AfEBAAH/
+        MQAG/wHsAfEF/wHsAe9wAAFCAU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/gQAL
+</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAgAEBAQAAAAAAAoAQAAhgAAABAQAAAAAAAAaAUAAK4BAAAgIBAAAAAAAOgCAAAWBwAAICAAAAAA
+        AACoCAAA/gkAADAwEAAAAAAAaAYAAKYSAAAwMAAAAAAAAKgOAAAOGQAAQEAQAAAAAABoCgAAticAAEBA
+        AAAAAAAAKBYAAB4yAAAoAAAAEAAAACAAAAABAAQAAAAAAIAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAD/////////APD///gAAA8A8H//9wj//wDwj///gP//APgH//9wf/8A/wj///AP/wD/gIiIiA
+        f/AP/wAAAACP8A//gHd3eAfwD/9wj///CPAP//gP//+A8A//9w////DwD///D///+PAP////////8AAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAACAAACA
+        AAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYABAQEAAgICAAMDAwAERERABYWFgAcHBwAIiIiACkp
+        KQBVVVUATU1NAEJCQgA5OTkAgHz/AFBQ/wCTANYA/+zMAMbW7wDW5+cAkKmtAAAAMwAAAGYAAACZAAAA
+        zAAAMwAAADMzAAAzZgAAM5kAADPMAAAz/wAAZgAAAGYzAABmZgAAZpkAAGbMAABm/wAAmQAAAJkzAACZ
+        ZgAAmZkAAJnMAACZ/wAAzAAAAMwzAADMZgAAzJkAAMzMAADM/wAA/2YAAP+ZAAD/zAAzAAAAMwAzADMA
+        ZgAzAJkAMwDMADMA/wAzMwAAMzMzADMzZgAzM5kAMzPMADMz/wAzZgAAM2YzADNmZgAzZpkAM2bMADNm
+        /wAzmQAAM5kzADOZZgAzmZkAM5nMADOZ/wAzzAAAM8wzADPMZgAzzJkAM8zMADPM/wAz/zMAM/9mADP/
+        mQAz/8wAM///AGYAAABmADMAZgBmAGYAmQBmAMwAZgD/AGYzAABmMzMAZjNmAGYzmQBmM8wAZjP/AGZm
+        AABmZjMAZmZmAGZmmQBmZswAZpkAAGaZMwBmmWYAZpmZAGaZzABmmf8AZswAAGbMMwBmzJkAZszMAGbM
+        /wBm/wAAZv8zAGb/mQBm/8wAzAD/AP8AzACZmQAAmTOZAJkAmQCZAMwAmQAAAJkzMwCZAGYAmTPMAJkA
+        /wCZZgAAmWYzAJkzZgCZZpkAmWbMAJkz/wCZmTMAmZlmAJmZmQCZmcwAmZn/AJnMAACZzDMAZsxmAJnM
+        mQCZzMwAmcz/AJn/AACZ/zMAmcxmAJn/mQCZ/8wAmf//AMwAAACZADMAzABmAMwAmQDMAMwAmTMAAMwz
+        MwDMM2YAzDOZAMwzzADMM/8AzGYAAMxmMwCZZmYAzGaZAMxmzACZZv8AzJkAAMyZMwDMmWYAzJmZAMyZ
+        zADMmf8AzMwAAMzMMwDMzGYAzMyZAMzMzADMzP8AzP8AAMz/MwCZ/2YAzP+ZAMz/zADM//8AzAAzAP8A
+        ZgD/AJkAzDMAAP8zMwD/M2YA/zOZAP8zzAD/M/8A/2YAAP9mMwDMZmYA/2aZAP9mzADMZv8A/5kAAP+Z
+        MwD/mWYA/5mZAP+ZzAD/mf8A/8wAAP/MMwD/zGYA/8yZAP/MzAD/zP8A//8zAMz/ZgD//5kA///MAGZm
+        /wBm/2YAZv//AP9mZgD/Zv8A//9mACEApQBfX18Ad3d3AIaGhgCWlpYAy8vLALKysgDX19cA3d3dAOPj
+        4wDq6uoA8fHxAPj4+ADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8ACgoKCgoK
+        CgoKCgoKCgoKCgr//////////////////woK/xT//////20KFBQUFP8KCv8K8f/////xCpL/////Cgr/
+        EG3//////20U/////woK/5IK8f////8HCgf///8KCv//Duz//////xQU////Cgr//+wO7Ozs7OwSCvH/
+        /woK///zDgoKCgoKCgpt//8KCv///+sOBwcHBwfsCvH/Cgr////xCpL//////w7s/woK/////21D////
+        ///sDv8KCv////+8Cv//////8w7/Cgr//////xT///////9t/woK//////////////////8KCgoKCgoK
+        CgoKCgoKCgoKCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAA
+        gAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+        AAAAAAAAAAAAAAAAAAAP///////////////////wB3f///////93d3d3d3d38AcAj///////AAAAAAAA
+        CPAPAA///////4AAAAAAAABwD4AI//////9wAAAAAAAAgA/wAP//////+AB///////AP+ACP//////cA
+        D//////wD/8AD///////AAf/////8A//gAf//////4AI//////AP/3AA///////wAH/////wD//4AH//
+        ////+ACP////8A//9wCP//////8AD/////AP//8AB///////gAj////wD///cAj///////AA////8A//
+        //AAAAAAAAAAAI////AP///4AAAAAAAAAAAP///wD////wAAAAAAAAAAB///8A////+AAIiIiIiIgAD/
+        //AP////8AD///////AAf//wD/////gAf//////4AI//8A/////3AA///////wAH//AP/////4AH////
+        //+ACP/wD/////9wCP//////8AD/8A//////8AB///////gAj/AP//////cAj///////AA/wD///////
+        AA///////4AI8A///////4AI//////9wAPAP///////wAP//////+ABwD///////94h///////eIcA//
+        //////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAIAAAAEAAAAABAAgAAAAAAAAE
+        AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA3MAA8MqmAAQE
+        BAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8/wBQUP8AkwDWAP/s
+        zADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAzzAAAM/8AAGYAAABm
+        MwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADMMwAAzGYAAMyZAADM
+        zAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMzMwAzM2YAMzOZADMz
+        zAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZzAAzmf8AM8wAADPM
+        MwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYAZgBmAJkAZgDMAGYA
+        /wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZAABmmTMAZplmAGaZ
+        mQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA/wD/AMwAmZkAAJkz
+        mQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlmzACZM/8AmZkzAJmZ
+        ZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnMZgCZ/5kAmf/MAJn/
+        /wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxmAADMZjMAmWZmAMxm
+        mQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzMmQDMzMwAzMz/AMz/
+        AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8zmQD/M8wA/zP/AP9m
+        AAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/MAAD/zDMA/8xmAP/M
+        mQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//ZgAhAKUAX19fAHd3
+        dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSgoACAgIAAAAD/AAD/
+        AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////
+        /////////////////////////////////wAA8QcH8//////////////zBwcHBwcHBwcHBwcHB/H/AADv
+        Cgpt//////////////MKCgoKCgoKCgoKCgoKEv8AAP8QCg7z/////////////20KCgoKCgoKCgoKCgoK
+        8QAA/5IKCuz/////////////8QoKCgoKCgoKCgoKCgptAAD//w4KDv//////////////EgoKB///////
+        //////8AAP//7AoKkv////////////8HCgoU/////////////wAA///zDgoQ//////////////8UCgq8
+        ////////////AAD///9tCgrv/////////////5IKCm3///////////8AAP////EKChT/////////////
+        /xAKCvH//////////wAA/////20KCgf/////////////kgoK6///////////AAD/////BwoKbf//////
+        ///////zDgoO8/////////8AAP//////FAoK8f/////////////sCgrs/////////wAA///////vCgpt
+        //////////////MKChD/////////AAD///////8QCg4UFBQUFBQUFBQUFA4KCpL///////8AAP//////
+        /5IKCgoKCgoKCgoKCgoKCgoKEP///////wAA/////////w4KCgoKCgoKCgoKCgoKCgoKB///////AAD/
+        ////////7AoKFOzs7Ozs7Ozs7OzrCgoU//////8AAP/////////zDgoQ//////////////8UCgq8////
+        /wAA//////////9tCgrv/////////////5IKCm3/////AAD///////////EKChT//////////////xAK
+        CvH///8AAP///////////20KCgf/////////////kgoK6////wAA////////////BwoKbf//////////
+        ////DgoO8///AAD/////////////FAoK8f/////////////sCgrs//8AAP/////////////vCgpt////
+        //////////MOChD//wAA//////////////8QCg7z/////////////20KCpL/AAD//////////////5IK
+        Cuz/////////////8QoKEP8AAP///////////////w4KDvP/////////////bQoKBwAA////////////
+        ////7+zs8f////////////+87OzvAAD///////////////////////////////////////8AAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAwAAAAYAAAAAEABAAAAAAAgAQAAAAA
+        AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD/
+        /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        ///////wD//////////////////////////////wD//////////////////////////////wDwAAj///
+        ///////4AAAAAAAAAAAAAP/wD3AAD///////////AAAAAAAAAAAAAI/wD/AACP//////////gAAAAAAA
+        AAAAAA/wD/gAAP//////////cAAAAAAAAAAAAAjwD/8AAI//////////+AAAAAAAAAAAAAjwD/+AAA//
+        ////////9wAAf//////////wD//wAAj//////////wAAD//////////wD//4AAD//////////3AAB///
+        ///////wD//3AAB///////////AACP/////////wD///gACP//////////gAAH/////////wD///cAAH
+        //////////8AAI/////////wD///8AAI//////////+AAA/////////wD///9wAA///////////wAAj/
+        ///////wD////wAAj//////////4AAD////////wD////4AAD//////////3AACP///////wD/////AA
+        CP//////////gAAP///////wD/////gAAP//////////cAAI///////wD/////8AAI//////////8AAA
+        ///////wD/////+AAA//////////9wAAf//////wD/////9wAAAAAAAAAAAAAAAAj//////wD//////4
+        AAAAAAAAAAAAAAAAB//////wD//////3AAAAAAAAAAAAAAAACP/////wD///////AAAAAAAAAAAAAAAA
+        AP/////wD///////cAAAAAAAAAAAAAAAAI/////wD///////8AAI//////////+AAA/////wD///////
+        +AAA//////////9wAAj////wD////////wAAj//////////4AAD////wD////////4AAD//////////3
+        AACP///wD/////////AACP//////////AAAP///wD/////////gAAP//////////cAAH///wD///////
+        //cAAH//////////8AAI///wD/////////+AAA//////////+AAAf//wD/////////9wAAf/////////
+        /wAAj//wD//////////wAAj//////////4AAD//wD//////////3AAB///////////AACP/wD///////
+        ////AACP//////////gAAP/wD///////////gAAP//////////cAAI/wD///////////8AAI////////
+        //+AAA/wD///////////+AAA//////////9wAAjwD////////////wAAj//////////wAADwD///////
+        ///////////////////////wD//////////////////////////////wD///////////////////////
+        ///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAADAA
+        AABgAAAAAQAIAAAAAAAACQAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+        AADAwMAAwNzAAPDKpgAEBAQACAgIAAwMDAAREREAFhYWABwcHAAiIiIAKSkpAFVVVQBNTU0AQkJCADk5
+        OQCAfP8AUFD/AJMA1gD/7MwAxtbvANbn5wCQqa0AAAAzAAAAZgAAAJkAAADMAAAzAAAAMzMAADNmAAAz
+        mQAAM8wAADP/AABmAAAAZjMAAGZmAABmmQAAZswAAGb/AACZAAAAmTMAAJlmAACZmQAAmcwAAJn/AADM
+        AAAAzDMAAMxmAADMmQAAzMwAAMz/AAD/ZgAA/5kAAP/MADMAAAAzADMAMwBmADMAmQAzAMwAMwD/ADMz
+        AAAzMzMAMzNmADMzmQAzM8wAMzP/ADNmAAAzZjMAM2ZmADNmmQAzZswAM2b/ADOZAAAzmTMAM5lmADOZ
+        mQAzmcwAM5n/ADPMAAAzzDMAM8xmADPMmQAzzMwAM8z/ADP/MwAz/2YAM/+ZADP/zAAz//8AZgAAAGYA
+        MwBmAGYAZgCZAGYAzABmAP8AZjMAAGYzMwBmM2YAZjOZAGYzzABmM/8AZmYAAGZmMwBmZmYAZmaZAGZm
+        zABmmQAAZpkzAGaZZgBmmZkAZpnMAGaZ/wBmzAAAZswzAGbMmQBmzMwAZsz/AGb/AABm/zMAZv+ZAGb/
+        zADMAP8A/wDMAJmZAACZM5kAmQCZAJkAzACZAAAAmTMzAJkAZgCZM8wAmQD/AJlmAACZZjMAmTNmAJlm
+        mQCZZswAmTP/AJmZMwCZmWYAmZmZAJmZzACZmf8AmcwAAJnMMwBmzGYAmcyZAJnMzACZzP8Amf8AAJn/
+        MwCZzGYAmf+ZAJn/zACZ//8AzAAAAJkAMwDMAGYAzACZAMwAzACZMwAAzDMzAMwzZgDMM5kAzDPMAMwz
+        /wDMZgAAzGYzAJlmZgDMZpkAzGbMAJlm/wDMmQAAzJkzAMyZZgDMmZkAzJnMAMyZ/wDMzAAAzMwzAMzM
+        ZgDMzJkAzMzMAMzM/wDM/wAAzP8zAJn/ZgDM/5kAzP/MAMz//wDMADMA/wBmAP8AmQDMMwAA/zMzAP8z
+        ZgD/M5kA/zPMAP8z/wD/ZgAA/2YzAMxmZgD/ZpkA/2bMAMxm/wD/mQAA/5kzAP+ZZgD/mZkA/5nMAP+Z
+        /wD/zAAA/8wzAP/MZgD/zJkA/8zMAP/M/wD//zMAzP9mAP//mQD//8wAZmb/AGb/ZgBm//8A/2ZmAP9m
+        /wD//2YAIQClAF9fXwB3d3cAhoaGAJaWlgDLy8sAsrKyANfX1wDd3d0A4+PjAOrq6gDx8fEA+Pj4APD7
+        /wCkoKAAgICAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////////////
+        /////////////////wAA////////////////////////////////////////////////////////////
+        /wAA/////////////////////////////////////////////////////////////wAA/xQKCgpt////
+        /////////////////+wKCgoKCgoKCgoKCgoKCgoKCgoKDvP//wAA/wcKCgoK8///////////////////
+        //MOCgoKCgoKCgoKCgoKCgoKCgoKCuz//wAA//8QCgoK7P////////////////////9tCgoKCgoKCgoK
+        CgoKCgoKCgoKCg7//wAA//+SCgoKDvP////////////////////xCgoKCgoKCgoKCgoKCgoKCgoKCgqS
+        /wAA////EAoKCpL/////////////////////bQoKCgoUFBQUFBQUFBQUFBQUFBRt/wAA////7AoKChD/
+        ////////////////////BwoKCgrv/////////////////////wAA////8w4KCgqS////////////////
+        /////xQKCgoU/////////////////////wAA/////+sKCgoU/////////////////////+8KCgoKB///
+        /////////////////wAA//////EKCgoKB/////////////////////8QCgoKbf//////////////////
+        /wAA//////9tCgoKEv////////////////////+SCgoKCvH//////////////////wAA//////+8CgoK
+        CvH/////////////////////DgoKCm3//////////////////wAA////////FAoKCm3/////////////
+        ////////7AoKCgrz/////////////////wAA////////BwoKCgrz////////////////////8w4KCgrs
+        /////////////////wAA/////////xAKCgrs/////////////////////20KCgoO8///////////////
+        /wAA/////////5IKCgoO8/////////////////////EKCgoKkv///////////////wAA//////////8Q
+        CgoKkv////////////////////9tCgoKEP///////////////wAA///////////sCgoKEP//////////
+        //////////8HCgoKCpL//////////////wAA///////////zDgoKCpL/////////////////////FAoK
+        ChT//////////////wAA////////////6woKChT/////////////////////7woKCgoH////////////
+        /wAA////////////8QoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoS/////////////wAA////////////
+        /20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK8f///////////wAA/////////////7wKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKbf///////////wAA//////////////8UCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCvP//////////wAA//////////////8HCgoKCkMUFBQUFBQUFBQUFBQUFBQUDgoKCuz/////////
+        /wAA////////////////EAoKCuz/////////////////////bQoKCg7z/////////wAA////////////
+        ////kgoKCg7z////////////////////8QoKCgqS/////////wAA/////////////////xAKCgrs////
+        /////////////////20KCgoQ/////////wAA/////////////////+wKCgoQ////////////////////
+        /7wKCgoKkv///////wAA//////////////////MOCgoKkv////////////////////8UCgoKFP//////
+        /wAA///////////////////rCgoKQ/////////////////////8HCgoKCgf//////wAA////////////
+        ///////xCgoKCgf/////////////////////EAoKChL//////wAA////////////////////bQoKChT/
+        ////////////////////kgoKCgrx/////wAA////////////////////vAoKCgrx////////////////
+        /////xAKCgpt/////wAA/////////////////////xQKCgpt/////////////////////+wKCgoK8///
+        /wAA/////////////////////wcKCgoK8f////////////////////MOCgoK7P///wAA////////////
+        //////////9DCgoK7P/////////////////////rCgoKDvP//wAA//////////////////////+SCgoK
+        DvP////////////////////xCgoKCpL//wAA////////////////////////EAoKCuz/////////////
+        ////////bQoKChD//wAA////////////////////////7AoKChD/////////////////////vAoKCgqS
+        /wAA////////////////////////8w4KCgqS/////////////////////xQKCgoU/wAA////////////
+        /////////////////////////////////////////////////wAA////////////////////////////
+        /////////////////////////////////wAA////////////////////////////////////////////
+        /////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAAAAABAAQAAAAAAAAIAAAAAAAAAAAAABAA
+        AAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAP8A
+        /wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////
+        //////////////////AP////////////////////////////////////////8A//////////////////
+        ///////////////////////wD/////////////////////////////////////////AP+IiIf///////
+        ///////4iIiIiIiIiIiIiIiIiH//8A/wAAAP//////////////gAAAAAAAAAAAAAAAAAD//wD/gAAAj/
+        /////////////wAAAAAAAAAAAAAAAAAI//AP/wAAAP//////////////gAAAAAAAAAAAAAAAAAD/8A//
+        gAAAj//////////////wAAAAAAAAAAAAAAAAAI/wD//wAAAP//////////////gAAAAAAAAAAAAAAAAA
+        D/AP//gAAAf/////////////9wAAAAAAAAAAAAAAAAAH8A//9wAACP//////////////gAAAf///////
+        ///////wD///gAAAf/////////////9wAAAP//////////////AP//9wAACP//////////////AAAAf/
+        ////////////8A////AAAA//////////////+AAACP/////////////wD///9wAACP//////////////
+        AAAAf/////////////AP////AAAA//////////////+AAACP////////////8A////+AAACP////////
+        //////AAAA/////////////wD/////AAAA//////////////+AAACP////////////AP////+AAACP//
+        ////////////AAAA////////////8A//////AAAA//////////////+AAACP///////////wD/////+A
+        AAB//////////////3AAAA////////////AP/////3AAAI//////////////+AAAB///////////8A//
+        ////+AAAB//////////////3AAAA///////////wD//////3AAAI//////////////8AAAB/////////
+        //AP//////8AAAD//////////////3AAAI//////////8A///////3AAAI//////////////8AAAB///
+        ///////wD///////8AAAD//////////////4AAAI//////////AP///////4AAAI//////////////8A
+        AAD/////////8A////////8AAAB3d3d3d3d3d3d3d4AAAI/////////wD////////4AAAAAAAAAAAAAA
+        AAAAAAAAD/////////AP////////8AAAAAAAAAAAAAAAAAAAAAAI////////8A/////////4AAAAAAAA
+        AAAAAAAAAAAAAAD////////wD/////////cAAAAAAAAAAAAAAAAAAAAAAI////////AP/////////4AA
+        AAAAAAAAAAAAAAAAAAAAD///////8A//////////cAAAAAAAAAAAAAAAAAAAAAAH///////wD///////
+        ///wAAAH//////////////cAAAj///////AP//////////cAAAj//////////////wAAAH//////8A//
+        /////////wAAAP//////////////gAAAj//////wD///////////gAAAj//////////////wAAAP////
+        //AP///////////wAAAP//////////////gAAAj/////8A////////////gAAAj//////////////wAA
+        AP/////wD////////////wAAAP//////////////gAAAj/////AP////////////gAAAf///////////
+        //9wAAAP////8A////////////9wAAAP//////////////gAAAj////wD/////////////gAAAf/////
+        ////////9wAAAP////AP////////////9wAACP//////////////AAAAf///8A//////////////AAAA
+        f/////////////9wAACP///wD/////////////9wAACP//////////////AAAAf///AP////////////
+        //AAAA//////////////+AAACP//8A//////////////+AAACP//////////////AAAA///wD///////
+        ////////AAAA//////////////+AAACP//AP//////////////+AAACP//////////////AAAA//8A//
+        //////////////AAAA//////////////+AAACP/wD///////////////+AAAB//////////////3AAAA
+        //AP///////////////3AAAA//////////////+AAACP8A////////////////+AAAB/////////////
+        /3AAAA/wD////////////////3AAAI//////////////8AAAB/AP////////////////////////////
+        ////////////8A/////////////////////////////////////////wD///////////////////////
+        //////////////////AP////////////////////////////////////////8AAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAQAAAAIAA
+        AAABAAgAAAAAAAAQAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDA
+        wADA3MAA8MqmAAQEBAAICAgADAwMABEREQAWFhYAHBwcACIiIgApKSkAVVVVAE1NTQBCQkIAOTk5AIB8
+        /wBQUP8AkwDWAP/szADG1u8A1ufnAJCprQAAADMAAABmAAAAmQAAAMwAADMAAAAzMwAAM2YAADOZAAAz
+        zAAAM/8AAGYAAABmMwAAZmYAAGaZAABmzAAAZv8AAJkAAACZMwAAmWYAAJmZAACZzAAAmf8AAMwAAADM
+        MwAAzGYAAMyZAADMzAAAzP8AAP9mAAD/mQAA/8wAMwAAADMAMwAzAGYAMwCZADMAzAAzAP8AMzMAADMz
+        MwAzM2YAMzOZADMzzAAzM/8AM2YAADNmMwAzZmYAM2aZADNmzAAzZv8AM5kAADOZMwAzmWYAM5mZADOZ
+        zAAzmf8AM8wAADPMMwAzzGYAM8yZADPMzAAzzP8AM/8zADP/ZgAz/5kAM//MADP//wBmAAAAZgAzAGYA
+        ZgBmAJkAZgDMAGYA/wBmMwAAZjMzAGYzZgBmM5kAZjPMAGYz/wBmZgAAZmYzAGZmZgBmZpkAZmbMAGaZ
+        AABmmTMAZplmAGaZmQBmmcwAZpn/AGbMAABmzDMAZsyZAGbMzABmzP8AZv8AAGb/MwBm/5kAZv/MAMwA
+        /wD/AMwAmZkAAJkzmQCZAJkAmQDMAJkAAACZMzMAmQBmAJkzzACZAP8AmWYAAJlmMwCZM2YAmWaZAJlm
+        zACZM/8AmZkzAJmZZgCZmZkAmZnMAJmZ/wCZzAAAmcwzAGbMZgCZzJkAmczMAJnM/wCZ/wAAmf8zAJnM
+        ZgCZ/5kAmf/MAJn//wDMAAAAmQAzAMwAZgDMAJkAzADMAJkzAADMMzMAzDNmAMwzmQDMM8wAzDP/AMxm
+        AADMZjMAmWZmAMxmmQDMZswAmWb/AMyZAADMmTMAzJlmAMyZmQDMmcwAzJn/AMzMAADMzDMAzMxmAMzM
+        mQDMzMwAzMz/AMz/AADM/zMAmf9mAMz/mQDM/8wAzP//AMwAMwD/AGYA/wCZAMwzAAD/MzMA/zNmAP8z
+        mQD/M8wA/zP/AP9mAAD/ZjMAzGZmAP9mmQD/ZswAzGb/AP+ZAAD/mTMA/5lmAP+ZmQD/mcwA/5n/AP/M
+        AAD/zDMA/8xmAP/MmQD/zMwA/8z/AP//MwDM/2YA//+ZAP//zABmZv8AZv9mAGb//wD/ZmYA/2b/AP//
+        ZgAhAKUAX19fAHd3dwCGhoYAlpaWAMvLywCysrIA19fXAN3d3QDj4+MA6urqAPHx8QD4+PgA8Pv/AKSg
+        oACAgIAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////Cgr/////////////////
+        /////////////////////////////////////////////////////////////////woK////////////
+        //////////////////////////////////////////////////////////////////////8KCv/z7Ozs
+        7Ozv/////////////////////////////5Ls7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//////Cgr/
+        /xAKCgoKDvP///////////////////////////+SCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8///
+        /woK//+SCgoKCgqS////////////////////////////8w4KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        Cuz///8KCv///xAKCgoKEP/////////////////////////////sCgoKCgoKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoQ////Cgr////sCgoKCgqS////////////////////////////8woKCgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCpL//woK////8w4KCgoKFP////////////////////////////9tCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgpD//8KCv/////rCgoKCgoH////////////////////////////8QoKCgoKChQU
+        FBQUFBQUFBQUFBQUFBQUFBQUFPH/Cgr/////8QoKCgoKEv////////////////////////////8SCgoK
+        Cgrv/////////////////////////////woK//////9tCgoKCgrx////////////////////////////
+        BwoKCgoKFP////////////////////////////8KCv//////vAoKCgoKbf//////////////////////
+        //////8UCgoKCgoH////////////////////////////Cgr///////8UCgoKCgrz////////////////
+        ////////////kgoKCgoKbf///////////////////////////woK////////BwoKCgoK7P//////////
+        //////////////////8QCgoKCgrx//////////////////////////8KCv////////8QCgoKCg7z////
+        ////////////////////////kgoKCgoKbf//////////////////////////Cgr/////////kgoKCgoK
+        kv////////////////////////////MOCgoKCg7z/////////////////////////woK//////////8Q
+        CgoKChD/////////////////////////////7AoKCgoK7P////////////////////////8KCv//////
+        ////7AoKCgoKkv////////////////////////////MOCgoKCg7/////////////////////////Cgr/
+        //////////MOCgoKChT/////////////////////////////bQoKCgoKkv//////////////////////
+        /woK////////////6woKCgoKB/////////////////////////////EKCgoKChD/////////////////
+        //////8KCv////////////EKCgoKChL/////////////////////////////bQoKCgoK7///////////
+        ////////////Cgr/////////////bQoKCgoK8f///////////////////////////wcKCgoKChT/////
+        /////////////////woK/////////////7wKCgoKCm3/////////////////////////////FAoKCgoK
+        B/////////////////////8KCv//////////////FAoKCgoK8////////////////////////////+8K
+        CgoKCm3/////////////////////Cgr//////////////wcKCgoKCuz/////////////////////////
+        ////EAoKCgoK8f///////////////////woK////////////////EAoKCgoO8///////////////////
+        /////////5IKCgoKCm3///////////////////8KCv///////////////5IKCgoKCpL/////////////
+        ////////////////DgoKCgoK8///////////////////Cgr/////////////////EAoKCgoQBwcHBwcH
+        BwcHBwcHBwcHBwcHBwcHBxIKCgoKCuz//////////////////woK/////////////////+wKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoO8/////////////////8KCv/////////////////zDgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL/////////////////Cgr/////////////////
+        /+sKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ/////////////////woK////////////
+        ///////xCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCpL///////////////8KCv//////
+        /////////////20KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoU////////////////Cgr/
+        //////////////////+8CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgf/////////////
+        /woK/////////////////////xQKCgoKCvH////////////////////////////vCgoKCgoS////////
+        //////8KCv////////////////////8HCgoKCgrs/////////////////////////////xAKCgoKCvH/
+        ////////////Cgr//////////////////////xAKCgoKDvP///////////////////////////+SCgoK
+        Cgpt/////////////woK//////////////////////+SCgoKCgrs////////////////////////////
+        /w4KCgoKCvP///////////8KCv///////////////////////xAKCgoKEP//////////////////////
+        ///////sCgoKCgrs////////////Cgr////////////////////////sCgoKCgqS////////////////
+        ////////////8w4KCgoKDvP//////////woK////////////////////////8w4KCgoKQ///////////
+        //////////////////9tCgoKCgqS//////////8KCv/////////////////////////sCgoKCgoH////
+        ////////////////////////8QoKCgoKEP//////////Cgr/////////////////////////8QoKCgoK
+        FP////////////////////////////9tCgoKCgqS/////////woK//////////////////////////9t
+        CgoKCgrx////////////////////////////BwoKCgoKFP////////8KCv//////////////////////
+        ////8QoKCgoKbf////////////////////////////8UCgoKCgoH////////Cgr/////////////////
+        //////////8UCgoKCgrx////////////////////////////7woKCgoKEv///////woK////////////
+        ////////////////BwoKCgoK7P////////////////////////////8QCgoKCgrx//////8KCv//////
+        //////////////////////9DCgoKCg7z////////////////////////////kgoKCgoKbf//////Cgr/
+        ////////////////////////////kgoKCgoK7P////////////////////////////8OCgoKCgrz////
+        /woK//////////////////////////////8QCgoKChD/////////////////////////////7AoKCgoK
+        7P////8KCv//////////////////////////////7AoKCgoKkv////////////////////////////MO
+        CgoKCg7z////Cgr///////////////////////////////MOCgoKCkP/////////////////////////
+        ////bQoKCgoKkv///woK////////////////////////////////7AoKCgoKB///////////////////
+        //////////EKCgoKChD///8KCv////////////////////////////////EKCgoKChT/////////////
+        ////////////////bQoKCgoKkv//Cgr/////////////////////////////////bQoKCgoK8f//////
+        /////////////////////wcKCgoKChT//woK//////////////////////////////////EKCgoKCm3/
+        ////////////////////////////FAoKCgoKB/8KCv//////////////////////////////////////
+        ////////////////////////////////////////////Cgr/////////////////////////////////
+        /////////////////////////////////////////////////woK////////////////////////////
+        //////////////////////////////////////////////////////8KCv//////////////////////
+        ////////////////////////////////////////////////////////////CgoKCgoKCgoKCgoKCgoK
+        CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MergeConfigs.cmd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MergeConfigs.cmd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/MergeConfigs.cmd	(revision 1270)
@@ -0,0 +1,5 @@
+ConfigMerger "%SolutionDir%\HeuristicLab.PluginInfrastructure\%Outdir%\HeuristicLab.PluginInfrastructure.dll.config" "HeuristicLab.exe.config"
+ConfigMerger "%SolutionDir%\HeuristicLab.PluginInfrastructure.GUI\%Outdir%\HeuristicLab.PluginInfrastructure.GUI.dll.config" "HeuristicLab.exe.config"
+ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Core\%Outdir%\HeuristicLab.Hive.Client.Core-3.2.dll.config" "HeuristicLab.exe.config"
+ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Client.Console\%Outdir%\HeuristicLab.Hive.Client.Console-3.2.dll.config" "HeuristicLab.exe.config"
+ConfigMerger "%SolutionDir%\HeuristicLab.Hive.Server.ADODataAccess\%Outdir%\HeuristicLab.Hive.Server.ADODataAccess-3.2.dll.config" "HeuristicLab.exe.config"
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Program.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Program.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Program.cs	(revision 1270)
@@ -0,0 +1,83 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using System.Xml;
+using System.Threading;
+using System.Text;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab {
+  static class Program {
+    [STAThread]
+    static void Main(string[] args) {
+      try {
+        if (args.Length == 0) {  // normal mode
+          Application.EnableVisualStyles();
+          Application.SetCompatibleTextRenderingDefault(false);
+          Application.Run(new MainForm());
+        } else if (args.Length == 1) {  // start specific application
+          PluginManager.Manager.Initialize();
+
+          ApplicationInfo app = null;
+          foreach (ApplicationInfo info in PluginManager.Manager.InstalledApplications) {
+            if (info.Name == args[0])
+              app = info;
+          }
+          if (app == null) {  // application not found
+            MessageBox.Show("Cannot start application.\nApplication " + args[0] + " is not installed.\n\nStarting HeuristicLab in normal mode ...",
+                            "HeuristicLab",
+                            MessageBoxButtons.OK,
+                            MessageBoxIcon.Warning);
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new MainForm());
+          } else {
+            PluginManager.Manager.Run(app);
+          }
+        }
+      }
+      catch (Exception ex) {
+        ShowErrorMessageBox(ex);
+      }
+    }
+
+    public static void ShowErrorMessageBox(Exception ex) {
+      MessageBox.Show(BuildErrorMessage(ex),
+                      "Error - " + ex.GetType().Name,
+                      MessageBoxButtons.OK,
+                      MessageBoxIcon.Error);
+    }
+
+    private static string BuildErrorMessage(Exception ex) {
+      StringBuilder sb = new StringBuilder();
+      sb.Append("Sorry, but something went wrong!\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+
+      while (ex.InnerException != null) {
+        ex = ex.InnerException;
+        sb.Append("\n\n-----\n\n" + ex.Message + "\n\n" + ex.StackTrace);
+      }
+      return sb.ToString();
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/AssemblyInfo.frame
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/AssemblyInfo.frame	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/AssemblyInfo.frame	(revision 1270)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using HeuristicLab.PluginInfrastructure;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab")]
+[assembly: AssemblyDescription("HeuristicLab")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2008 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("0add4132-8872-4c5c-bba5-1de2f6486dd8")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("3.2.0.$WCREV$")]
+[assembly: AssemblyFileVersion("3.2.0.$WCREV$")]
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Resources.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Resources.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Resources.Designer.cs	(revision 1270)
@@ -0,0 +1,119 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.1433
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HeuristicLab.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Details {
+            get {
+                object obj = ResourceManager.GetObject("Details", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Icon HeuristicLab {
+            get {
+                object obj = ResourceManager.GetObject("HeuristicLab", resourceCulture);
+                return ((System.Drawing.Icon)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap LargeIcons {
+            get {
+                object obj = ResourceManager.GetObject("LargeIcons", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap List {
+            get {
+                object obj = ResourceManager.GetObject("List", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap Logo_white {
+            get {
+                object obj = ResourceManager.GetObject("Logo_white", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Resources.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Resources.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Resources.resx	(revision 1270)
@@ -0,0 +1,136 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Details" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Details.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="HeuristicLab" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\HeuristicLab.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="LargeIcons" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\LargeIcons.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="List" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\List.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Logo_white" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Logo_white.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Settings.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Settings.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Settings.Designer.cs	(revision 1270)
@@ -0,0 +1,44 @@
+﻿//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.3053
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HeuristicLab.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("unknown")]
+        public string User {
+            get {
+                return ((string)(this["User"]));
+            }
+        }
+        
+        [global::System.Configuration.ApplicationScopedSettingAttribute()]
+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [global::System.Configuration.DefaultSettingValueAttribute("unknown")]
+        public string Organization {
+            get {
+                return ((string)(this["Organization"]));
+            }
+        }
+    }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Settings.settings
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Settings.settings	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/Properties/Settings.settings	(revision 1270)
@@ -0,0 +1,12 @@
+﻿<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="HeuristicLab.Properties" GeneratedClassName="Settings">
+  <Profiles />
+  <Settings>
+    <Setting Name="User" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">unknown</Value>
+    </Setting>
+    <Setting Name="Organization" Type="System.String" Scope="Application">
+      <Value Profile="(Default)">unknown</Value>
+    </Setting>
+  </Settings>
+</SettingsFile>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.Designer.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.Designer.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.Designer.cs	(revision 1270)
@@ -0,0 +1,237 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+namespace HeuristicLab {
+  partial class SplashScreen {
+    /// <summary>
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary>
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+    
+
+    #region Windows Form Designer generated code
+
+    /// <summary>
+    /// Required method for Designer support - do not modify
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      this.components = new System.ComponentModel.Container();
+      System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SplashScreen));
+      this.panel = new System.Windows.Forms.Panel();
+      this.closeButton = new System.Windows.Forms.Button();
+      this.imageList = new System.Windows.Forms.ImageList(this.components);
+      this.companyLabel = new System.Windows.Forms.Label();
+      this.userNameLabel = new System.Windows.Forms.Label();
+      this.licensedToLabel = new System.Windows.Forms.Label();
+      this.titleLabel = new System.Windows.Forms.Label();
+      this.versionLabel = new System.Windows.Forms.Label();
+      this.infoLabel = new System.Windows.Forms.Label();
+      this.copyrightLabel = new System.Windows.Forms.Label();
+      this.pictureBox = new System.Windows.Forms.PictureBox();
+      this.panel.SuspendLayout();
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // panel
+      // 
+      this.panel.BackColor = System.Drawing.SystemColors.Window;
+      this.panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+      this.panel.Controls.Add(this.closeButton);
+      this.panel.Controls.Add(this.companyLabel);
+      this.panel.Controls.Add(this.userNameLabel);
+      this.panel.Controls.Add(this.licensedToLabel);
+      this.panel.Controls.Add(this.titleLabel);
+      this.panel.Controls.Add(this.versionLabel);
+      this.panel.Controls.Add(this.infoLabel);
+      this.panel.Controls.Add(this.copyrightLabel);
+      this.panel.Controls.Add(this.pictureBox);
+      this.panel.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.panel.Location = new System.Drawing.Point(0, 0);
+      this.panel.Name = "panel";
+      this.panel.Size = new System.Drawing.Size(625, 161);
+      this.panel.TabIndex = 0;
+      // 
+      // closeButton
+      // 
+      this.closeButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+      this.closeButton.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
+      this.closeButton.FlatAppearance.BorderColor = System.Drawing.Color.White;
+      this.closeButton.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Gray;
+      this.closeButton.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White;
+      this.closeButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+      this.closeButton.ForeColor = System.Drawing.Color.White;
+      this.closeButton.ImageIndex = 0;
+      this.closeButton.ImageList = this.imageList;
+      this.closeButton.Location = new System.Drawing.Point(604, 3);
+      this.closeButton.Name = "closeButton";
+      this.closeButton.Size = new System.Drawing.Size(16, 16);
+      this.closeButton.TabIndex = 7;
+      this.closeButton.UseVisualStyleBackColor = true;
+      this.closeButton.Click += new System.EventHandler(this.closeButton_Click);
+      // 
+      // imageList
+      // 
+      this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream")));
+      this.imageList.TransparentColor = System.Drawing.Color.Magenta;
+      this.imageList.Images.SetKeyName(0, "BuilderDialog_delete.bmp");
+      // 
+      // companyLabel
+      // 
+      this.companyLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.companyLabel.Location = new System.Drawing.Point(248, 88);
+      this.companyLabel.Name = "companyLabel";
+      this.companyLabel.Size = new System.Drawing.Size(364, 16);
+      this.companyLabel.TabIndex = 5;
+      this.companyLabel.Text = "Company";
+      this.companyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // userNameLabel
+      // 
+      this.userNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.userNameLabel.BackColor = System.Drawing.SystemColors.Window;
+      this.userNameLabel.Location = new System.Drawing.Point(248, 72);
+      this.userNameLabel.Name = "userNameLabel";
+      this.userNameLabel.Size = new System.Drawing.Size(364, 16);
+      this.userNameLabel.TabIndex = 4;
+      this.userNameLabel.Text = "User";
+      this.userNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // licensedToLabel
+      // 
+      this.licensedToLabel.Location = new System.Drawing.Point(170, 72);
+      this.licensedToLabel.Name = "licensedToLabel";
+      this.licensedToLabel.Size = new System.Drawing.Size(72, 16);
+      this.licensedToLabel.TabIndex = 3;
+      this.licensedToLabel.Text = "Licensed to:";
+      this.licensedToLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // titleLabel
+      // 
+      this.titleLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.titleLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.titleLabel.Location = new System.Drawing.Point(170, 8);
+      this.titleLabel.Name = "titleLabel";
+      this.titleLabel.Size = new System.Drawing.Size(442, 16);
+      this.titleLabel.TabIndex = 0;
+      this.titleLabel.Text = "Title";
+      this.titleLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // versionLabel
+      // 
+      this.versionLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.versionLabel.Location = new System.Drawing.Point(170, 24);
+      this.versionLabel.Name = "versionLabel";
+      this.versionLabel.Size = new System.Drawing.Size(442, 16);
+      this.versionLabel.TabIndex = 1;
+      this.versionLabel.Text = "Version ";
+      this.versionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // infoLabel
+      // 
+      this.infoLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.infoLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+      this.infoLabel.ForeColor = System.Drawing.SystemColors.GradientActiveCaption;
+      this.infoLabel.Location = new System.Drawing.Point(170, 104);
+      this.infoLabel.Name = "infoLabel";
+      this.infoLabel.Size = new System.Drawing.Size(442, 47);
+      this.infoLabel.TabIndex = 6;
+      this.infoLabel.Text = "Startup Information";
+      this.infoLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // copyrightLabel
+      // 
+      this.copyrightLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+                  | System.Windows.Forms.AnchorStyles.Right)));
+      this.copyrightLabel.Location = new System.Drawing.Point(170, 56);
+      this.copyrightLabel.Name = "copyrightLabel";
+      this.copyrightLabel.Size = new System.Drawing.Size(442, 16);
+      this.copyrightLabel.TabIndex = 2;
+      this.copyrightLabel.Text = "Copyright";
+      this.copyrightLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+      // 
+      // pictureBox
+      // 
+      this.pictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+                  | System.Windows.Forms.AnchorStyles.Left)));
+      this.pictureBox.Image = global::HeuristicLab.Properties.Resources.Logo_white;
+      this.pictureBox.Location = new System.Drawing.Point(-1, -1);
+      this.pictureBox.Name = "pictureBox";
+      this.pictureBox.Size = new System.Drawing.Size(165, 161);
+      this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
+      this.pictureBox.TabIndex = 0;
+      this.pictureBox.TabStop = false;
+      // 
+      // SplashScreen
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.ClientSize = new System.Drawing.Size(625, 161);
+      this.ControlBox = false;
+      this.Controls.Add(this.panel);
+      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
+      this.MaximizeBox = false;
+      this.MinimizeBox = false;
+      this.Name = "SplashScreen";
+      this.Opacity = 0.99;
+      this.ShowInTaskbar = false;
+      this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+      this.TopMost = true;
+      this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.SplashScreen_FormClosing);
+      this.panel.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private System.Windows.Forms.Panel panel;
+    private System.Windows.Forms.PictureBox pictureBox;
+    private System.Windows.Forms.Label companyLabel;
+    private System.Windows.Forms.Label userNameLabel;
+    private System.Windows.Forms.Label licensedToLabel;
+    private System.Windows.Forms.Label titleLabel;
+    private System.Windows.Forms.Label versionLabel;
+    private System.Windows.Forms.Label copyrightLabel;
+    private System.Windows.Forms.Label infoLabel;
+    private System.Windows.Forms.ImageList imageList;
+    private System.Windows.Forms.Button closeButton;
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.cs
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.cs	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.cs	(revision 1270)
@@ -0,0 +1,145 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2008 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Drawing;
+using System.Windows.Forms;
+using System.Reflection;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab {
+  public partial class SplashScreen : Form {
+    private const int FADE_INTERVAL = 50;
+    private System.Timers.Timer fadeTimer;
+    private int initialInterval;
+    private object bigLock = new object();
+    private bool closing = false;
+
+    public SplashScreen() {
+      InitializeComponent();
+
+      Assembly assembly = this.GetType().Assembly;
+      object[] attributes = assembly.GetCustomAttributes(false);
+      string user, company;
+
+      titleLabel.Text = Application.ProductName;
+      versionLabel.Text = "Version " + Application.ProductVersion;
+      infoLabel.Text = "";
+
+      foreach(object obj in attributes) {
+        if(obj is AssemblyCopyrightAttribute) {
+          copyrightLabel.Text = "Copyright " + ((AssemblyCopyrightAttribute)obj).Copyright;
+        }
+      }
+
+      try {
+        user = HeuristicLab.Properties.Settings.Default.User;
+        company = HeuristicLab.Properties.Settings.Default.Organization;
+
+        if((user == null) || (user.Equals(""))) {
+          userNameLabel.Text = "-";
+        } else {
+          userNameLabel.Text = user;
+        }
+
+        if((company == null) || (company.Equals(""))) {
+          companyLabel.Text = "-";
+        } else {
+          companyLabel.Text = company;
+        }
+      } catch(Exception) {
+        userNameLabel.Text = "-";
+        companyLabel.Text = "-";
+      }
+    }
+
+    public SplashScreen(int initialInterval, string initialText)
+      : this() {
+      this.initialInterval = initialInterval;
+      infoLabel.Text = initialText;
+    }
+
+    private void SetInfoText(string text) {
+      this.Invoke((MethodInvoker)delegate() { infoLabel.Text = text; });
+    }
+
+    public void Manager_Action(object sender, PluginManagerActionEventArgs e) {
+      string info;
+      if(e.Action == PluginManagerAction.Initializing) info = "Initializing ...";
+      else if(e.Action == PluginManagerAction.InitializingPlugin) info = "Initializing Plugin " + e.Id + " ...";
+      else if(e.Action == PluginManagerAction.InitializedPlugin) info = "Initializing Plugin " + e.Id + " ... Initialized";
+      else if(e.Action == PluginManagerAction.Initialized) {
+        info = "Initialization Completed";
+        fadeTimer = new System.Timers.Timer();
+        fadeTimer.SynchronizingObject = this;
+        fadeTimer.Elapsed += new System.Timers.ElapsedEventHandler(fadeTimer_Elapsed);
+        fadeTimer.Interval = initialInterval;
+        fadeTimer.AutoReset = true;
+        fadeTimer.Start();
+      } else {
+        if(e.Id != null) info = e.Action.ToString() + "   (" + e.Id + ")";
+        else info = e.Action.ToString();
+      }
+      SetInfoText(info);
+      Application.DoEvents();
+    }
+
+    private void fadeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
+      fadeTimer.Stop();
+      if(InvokeRequired) {
+        Invoke((MethodInvoker)UpdateOpacity);
+      } else {
+        UpdateOpacity();
+      }
+    }
+
+    private void UpdateOpacity() {
+      lock(bigLock) {
+        if(closing) return;
+        if(Opacity > 0.9) {
+          Opacity = 0.9;
+          fadeTimer.Interval = FADE_INTERVAL;
+          fadeTimer.Start();
+        } else if(this.Opacity > 0) {
+          Opacity -= 0.1;
+          fadeTimer.Start();
+        } else {
+          Opacity = 0;
+          Close();
+        }
+      }
+    }
+
+    private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e) {
+      PluginManager.Manager.Action -= new PluginManagerActionEventHandler(this.Manager_Action);
+    }
+
+    private void closeButton_Click(object sender, EventArgs e) {
+      lock(bigLock) {
+        closing = true;
+        if(fadeTimer != null) fadeTimer.Stop();
+        Close();
+      }
+    }
+  }
+}
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.resx
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.resx	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/SplashScreen.resx	(revision 1270)
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="imageList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>219, 17</value>
+  </metadata>
+  <data name="imageList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAi
+        AQAAAk1TRnQBSQFMAwEBAAEEAQABBAEAARABAAEQAQAE/wEZAQAI/wFCAU0BNgcAATYDAAEoAwABQAMA
+        ARADAAEBAQABGAYAAQz8AAP/nwAD/8AAA/8VAAP/pQAD/xIAA/+rAAP/DwAD/64AA/8JAAP/ugAD/7oA
+        A//AAAP/tAAD/wYAA/+xAAP/DwAD/6gAA/8VAAP/nwAD/x4AA///AP8AFQABQgFNAT4HAAE+AwABKAMA
+        AUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAv8GAAH/AfkGAAHnAf8GAAHDAfMGAAHDAecGAAHhAccGAAHw
+        AY8GAAH4AR8GAAH8AT8GAAH4AR8GAAHwAZ8GAAHBAccGAAGDAeMGAAGPAfEGAAL/BgAC/wYACw==
+</value>
+  </data>
+</root>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/UpdateLocalInstallation.cmd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/UpdateLocalInstallation.cmd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/UpdateLocalInstallation.cmd	(revision 1270)
@@ -0,0 +1,9 @@
+set target=C:\Program Files\HeuristicLab 3.0
+
+copy "HeuristicLab.exe" "%target%"
+copy "HeuristicLab.exe.config" "%target%"
+copy "HeuristicLab.PluginInfrastructure.dll" "%target%"
+copy "HeuristicLab.PluginInfrastructure.GUI.dll" "%target%"
+copy "ICSharpCode.SharpZipLib.dll" "%target%"
+copy "ICSharpCode.SharpZipLib License.txt" "%target%"
+copy "plugins\*.*" "%target%\plugins"
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/app.config
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/app.config	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/HeuristicLab/app.config	(revision 1270)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <configSections>
+        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
+            <section name="HeuristicLab.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+        </sectionGroup>
+    </configSections>
+  <connectionStrings>
+  </connectionStrings>
+  <system.serviceModel>
+  </system.serviceModel>
+  
+  <system.data>
+    <DbProviderFactories>
+      <remove invariant="System.Data.SQLite"/>
+      <add name="SQLite Data Provider" invariant="System.Data.SQLite"
+           description=".Net Framework Data Provider for SQLite"           type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
+    </DbProviderFactories>
+  </system.data>
+  <applicationSettings>
+    <HeuristicLab.Properties.Settings>
+      <setting name="User" serializeAs="String">
+        <value>unknown</value>
+      </setting>
+      <setting name="Organization" serializeAs="String">
+        <value>unknown</value>
+      </setting>
+    </HeuristicLab.Properties.Settings>
+  </applicationSettings>
+</configuration>
Index: /branches/Hive_Management_Console_Refactoring_Ticket508/PreBuildEvent.cmd
===================================================================
--- /branches/Hive_Management_Console_Refactoring_Ticket508/PreBuildEvent.cmd	(revision 1270)
+++ /branches/Hive_Management_Console_Refactoring_Ticket508/PreBuildEvent.cmd	(revision 1270)
@@ -0,0 +1,1 @@
+SubWCRev "%ProjectDir%\" "%ProjectDir%\Properties\AssemblyInfo.frame" "%ProjectDir%\Properties\AssemblyInfo.cs"
